Введение
В статье описано создание iSCSI-хранилища данных на основе двухузлового кластера Pacemaker. Главная цель кластера, чтобы iSCSI-хранилище всегда было доступно для клиентов.
Архитектура кластера
Кластер состоит из двух узлов: pcmk-1 и pcmk-2.
На каждом узле:
- есть диск /dev/vdb;
- поверх диска /dev/vdb работает DRBD-устройство;
- поверх DRBD-устройства работает iSCSI-сервер.
Кластер запускает и останавливает на узлах DRBD-устройства, iSCSI-серверы, а также управляет виртуальным IP-адресом.
Один узел кластера является ведущим, второй – подчинённым.
На ведущем узле: DRBD-устройство является ведущим, работает iSCSI-сервер. На подчинённом узле: DRBD-устройство является подчинённым, iSCSI-сервер остановлен.
iSCSI-клиенты подключаются к виртуальному адресу кластера.
Рисунок 1. Архитектура iSCSI-хранилища на основе двухузлового кластера
Кластер и его узлы:
| Название узла | IP-адрес | Назначение |
|---|---|---|
| pcmk-1 | 10.192.6.74/16 | Первый узел кластера |
| pcmk-2 | 10.192.6.75/16 | Второй узел кластера |
| 10.192.1.100/16 | Виртуальный IP-адрес кластера |
Предварительная настройка
Разрешение имён
На каждом узле – для разрешения имён добавить в файл /etc/hosts строки:
10.192.6.74 pcmk-1 10.192.6.75 pcmk-2
На первом узле – установить название узла pcmk-1:
sudo hostnamectl hostname pcmk-1
На втором узле – установить название узла pcmk-2:
sudo hostnamectl hostname pcmk-2
Сетевой экран
Если используется сетевой экран, то должно быть обеспечено прохождение пакетов:
- 7789/TCP – для работы DRBD-устройства;
- 3260/TCP – для работы iSCSI-сервера;
- 5405/UDP, 2224/TCP – для работы кластера Pacemaker + Сorosync.
Двухузловой кластер Pacemaker + Corosync
Настроить кластер в соответствии со статьёй "Развертывание двухузлового кластера pacemaker".
При настройке использовать IP-адреса, указанные в разделе "Архитектура кластера".
DRBD-устройство
Настроить DRBD-устройство в соответствии со статьёй "Стандартная настройка DRBD (Astra Linux 1.6)".
При настройке учесть:
- Для установки DRBD-пакетов использовать команду:sudo apt install drbd-utils "drbd-$(uname -r)"
- DRBD-устройство настраивается на узлах pcmk-1 и pcmk-2 с IP-адресами, указанными в разделе "Архитектура кластера".
- Для создания DRBD-устройства используется блочное устройство
/dev/vdb. - Необходимо настроить ресурс "dvolume", используя конфигурационный файл
/etc/drbd.d/dvolume.res:resource "dvolume" { device minor 1; meta-disk internal; net { protocol C; fencing resource-only; } handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh"; unfence-peer "/usr/lib/drbd/crm-unfence-peer.9.sh"; } on "pcmk-1" { node-id 0; disk "/dev/vdb"; } on "pcmk-2" { node-id 1; disk "/dev/vdb"; } connection { host "pcmk-1" address 10.192.6.74:7789; host "pcmk-2" address 10.192.6.75:7789; } } - Для запуска DRBD-устройства вместо команды "
sudo /etc/init.d/drbd start" использовать команду:sudo drbdadm up dvolume - Для назначения ведущим DRBD-устройством на текущем узле вместо команды "
sudo drbdadm -- --overwrite-data-of-peer primary all" использовать команду:sudo drbdadm primary --force all Не создавать файловую систему и не монтировать DRBD-устройство.
iSCSI-сервер
Для проверки настроек SCSI-сервера установить пакет:
sudo apt install targetcli-fbНастройка кластера
DRBD-ресурс
На ведущем узле кластера (т. е. на узле с ведущим DRBD-устройством):
- Создать ресурсного агента "p_DRBD" для управления DRBD-устройством:sudo pcs resource create "p_DRBD" ocf:linbit:drbd \
drbd_resource="dvolume" \
op monitor interval=29s role="Promoted" \
op monitor interval=31s role="Unpromoted" \
promotable promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify="true" - Проверить настройки ресурсного агента "p_DRBD":sudo pcs resource status p_DRBDВывод команды:
* Clone Set: p_DRBD-clone [p_DRBD] (promotable): * Promoted: [ pcmk-1 ] * Unpromoted: [ pcmk-2 ]
iSCSI-ресурс
iSCSI-сервер будет доступен iSCSI-клиентам без аутентификации.
На ведущем узле кластера (т. е. на узле с ведущим DRBD -устройством):
- iSCSI-сервер будет иметь имя "iqn.2025-08.iscsi.pcmk12" и принимать запросы на порту 3260 IP-адреса 10.192.1.100.
- Создать ресурсного агента "p_iSCSITarget" для управления iSCSI-сервером:sudo pcs resource create "p_iSCSITarget" ocf:heartbeat:iSCSITarget \
iqn="iqn.2025-08.iscsi.pcmk12" portals="10.192.1.100:3260" \
op monitor interval="10s" - Настроить ресурсного агента "p_iSCSI_lun1" для управления экспортируемым LUN-диском:sudo pcs resource create "p_iSCSI_lun1" ocf:heartbeat:iSCSILogicalUnit \
target_iqn="iqn.2025-08.iscsi.pcmk12" lun="1" path="/dev/drbd1" \
op monitor interval="10s" - Проверить настройки ресурсного агента "p_iSCSITarget":sudo pcs resource status p_iSCSITargetВывод команды:Проверить настройки ресурсного агента "p_iSCSI_lun1
* p_iSCSITarget (ocf:heartbeat:iSCSITarget): Started pcmk-2
sudo pcs resource status p_iSCSI_lun1Вывод команды:* p_iSCSI_lun1 (ocf:heartbeat:iSCSILogicalUnit): Started pcmk-2
Ограничения на запуск ресурсов
На любом работающем узле кластера:
- Отключить (если не отключено) STONITH, которое используется для физического отключения (обесточивания) неисправного физического диска:sudo pcs property set stonith-enabled="false"
- Предотвратить перераспределение ресурсов между узлами при восстановлении нормального режима работы кластера после аварии:sudo pcs resource defaults update resource-stickiness=100
Все ресурсы кластера должны работать на одном узле и запускаться по порядку: первичный "p_DRBD", "ClusterIP", "p_iSCSITarget", "p_iSCSI_lun1".
Для этого на любом работающем узле кластера:
- Задать ограничения на запуск ресурса "ClusterIP": sudo pcs constraint colocation add "ClusterIP" with Promoted "p_DRBD-clone"sudo pcs constraint order promote "p_DRBD-clone" then start "ClusterIP"
- Задать ограничения на запуск ресурса "p_iSCSITarget":sudo pcs constraint colocation add "p_iSCSITarget" with "ClusterIP" INFINITYsudo pcs constraint order "ClusterIP" then start "p_iSCSITarget"
- Задать ограничения на запуск ресурса "p_iSCSI_lun1":sudo pcs constraint colocation add "p_iSCSI_lun1" with "p_iSCSITarget" INFINITYsudo pcs constraint order "p_iSCSITarget" then "p_iSCSI_lun1"
- Проверить созданные ограничения:sudo pcs constraint
- Перезапустить кластер, чтобы ограничения вступили в силу:sudo pcs cluster stop --allsudo pcs cluster start --all
- Проверить состояние кластера:sudo pcs status
Проверка работоспособности кластера при отказе одного из узлов
Порядок проверки:
- Определить, какой узел кластера является ведущим:sudo pcs status
- Пусть ведущим узлом будет первый узел кластера pcmk-1.
- На любом узле – остановить ведущий узел кластера:sudo pcs cluster stop pcmk-1
- На втором узле – проверить, что ведущим узлом кластера стал второй узел pcmk-2:sudo pcs status
- На любом узле – включить обратно первый узел кластера:sudo pcs cluster start pcmk-1
- На любом узле – проверить, что оба узла кластера работают и ведущим остался второй узел кластера:sudo pcs status
Возможные проблемы и способы их решения
Запуск и проверка состояния кластера
После остановки или сбоя в работе кластера необходимо:
- Запустить кластер на каждом узле (на котором кластер не запущен) командой:sudo pcs cluster start
- Дождаться окончания запуска кластера на обоих узлах, что может занять несколько десятков секунд.
- Проверить, что все ресурсы запущены на одном узле кластера, выполнив на любом узле команду:sudo pcs status
- Проверить состояние DRBD-устройства, выполнив на любом узле команду:sudo drbdadm status
- Проверить состояние iSCSI-хранилища, выполнив на ведущем узле команду:sudo targetcli ls /
Разделение DRBD-устройства на части
При сетевых сбоях DRBD-устройство может разделиться на отдельные части, между которыми отсутствует синхронизация данных.
В этом случае в выводе команды "sudo drbdadm status" будет отображено, что соединение имеет статус "StandAlone":
- на ведущем DRBD-ресурсе:
dvolume role:Primary disk:UpToDate pcmk-1 connection:StandAlone
- на подчинённом DRBD-ресурсе:
dvolume role:Secondary disk:UpToDate pcmk-2 connection:StandAlone
Чтобы объединить отдельные части в одно DRBD-устройство, необходимо выполнить на каждом узле команду:
