| Секция | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Введение
В статье описано создание iSCSI-хранилища данных на основе двухузлового кластера Pacemaker. Кластер используется для минимизации времени недоступности iSCSI-хранилища.
...
Кластер состоит из двух узлов: ведущего и подчинённого. Роль ведущего может выполнять любой узел (на рисунке ниже ведущим является узел pcmk-1 и , а подчинённым – pcmk-2).
| Примечание |
|---|
Термины "ведущий узел кластера" и "подчинённый узел кластера" используются только в рамках описываемого кластера iSCSI-хранилища. |
...
Сам по себе кластер Pacemaker не делит узлы на ведущие и подчинённые, для него все узлы равноправны. |
На каждом узле:
- есть диск
/dev/vdb(на компьютере и в виртуальной машине VirtualBox это будет
На каждом узле:
- есть диск
/dev/vdbsdb); - поверх диска
/dev/vdbработает DRBD-устройство; - поверх DRBD-устройства работает iSCSI-сервер.
Кластер запускает и останавливает на узлах управляет: виртуальным IP-адресом, запуском и остановкой DRBD-устройства , и iSCSI-серверы, а также управляет виртуальным IP-адресом.Один узел кластера является ведущим, второй – подчинённымсервера.
На ведущем узле: DRBD-устройство является ведущим, работает iSCSI-сервер. На подчинённом узле: DRBD-устройство является подчинённым, iSCSI-сервер остановлен.
...
| Название узла | IP-адрес | Назначение |
|---|---|---|
| 10.192.1.100/16 | Виртуальный IP-адрес кластера | |
| pcmk-1 | 10.192.6.74/16 | Первый узел кластера |
| pcmk-2 | 10.192.6.75/16 | Второй узел кластера |
Предварительная настройка
...
| .6.75/16 | Второй узел кластера |
Предварительная настройка
Разрешение имён
Задать имена узлов и настроить разрешение имён в соответствии со статьёй "Настройка разрешения имен и статических IP-адресов".
При тестовом создании кластера можно настроить разрешение имён с помощью файла /etc/hosts:
- На каждом узле –
...
- добавить в файл
/etc/hostsстроки:Блок кода 10.192.6.74 pcmk-1 10.192.6.75 pcmk-2 - На первом узле – установить
...
- имя узла pcmk-1:
Command sudo hostnamectl hostname pcmk-1 - На втором узле – установить
...
- имя узла pcmk-2:
Command sudo hostnamectl hostname pcmk-2
Сетевой экран
При использовании сетевого экрана должны быть открыты порты:
...
- Для установки DRBD-пакетов используется команда:
Command sudo apt install drbd-utils "drbd-$(uname -r)"
- DRBD-устройство настраивается на узлах pcmk-1 и pcmk-2 с IP-адресами, указанными в разделе "Архитектура кластера".
- Для создания DRBD-устройства используется блочное устройство
/dev/vdb. - Настраиваются глобальные настройки в файле
/etc/drbd.d/global_common.conf:Блок кода global { usage-count no; } - Настраивается ресурс "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" используется команда:Command sudo drbdadm up dvolume
- Для назначения ведущим DRBD-устройством на текущем узле – вместо команды "
sudo drbdadm -- --overwrite-data-of-peer primary all" используется команда:Command sudo drbdadm primary --force all
Предупреждение Не создавать файловую систему и не монтировать DRBD-устройство.
...
Проверка работоспособности кластера при отказе ведущего узла
Все ресурсы кластера работают запускаются на каком-то одном узле – на ведущем узле кластера.
...
- Определить, на каком узле запущены ресурсы, т.е. какой узел кластера является ведущим:
Command sudo pcs status
Раскрыть title Вывод команды... Блок кода Cluster name: astracluster Cluster Summary: * Stack: corosync (Pacemaker is running) * Current DC: pcmk-1 (version 3.0.0-3.0.0) - partition with quorum * Last updated: Thu Aug 28 13:07:33 2025 on pcmk-2 * Last change: Thu Aug 28 10:21:57 2025 by root via root on pcmk-2 * 2 nodes configured * 5 resource instances configured Node List: * Online: [ pcmk-1 pcmk-2 ] Full List of Resources: * ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1 * Clone Set: p_DRBD-clone [p_DRBD] (promotable): * Promoted: [ pcmk-1 ] * Unpromoted: [ pcmk-2 ] * p_iSCSITarget (ocf:heartbeat:iSCSITarget): Started pcmk-1 * p_iSCSI_lun1 (ocf:heartbeat:iSCSILogicalUnit): Started pcmk-1 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled - Рассмотрим случай, когда ведущим узлом является первый узел кластера pcmk-1.
- На любом узле – остановить ведущий узел кластера:
Command sudo pcs cluster stop pcmk-1
- На втором узле – проверить, что все ресурсы перемещены с первого узла на второй, т.е. ведущим стал второй узел pcmk-2:
Command sudo pcs status
Раскрыть title Вывод команды... Блок кода Cluster name: astracluster Cluster Summary: * Stack: corosync (Pacemaker is running) * Current DC: pcmk-2 (version 3.0.0-3.0.0) - partition with quorum * Last updated: Thu Aug 28 13:14:12 2025 on pcmk-2 * Last change: Thu Aug 28 13:13:07 2025 by root via root on pcmk-2 * 2 nodes configured * 5 resource instances configured Node List: * Online: [ pcmk-2 ] * OFFLINE: [ pcmk-1 ] Full List of Resources: * ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-2 * Clone Set: p_DRBD-clone [p_DRBD] (promotable): * Promoted: [ pcmk-2 ] * Stopped: [ pcmk-1 ] * p_iSCSITarget (ocf:heartbeat:iSCSITarget): Started pcmk-2 * p_iSCSI_lun1 (ocf:heartbeat:iSCSILogicalUnit): Started pcmk-2 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled - На любом узле – запустить обратно первый узел кластера:
Command sudo pcs cluster start pcmk-1
- На любом узле – проверить, что оба узла кластера работают , и ведущим остался второй узел кластераи все ресурсы остались на втором узле:
Command sudo pcs status
Раскрыть title Вывод команды... Блок кода Cluster name: astracluster Cluster Summary: * Stack: corosync (Pacemaker is running) * Current DC: pcmk-2 (version 3.0.0-3.0.0) - partition with quorum * Last updated: Thu Aug 28 13:40:50 2025 on pcmk-2 * Last change: Thu Aug 28 13:40:49 2025 by root via root on pcmk-2 * 2 nodes configured * 5 resource instances configured Node List: * Online: [ pcmk-1 pcmk-2 ] Full List of Resources: * ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-2 * Clone Set: p_DRBD-clone [p_DRBD] (promotable): * Promoted: [ pcmk-2 ] * Unpromoted: [ pcmk-1 ] * p_iSCSITarget (ocf:heartbeat:iSCSITarget): Started pcmk-2 * p_iSCSI_lun1 (ocf:heartbeat:iSCSILogicalUnit): Started pcmk-2 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
...
- На каждом узле (на котором кластер не запущен) – запустить кластер:
На обоих узлах – дождаться Дождаться окончания запуска кластера, что может занять несколько десятков секунд.Command sudo pcs cluster start
- На любом узле – проверить, что все ресурсы запущены на каком-то одном узле кластера:
Command sudo pcs status
Раскрыть title Вывод команды... Блок кода Cluster name: astracluster Cluster Summary: * Stack: corosync (Pacemaker is running) * Current DC: pcmk-1 (version 3.0.0-3.0.0) - partition with quorum * Last updated: Wed Aug 20 12:38:55 2025 on pcmk-1 * Last change: Wed Aug 20 09:58:02 2025 by root via root on pcmk-1 * 2 nodes configured * 5 resource instances configured Node List: * Online: [ pcmk-1 pcmk-2 ] Full List of Resources: * ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1 * Clone Set: p_DRBD-clone [p_DRBD] (promotable): * Promoted: [ pcmk-1 ] * Unpromoted: [ pcmk-2 ] * p_iSCSI_lun1 (ocf:heartbeat:iSCSILogicalUnit): Started pcmk-1 * p_iSCSITarget (ocf:heartbeat:iSCSITarget): Started pcmk-1 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled - На любом узле – проверить состояние DRBD-устройства:
Command sudo drbdadm status
Раскрыть title Вывод команды на ведущем узле... Блок кода dvolume role:Primary disk:UpToDate pcmk-2 role:Secondary peer-disk:UpToDate
- На ведущем узле – проверить настройки iSCSI-хранилища:
Command sudo targetcli ls /
Раскрыть title Вывод команды на ведущем узле с пояснениями... Блок кода o- / ......................................................................................................................... [...] o- backstores .............................................................................................................. [...] | o- block .................................................................................................. [Storage Objects: 1] | | o- p_iSCSI_lun1 .................................................................. [/dev/drbd1 (20.0GiB) write-thru activated] | | o- alua ................................................................................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized] | o- fileio ................................................................................................. [Storage Objects: 0] | o- pscsi .................................................................................................. [Storage Objects: 0] | o- ramdisk ................................................................................................ [Storage Objects: 0] o- iscsi ............................................................................................................ [Targets: 1] | o- iqn.2025-08.iscsi.pcmk12 .......................................................................................... [TPGs: 1] | o- tpg1 .................................................................................................. [gen-acls, no-auth] | o- acls .......................................................................................................... [ACLs: 0] | o- luns .......................................................................................................... [LUNs: 1] | | o- lun1 ............................................................. [block/p_iSCSI_lun1 (/dev/drbd1) (default_tg_pt_gp)] | o- portals .................................................................................................... [Portals: 1] | o- 10.192.1.100:3260 ................................................................................................ [OK] o- loopback ......................................................................................................... [Targets: 0] o- vhost ............................................................................................................ [Targets: 0] o- xen-pvscsi ....................................................................................................... [Targets: 0]
Вывод команды показывает, что:
- объект хранения
/backstores/block/p_iSCSI_lun1привязан к DRBD-диску/dev/drbd1; - создана iSCSI-цель
/iscsi/iqn.2025-08.iscsi.pcmk12; - для группы
/iscsi/iqn.2025-08.iscsi.pcmk12/tpg1указаны настройки доступа[gen-acls, no-auth]; - логическая единица
/iscsi/iqn.2025-08.iscsi.pcmk12/tpg1/luns/lun1 привязана к объекту хранения block/p_iSCSI_lun1; - создан портал
/iscsi/iqn.2025-08.iscsi.pcmk12/tpg1/portals/10.192.1.100:3260.
- объект хранения
Разделение DRBD-устройства на части
При сетевых сбоях распределённое DRBD-устройство может разделиться на отдельные части, между которыми отсутствует синхронизация данныхне связанные между собой.
В этом случае в выводе команды "sudo drbdadm status" будет отображено, что соединение с противоположным узлом находится в состоянии "StandAlone":
- на узле pcmk-2 – с ведущим DRBD-ресурсом (pcmk-2):
Блок кода dvolume role:Primary disk:UpToDate pcmk-1 connection:StandAlone
- на узле pcmk-1 – с подчинённым DRBD-ресурсом (pcmk-1):
Блок кода dvolume role:Secondary disk:UpToDate pcmk-2 connection:StandAlone
...
Чтобы объединить отдельные части в одно DRBD-устройство, необходимо выполнить на каждом узле команду:
| Command |
|---|
sudo drbdadm connect dvolume |
Если произошла рассинхронизация данных на DRBD-устройствах, то тогда на узле с подчинённым DRBD-устройством выполнить команду:
| Command |
|---|
sudo drbdadm connect --discard-my-data dvolume |