Download PDF
Download page Создание гиперконвергентного кластера.
Создание гиперконвергентного кластера
Гиперконвергентный кластер — программно-определяемая инфраструктура, объединяющая вычислительные ресурсы, хранение данных и сетевое взаимодействие в единый модуль. Управление всем кластером осуществляется централизованно как единой системой через общую платформу.
Отказоустойчивый кластер (кластер высокой доступности, 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;
- иметь одинаковую конфигурацию дисков.
Порядок настройки
Настройка кластера должна выполняться в следующей последовательности:
- Если платформа 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>
Пояснения к команде:
<network/prefix> — IP-адрес с префиксом сети. Например,
192.168.100.1/24;<interface> — имя сетевого интерфейса. Например,
enp1s0.
Настройка на сервере с Astra Linux
- На всех узлах кластера установите ПО Ceph:
sudo apt update && sudo apt install -y cephCODEЕсли вы выполняете настройку в закрытом контуре, для установки ПО 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"CODE - Скачайте из репозитория ISPsystem скрипт настройки ceph.sh и скопируйте его на все узлы кластера в директорию с файлом common.sh.
На первом узле кластера запустите скрипт ceph.sh командой:
sudo sh ceph.sh firstCODEДождитесь окончания работы скрипта.
- Проверьте статус Ceph:
ceph -sCODEПример вывода при успешном завершении скрипта
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 На остальных узлах кластера запустите скрипт ceph.sh командой:
Дождитесь окончания работы скрипта.sudo sh ceph.sh othersCODE- На первом узле кластера запустите скрипт ceph.sh командой:
sudo sh ceph.sh finalCODEДождитесь окончания работы скрипта.
- Дождитесь синхронизации Ceph на всех узлах кластера. Обычно синхронизация завершается в течение нескольких минут. Вы можете отслеживать статус синхронизации с помощью команды:Если узлы успешно синхронизированы, вывод должен содержать строку:
ceph -sCODEhealth: HEALTH_OKCODE
Настройка на сервере с AlmaLinux
Подробные инструкции по настройке Ceph в ОС AlmaLinux см. в официальной документации Ceph.
- На всех узлах кластера установите ПО Podman и LVM2:
dnf install podman lvm2 -yCODE - На первом узле кластера:
- Скачайте и установите утилиту 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 - Запустите создание кластера Ceph: Подробнее о команде см. в документации Ceph.
cephadm bootstrap --mon-ip 192.168.100.1 --skip-monitoring-stack --allow-fqdn-hostnameCODE - Скопируйте 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.3CODE - Откройте оболочку утилиты cephadm:
cephadm shellCODE - Проверьте статус кластера Ceph:
ceph -sCODEПример вывода при успешном создании кластера
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 - Добавьте остальные узлы в кластер 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.3CODE - Добавьте диски серверов в хранилище командами: Подробнее о командах см. в документации Сeph.
ceph orch daemon add osd node1:/dev/nvme1n1 ceph orch daemon add osd node2:/dev/nvme1n1 ceph orch daemon add osd node3:/dev/nvme1n1CODE - Настройте CephFS:Команда создаст том c именем vm6, необходимые пулы и настроит файловую систему. Вы можете указать произвольное имя пула вместо vm6.
ceph fs volume create vm6CODE
- Скачайте и установите утилиту cephadm командами:
- Дождитесь синхронизации Ceph на всех узлах кластера. Вы можете отслеживать статус синхронизации с помощью команды:Если узлы успешно синхронизированы, вывод должен содержать строку:
ceph -sCODEhealth: HEALTH_OKCODE
Настройка репликации
По умолчанию 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 prometheusCODE - Определите id кластера Ceph — параметр fsid в файле /etc/ceph/ceph.conf:
grep fsid /etc/ceph/ceph.confCODEПример вывода
fsid = d46f1a09-1bc0-423a-9fdb-893b58511cb3CODE - Добавьте в 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:9283CODE
Собранные метрики можно посмотреть в системе мониторинга Grafana. Для этого импортируйте готовые дашборды из репозитория Ceph.
Изменение размера кластера
Добавление узлов
Чтобы добавить узел в кластер:
- Подготовьте сервер как узел кластера VMmanager.
- Добавьте сервер в кластер VMmanager.
- Добавьте сервер в кластер Ceph.
Инструкции приведены для сервера с IP-адресом 192.168.100.4, hostname — node4 и путём к диску /dev/nvme1n1. При выполнении команд укажите реальные параметры сервера.
- На сервере для нового узла установите ПО Podman и LVM2:
dnf install podman lvm2 -yCODE - На первом узле кластера:
- Скопируйте SSH-ключи Ceph на сервер для нового узла:
ssh-copy-id -f -i /etc/ceph/ceph.pub 192.168.100.4CODE - Откройте оболочку утилиты cephadm:
cephadm shellCODE - Добавьте узел в кластер Ceph:
ceph orch host add node4 192.168.100.4CODE - Добавьте диск сервера в хранилище:
ceph orch daemon add osd node4:/dev/nvme1n1CODE
- Скопируйте SSH-ключи Ceph на сервер для нового узла:
- На сервере для нового узла установите ПО Podman и LVM2:
- Дождитесь окончания ребалансировки.
Удаление узлов
Чтобы удалить узел из кластера:
- Перенесите ВМ, их диски и образы с этого узла на другие.
- Остановите и отключите OSD этого узла по инструкции из документации Ceph.
- Дождитесь окончания ребалансировки.
Если выполнить следующий пункт до окончания ребалансировки, данные в кластере могут быть потеряны.
- Отключите узел от кластера Ceph по инструкции из документации Ceph.
- Удалите узел из кластера VMmanager.
Может быть полезно
Связанные статьи: