Статья описывает создание гиперконвергентного отказоустойчивого кластера, в котором узлы кластера 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;
- иметь одинаковую конфигурацию дисков.
Порядок настройки
Настройка кластера должна выполняться в следующей последовательности:
- Если платформа VMmanager не установлена, установите её по инструкции из статьи Установка.
- Подготовьте серверы для узлов кластера. Если вы используете:
- ОС Astra Linux Special Edition — выполните инструкции из статьи Подготовка сервера с ОС Astra Linux;
- ОС AlmaLinux — установите ОС из образа Minimal ISO.
- Создайте кластер VMmanager по инструкции из статьи Создание кластера. На этапе настройки хранилищ выберите тип — Файловое хранилище.
- Добавьте узлы в кластер VMmanager по инструкции из статьи Управление узлами кластера.
- Настройте кластер Ceph по инструкции из раздела Настройка кластера Ceph.
- Подключите сетевое хранилище Ceph к кластеру VMmanager по инструкции из статьи Управление хранилищами кластера. При подключении создайте новый пул и пользователя Ceph.
- Сделайте хранилище Ceph основным и отключите файловое хранилище от кластера VMmanager по инструкции из статьи Управление хранилищами кластера.
- Включите отказоустойчивость в кластере VMmanager по инструкции из статьи Настройка отказоустойчивости. При включении:
- Cоздайте ещё одного пользователя Ceph. Не используйте пользователя, который был создан при подключении хранилища.
- Укажите произвольное имя директории.
- Укажите проверочный 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>
Пояснения к команде:
— IP-адрес с префиксом сети. Например,192.168.100.1/24
;
— имя сетевого интерфейса. Например,enp1s0
.
Настройка на сервере с Astra Linux
- На всех узлах кластера установите ПО Ceph:
sudo apt update && sudo apt install -y ceph
Если вы выполняете настройку в закрытом контуре, для установки ПО Ceph подключите установочный образ ОС Astra Linux. - Создайте файл 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"
- Скачайте из репозитория ISPsystem скрипт настройки ceph.sh и скопируйте его на все узлы кластера в директорию с файлом common.sh.
-
На первом узле кластера запустите скрипт ceph.sh командой:
sudo sh ceph.sh first
Дождитесь окончания работы скрипта.
- Проверьте статус Ceph:
ceph -s
Пример вывода при успешном завершении скрипта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:
-
На остальных узлах кластера запустите скрипт ceph.sh командой:
Дождитесь окончания работы скрипта.sudo sh ceph.sh others
- На первом узле кластера запустите скрипт ceph.sh командой:
sudo sh ceph.sh final
Дождитесь окончания работы скрипта.
- Дождитесь синхронизации Ceph на всех узлах кластера. Обычно синхронизация завершается в течение нескольких минут. Вы можете отслеживать статус синхронизации с помощью команды: Если узлы успешно синхронизированы, вывод должен содержать строку:
ceph -s
health: HEALTH_OK
Настройка на сервере с AlmaLinux
- На всех узлах кластера установите ПО Podman и LVM2:
dnf install podman lvm2 -y
- На первом узле кластера:
- Скачайте и установите утилиту 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/
- Запустите создание кластера Ceph: Подробнее о команде см. в документации Ceph.
cephadm bootstrap --mon-ip 192.168.100.1 --skip-monitoring-stack --allow-fqdn-hostname
- Скопируйте 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
- Откройте оболочку утилиты cephadm:
cephadm shell
- Проверьте статус кластера Ceph:
ceph -s
Пример вывода при успешном создании кластера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:
- Добавьте остальные узлы в кластер Ceph командами: Подробнее о командах см. в документации 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
- Добавьте диски серверов в хранилище командами: Подробнее о командах см. в документации Сeph.
ceph orch daemon add osd node1:/dev/nvme1n1 ceph orch daemon add osd node2:/dev/nvme1n1 ceph orch daemon add osd node3:/dev/nvme1n1
- Настройте CephFS: Команда создаст том c именем vm6, необходимые пулы и настроит файловую систему. Вы можете указать произвольное имя пула вместо vm6.
ceph fs volume create vm6
- Скачайте и установите утилиту cephadm командами:
- Дождитесь синхронизации Ceph на всех узлах кластера. Вы можете отслеживать статус синхронизации с помощью команды: Если узлы успешно синхронизированы, вывод должен содержать строку:
ceph -s
health: HEALTH_OK
Настройка репликации
По умолчанию Ceph создает пулы с параметром replicated size 3
. Это означает, что каждый фрагмент данных (PG) будет храниться как минимум на трёх дисках (OSD). Такая настройка защищает данные от потери при сбое одного или двух дисков.
Вы можете сократить количество реплик. Это увеличит объём данных, которые можно поместить в кластер, но повысит риски их потери при одновременном сбое нескольких дисков. Если сократить количество реплик до одной, то при потере OSD данные будут утрачены.
Чтобы изменить количество реплик, выполните команду:
ceph osd pool set <имя_пула> size <количество_реплик>
Мониторинг кластера
Статус кластера
Чтобы проверить статус кластера, выполните команду:
ceph -s
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
Пояснения:
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
— выполняется ребалансировка. Дождитесь её окончания.
- сообщения вида recovery:
Подробнее о выводе команды см. документацию Ceph.
Заполнение OSD
Чтобы узнать статус каждого OSD, выполните команду:
ceph osd df tree
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
При изучении вывода команды обратите внимание на столбец %USE. Если значение превысит 90, кластер перейдёт в нерабочее состояние. Для восстановления кластера понадобится добавить диски в OSD. Подробнее см. в документации Ceph и RedHat.
Мониторинг метрик
Вы можете экспортировать метрики Ceph в формате инструмента Node Exporter системы мониторинга Prometheus. Для этого:
- Выполните команду:
ceph mgr module enable prometheus
- Определите id кластера Ceph — параметр fsid в файле /etc/ceph/ceph.conf:
grep fsid /etc/ceph/ceph.conf
Пример выводаfsid = d46f1a09-1bc0-423a-9fdb-893b58511cb3
- Добавьте в Prometheus узлы кластера Ceph как target. Замените в конфигурации:
- Значение параметра replacement — на id кластера Ceph;
- 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
Собранные метрики можно посмотреть в системе мониторинга Grafana. Для этого импортируйте готовые дашборды из репозитория Ceph.
Изменение размера кластера
Добавление узлов
Чтобы добавить узел в кластер:
- Подготовьте сервер как узел кластера VMmanager.
- Добавьте сервер в кластер VMmanager.
- Добавьте сервер в кластер Ceph. Пример настройки для ОС AlmaLinux
- Дождитесь окончания ребалансировки.
Удаление узлов
Чтобы удалить узел из кластера:
- Перенесите ВМ, их диски и образы с этого узла на другие.
- Остановите и отключите OSD этого узла по инструкции из документации Ceph.
- Дождитесь окончания ребалансировки. Если выполнить следующий пункт до окончания ребалансировки, данные в кластере могут быть потеряны.
- Отключите узел от кластера Ceph по инструкции из документации Ceph.
- Удалите узел из кластера VMmanager.