Гиперконвергентный кластер — программно-определяемая инфраструктура, объединяющая вычислительные ресурсы, хранение данных и сетевое взаимодействие в единый модуль. Управление всем кластером осуществляется централизованно как единой системой через общую платформу.

Отказоустойчивый кластер (кластер высокой доступности, high availability cluster, HA-кластер) — группа серверов, гарантирующая минимальное время простоя виртуальных машин (ВМ).

Ceph — программное обеспечение для организации высокодоступного распределённого кластера хранения данных на серверном оборудовании общего назначения. Ceph может быть использовано как сетевое хранилище для высокодоступного хранения дисков ВМ в платформе VMmanager.

Кластер Ceph — распределённая система хранения данных, состоящая из демонов мониторов (MON), управляющих состоянием кластера, и демонов хранилища объектов (OSD), хранящих данные. Для работы с файловой системой CephFS в кластер также могут входить демоны метаданных (MDS).

Пул Ceph — логический раздел для хранения данных в кластере Ceph, который позволяет задавать политики управления (например, количество реплик или правила размещения). Пулы изолируют данные и настройки для разных пользователей, приложений или типов рабочих нагрузок.

Группы размещения (PG) — единицы распределения данных в пулах Ceph, на которые разбивается каждый пул. PG равномерно распределяются по OSD-устройствам кластера для обеспечения отказоустойчивости и балансировки нагрузки.

Репликация — процесс создания и поддержания нескольких идентичных копий данных на разных узлах системы. Репликация обеспечивает отказоустойчивость и повышает доступность данных.

OSD (Object Storage Daemon) — процесс, отвечающий за хранение данных на узлах кластера Ceph. Управляет данными, репликацией и восстановлением.

Статья описывает создание гиперконвергентного отказоустойчивого кластера, в котором узлы кластера VMmanager также являются узлами кластера Ceph.

Такая схема кластера:

  • позволяет сократить количество необходимых серверов;
  • обеспечить отказоустойчивость системы.

Требования к реализации


Для реализации кластера потребуется:

  • сервер для платформы VMmanager. Рекомендуемые требования:
    • CPU c 4 ядрами и архитектурой x86_64;
    • 8 Гб оперативной памяти;
    • SSD-накопитель объёмом не менее 300 Гб;
    • остальные требования см. в статье Требования к серверу;
  • три сервера для узлов кластера VMmanager. Рекомендуемые требования:
    • CPU с 12 ядрами, 24 потоками и аппаратной поддержки виртуализации для архитектуры x86_64;
    • 128 Гб оперативной памяти;
    • операционная система (ОС) — Astra Linux Special Edition 1.8.1 или AlmaLinux 9;
    • SSD-накопитель объёмом не менее 500 Гб для работы ОС;
    • SSD-накопитель объёмом не менее 1000 Гб для работы OSD Ceph;
    • сетевая карта 1 Гбит/c — сетевой интерфейс для подключения ОС и виртуальных машин;
    • сетевая карта 10 Гбит/c — сетевой интерфейс для подключения Ceph;
    • остальные требования см. в статье Требования к серверу для кластера.

Работа кластера на серверах с характеристиками, ниже указанных, не гарантируется.

Для стабильной работы кластера его узлы должны:

  • быть объединены в сеть по интерфейсам 10 Гбит/c;
  • использовать одинаковую модель CPU;
  • иметь одинаковую конфигурацию дисков.

Порядок настройки


Настройка кластера должна выполняться в следующей последовательности:

  1. Если платформа VMmanager не установлена, установите её по инструкции из статьи Установка.
  2. Подготовьте серверы для узлов кластера. Если вы используете:
  3. Создайте кластер VMmanager по инструкции из статьи Создание кластера. На этапе настройки хранилищ выберите тип —  Файловое хранилище.
  4. Добавьте узлы в кластер VMmanager по инструкции из статьи Управление узлами кластера.
  5. Настройте кластер Ceph по инструкции из раздела Настройка кластера Ceph.
  6. Подключите сетевое хранилище Ceph к кластеру VMmanager по инструкции из статьи Управление хранилищами кластера. При подключении создайте новый пул и пользователя Ceph.
  7. Сделайте хранилище Ceph основным и отключите файловое хранилище от кластера VMmanager по инструкции из статьи Управление хранилищами кластера
  8. Включите отказоустойчивость в кластере VMmanager по инструкции из статьи Настройка отказоустойчивости. При включении:
    1. Cоздайте ещё одного пользователя Ceph. Не используйте пользователя, который был создан при подключении хранилища.
    2. Укажите произвольное имя директории. 
    3. Укажите проверочный IP-адрес, который будет доступен с помощью утилиты ping со всех узлов кластера.

Настройка кластера Ceph


В качестве примера инструкции в этом разделе указаны для серверов со следующими настройками:

  • первый узел — IP-адрес: 192.168.100.1/24, hostname: node1;
  • второй узел — IP-адрес: 192.168.100.2/24, hostname: node2;
  • третий узел — IP-адрес: 192.168.100.3/24, hostname: node3;
  • путь к диску на всех серверах — /dev/nvme1n1.

При выполнении команд укажите реальные IP-адреса и префикс сети, hostname серверов и путь к диску.

Подготовка сети

Выделите отдельную IPv4-сеть для работы Ceph. Для этого на всех узлах кластера назначьте дополнительный статический IP-адрес из этой сети на сетевые интерфейсы 10 Гбит/c командами: 

nmcli con add type ethernet con-name <interface> ipv4.addresses <network/prefix> ipv4.method manual 
nmcli con up <interface>
CODE

Пояснения к команде:

  • <network/prefix> — IP-адрес с префиксом сети. Например, 192.168.100.1/24;

  • <interface> — имя сетевого интерфейса. Например, enp1s0.

Настройка на сервере с Astra Linux

  1. На всех узлах кластера установите ПО Ceph: 
    sudo apt update && sudo apt install -y ceph
    CODE

    Если вы выполняете настройку в закрытом контуре, для установки ПО Ceph подключите установочный образ ОС Astra Linux.

  2. Создайте файл common.sh, укажите в нём настройки кластера Ceph и скопируйте файл на все узлы кластера:
    # Укажите IP-адреса узлов Ceph
    IP_NODE1="192.168.100.1"
    IP_NODE2="192.168.100.2"
    IP_NODE3="192.168.100.3"
    
    # Укажите пользователя SSH, под которым конфигурационные файлы Ceph (ceph.conf и keyring) могут быть скопированы с первого узла на остальные
    USER_NODE1="root"
    
    # Укажите hostname узлов Ceph
    HOST_NODE1="node1"
    HOST_NODE2="node2"
    HOST_NODE3="node3"
    
    # Укажите сеть для Ceph
    PUBLIC_NETWORK="192.168.100.0/24"
    
    # Укажите путь к диску на каждом узле, который будет добавлен в Ceph
    DISK="/dev/nvme1n1"
    CODE
  3. Скачайте из репозитория ISPsystem скрипт настройки  ceph.sh и скопируйте его на все узлы кластера в директорию с файлом common.sh.
  4. На первом узле кластера запустите скрипт ceph.sh командой:

    sudo sh ceph.sh first
    CODE

    Дождитесь окончания работы скрипта. 

  5. Проверьте статус Ceph: 
    ceph -s
    CODE

    Пример вывода при успешном завершении скрипта

    id:     d46f1a09-1bc0-423a-9fdb-893b58511cb3
      health: HEALTH_WARN
              1 monitors have not enabled msgr2
              OSD count 1 < osd_pool_default_size 3
     
    services:
      mon: 1 daemons, quorum cornsilk-chrysoprase (age 93s)
      mgr: cornsilk-chrysoprase(active, since 89s)
      osd: 1 osds: 1 up (since 22s), 1 in (since 35s)
     
    data:
      pools:   0 pools, 0 pgs
      objects: 0 objects, 0 B
      usage:   419 MiB used, 15 GiB / 15 GiB avail
      pgs:
    CODE
  6. На остальных узлах кластера запустите скрипт ceph.sh командой:

    sudo sh ceph.sh others
    CODE
    Дождитесь окончания работы скрипта.
  7. На первом узле кластера запустите скрипт ceph.sh командой:
    sudo sh ceph.sh final
    CODE

    Дождитесь окончания работы скрипта.

  8. Дождитесь синхронизации Ceph на всех узлах кластера. Обычно синхронизация завершается в течение нескольких минут. Вы можете отслеживать статус синхронизации с помощью команды:
    ceph -s
    CODE
    Если узлы успешно синхронизированы, вывод должен содержать строку:
    health: HEALTH_OK
    CODE
     

Настройка на сервере с AlmaLinux

Подробные инструкции по настройке Ceph в ОС AlmaLinux см. в официальной документации Ceph.

  1. На всех узлах кластера установите ПО Podman и LVM2:
    dnf install podman lvm2 -y
    CODE
  2. На первом узле кластера:
    1. Скачайте и установите утилиту cephadm командами: 
      CEPH_RELEASE=quincy
      curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
      chmod +x cephadm
      mv cephadm /usr/local/sbin/
      CODE
    2. Запустите создание кластера Ceph: 
      cephadm bootstrap --mon-ip 192.168.100.1 --skip-monitoring-stack --allow-fqdn-hostname
      CODE
      Подробнее о команде см. в документации Ceph.
    3. Скопируйте SSH-ключи Ceph на остальные узлы: 
      ssh-copy-id -f -i /etc/ceph/ceph.pub 192.168.100.2
      ssh-copy-id -f -i /etc/ceph/ceph.pub 192.168.100.3
      CODE
    4. Откройте оболочку утилиты cephadm
      cephadm shell
      CODE
    5. Проверьте статус кластера Ceph: 
      ceph -s 
      CODE

      Пример вывода при успешном создании кластера

       cluster:
          id:     46f8a2aa-9514-11f0-96a1-5254006b08ce
          health: HEALTH_WARN
                  OSD count 0 < osd_pool_default_size 3
      
        services:
          mon: 1 daemons, quorum flax-chloromelanite (age 96s)
          mgr: flax-chloromelanite.lzuwda(active, since 72s)
          osd: 0 osds: 0 up, 0 in
      
        data:
          pools:   0 pools, 0 pgs
          objects: 0 objects, 0 B
          usage:   0 B used, 0 B / 0 B avail
          pgs:   
      CODE
    6. Добавьте остальные узлы в кластер Ceph командами: 
      ceph config set mon public_network 192.168.100.0/24
      ceph orch host add node2 192.168.100.2
      ceph orch host add node3 192.168.100.3
      CODE
      Подробнее о командах см. в документации Ceph.
    7. Добавьте диски серверов в хранилище командами: 
      ceph orch daemon add osd node1:/dev/nvme1n1
      ceph orch daemon add osd node2:/dev/nvme1n1
      ceph orch daemon add osd node3:/dev/nvme1n1
      CODE
      Подробнее о командах см. в документации Сeph.
    8. Настройте CephFS:
      ceph fs volume create vm6
      CODE
      Команда создаст том c именем vm6, необходимые пулы и настроит файловую систему. Вы можете указать произвольное имя пула вместо vm6.
  3. Дождитесь синхронизации Ceph на всех узлах кластера. Вы можете отслеживать статус синхронизации с помощью команды:
    ceph -s
    CODE
    Если узлы успешно синхронизированы, вывод должен содержать строку:
    health: HEALTH_OK
    CODE

Настройка репликации

По умолчанию Ceph создает пулы с параметром replicated size 3. Это означает, что каждый фрагмент данных (PG) будет храниться как минимум на трёх дисках (OSD). Такая настройка защищает данные от потери при сбое одного или двух дисков.

Вы можете сократить количество реплик. Это увеличит объём данных, которые можно поместить в кластер, но повысит риски их потери при одновременном сбое нескольких дисков. Если сократить количество реплик до одной, то при потере OSD данные будут утрачены.

Чтобы изменить количество реплик, выполните команду: 

ceph osd pool set <имя_пула> size <количество_реплик>
CODE

Мониторинг кластера


Статус кластера

Чтобы проверить статус кластера, выполните команду:

ceph -s
CODE

Пример вывода

  cluster:
    id:     46f8a2aa-9514-11f0-96a1-5254006b08ce
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum a,b,c (age 12h)
    mgr: a(active, since 11h)
    osd: 12 osds: 12 up, 12 in

  data:
    pools:   4 pools, 512 pgs
    objects: 2.45M objects, 45 TiB
    usage:   135 TiB used, 65 TiB avail
    pgs:     512 active+clean  

  io:
    client:   1.2 MiB/s rd, 3.4 MiB/s wr, 125 op/s rd, 450 op/s wr
CODE

Пояснения:

  • health — статус "здоровья" кластера:
    • HEALTH_OK — кластер находится в рабочем состоянии, никаких проблем не обнаружено;
    • HEALTH_WARN — возникли проблемы в работе кластера, ниже приведено описание проблемы;
    • HEALTH_ERR — возникли серьёзные ошибки в работе кластера. Необходимо срочно диагностировать проблему;
  • services — сервисы Ceph. Содержит информацию, сколько сервисов должно быть запущено и сколько запущено в данный момент;
  • data — данные Ceph:
    • количество пулов и PG;
    • статус пулов и PG;
    • usage — объём занятого места. Должно быть не выше 90%;
    • сообщения вида XXX/YYY objects misplaced — выполняется ребалансировка. Дождитесь её окончания;
  • io — скорость передачи данных для клиентов и механизмов восстановления:
    • сообщения вида recovery: XX MiB/s, YY objects/s — выполняется ребалансировка. Дождитесь её окончания.

Подробнее о выводе команды см. документацию Ceph.

Заполнение OSD

Чтобы узнать статус каждого OSD, выполните команду: 

ceph osd df tree
CODE

Пример вывода

ID  CLASS  WEIGHT   REWEIGHT  SIZE   USE    AVAIL   %USE  PGS  STATUS  TYPE NAME  
-1         8.00000         -  80 TiB  36 TiB  44 TiB  45.00   -          root default
-3         2.00000         -  20 TiB  9 TiB   11 TiB  45.00   -              host node-1
0    ssd   1.00000  1.00000  10 TiB  4.6 TiB 5.4 TiB  46.00  89      up      osd.0
2    ssd   1.00000  1.00000  10 TiB  4.4 TiB 5.6 TiB  44.00  86      up      osd.2
-5         2.00000         -  20 TiB  9 TiB   11 TiB  45.00   -              host node-2
5    ssd   1.00000  1.00000  10 TiB  4.6 TiB 5.4 TiB  46.00  90      up      osd.5
-7         2.00000         -  20 TiB  9 TiB   11 TiB  45.00   -              host node-3
9    ssd   1.00000  1.00000  10 TiB  4.7 TiB 5.3 TiB  47.00  90      up      osd.9
11   ssd   1.00000  1.00000  10 TiB  4.3 TiB 5.7 TiB  43.00  85      up      osd.11
CODE

При изучении вывода команды обратите внимание на столбец %USE. Если значение превысит 90, кластер перейдёт в нерабочее состояние. Для восстановления кластера понадобится добавить диски в OSD. Подробнее см. в документации Ceph и RedHat.

Мониторинг метрик

Вы можете экспортировать метрики Ceph в формате инструмента Node Exporter системы мониторинга Prometheus. Для этого:

  1. Выполните команду: 
    ceph mgr module enable prometheus
    CODE
  2. Определите id кластера Ceph — параметр fsid в файле /etc/ceph/ceph.conf:
    grep fsid /etc/ceph/ceph.conf
    CODE

    Пример вывода

    fsid = d46f1a09-1bc0-423a-9fdb-893b58511cb3
    CODE
  3. Добавьте в Prometheus узлы кластера Ceph как target. Замените в конфигурации:
    1. Значение параметра replacement — на id кластера Ceph;
    2. IP-адреса в параметре target — на IP-адреса узлов кластера Ceph.

      Пример конфигурации

      - job_name: ceph
        relabel_configs:
        - replacement: efdba66f-8760-42dc-a497-47e3378347a7
          source_labels:
          - __address__
          target_label: cluster
        - replacement: ceph_cluster
          source_labels:
          - instance
          target_label: instance
        scheme: http
        static_configs:
        - targets:
          - 192.168.100.1:9283
          - 192.168.100.2:9283
          - 192.168.100.3:9283
      CODE

Собранные метрики можно посмотреть в системе мониторинга Grafana. Для этого импортируйте готовые дашборды из репозитория Ceph.

Изменение размера кластера


Добавление узлов

Чтобы добавить узел в кластер:

  1. Подготовьте сервер как узел кластера VMmanager.
  2. Добавьте сервер в кластер VMmanager.
  3. Добавьте сервер в кластер Ceph. 

    Инструкции приведены для сервера с IP-адресом 192.168.100.4, hostname — node4 и путём к диску /dev/nvme1n1. При выполнении команд укажите реальные параметры сервера.

    1. На сервере для нового узла установите ПО Podman и LVM2: 
      dnf install podman lvm2 -y
      CODE
    2. На первом узле кластера:
      1. Скопируйте SSH-ключи Ceph на сервер для нового узла: 
        ssh-copy-id -f -i /etc/ceph/ceph.pub 192.168.100.4
        CODE
      2. Откройте оболочку утилиты cephadm
        cephadm shell
        CODE
      3. Добавьте узел в кластер Ceph: 
        ceph orch host add node4 192.168.100.4
        CODE
      4. Добавьте диск сервера в хранилище: 
        ceph orch daemon add osd node4:/dev/nvme1n1
        CODE
  4. Дождитесь окончания ребалансировки.

Удаление узлов

Чтобы удалить узел из кластера:

  1. Перенесите ВМ, их диски и образы с этого узла на другие. 
  2. Остановите и отключите OSD этого узла по инструкции из  документации Ceph.
  3. Дождитесь окончания ребалансировки.

    Если выполнить следующий пункт до окончания ребалансировки, данные в кластере могут быть потеряны.

  4. Отключите узел от кластера Ceph по инструкции из  документации Ceph.
  5. Удалите узел из кластера VMmanager.