Введение
В статье описано создание iSCSI-хранилища данных на основе двухузлового кластера Pacemaker. Кластер используется для минимизации времени недоступности iSCSI-хранилища.
Архитектура кластера
Кластер состоит из двух узлов: pcmk-1 и pcmk-2.
На каждом узле:
- есть диск
/dev/vdb; - поверх диска
/dev/vdbработает DRBD-устройство; - поверх DRBD-устройства работает iSCSI-сервер.
Кластер запускает и останавливает на узлах DRBD-устройства, iSCSI-серверы, а также управляет виртуальным IP-адресом.
Один узел кластера является ведущим, второй – подчинённым.
На ведущем узле: DRBD-устройство является ведущим, работает iSCSI-сервер. На подчинённом узле: DRBD-устройство является подчинённым, iSCSI-сервер остановлен.
iSCSI-клиенты подключаются к виртуальному IP-адресу кластера. Аутентификация iSCSI-клиентов не используется.
Рисунок 1. Архитектура iSCSI-хранилища на основе двухузлового кластера
Кластер и его узлы:
| Название узла | IP-адрес | Назначение |
|---|---|---|
| 10.192.1.100/16 | Виртуальный IP-адрес кластера | |
| pcmk-1 | 10.192.6.74/16 | Первый узел кластера |
| pcmk-2 | 10.192.6.75/16 | Второй узел кластера |
Предварительная настройка
Разрешение имён
На каждом узле – для разрешения имён добавить в файл /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
Настроить кластер в соответствии со статьёй "Развертывание двухузлового кластера 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-ресурс
На ведущем узле кластера (т. е. на узле с ведущим 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" для управления экспортируемым диском
/dev/drbd1: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":
- на узле pcmk-2 – с ведущим DRBD-ресурсом :
dvolume role:Primary disk:UpToDate pcmk-1 connection:StandAlone
- на узле pcmk-1 – с подчинённым DRBD-ресурсом:
dvolume role:Secondary disk:UpToDate pcmk-2 connection:StandAlone
Чтобы объединить отдельные части в одно DRBD-устройство, необходимо выполнить на каждом узле команду:
