Перед выполнением действий из данной статьи необходимо настроить кластер в соответствии со статьёй "Развертывание двухузлового кластера pacemaker". |
В статье описано создание высоконадежного iSCSI-хранилища данных на основе двухузлового кластера Pacemaker.
!!!! не используется fencing (STONITH) !!!
iSCSI (Internet Small Computer System Interface) – протокол для работы c хранилищем данных через сеть Ethernet (поверх TCP/IP) с использованием SCSI-команд.
SCSI-target – SCSI-цель – в зависимости от контекста это либо сервер, предоставляющий доступ к устройству хранения данных, либо объект, экспортируемый устройством хранения. Объект может делиться на логические единицы (LU).
SCSI-initiator – SCSI-инициатор – клиент, использующий SCSI-хранилище для хранения данных.
LU (logical unit) – логическая единица iSCSI-объекта. Является аналогом блочного SCSI-устройства. Может использоваться: для разбиения на разделы, для хранения файловой системы, для хранения данных в "сыром" виде и т. п.
DRBD (Distributed Replicated Block Device) – распределённая система хранения, которая зеркалирует блочные устройства компьютеров через сеть Ethernet. Зеркалироваться могут жёсткие диски, разделы дисков и т. п.

Рисунок 1. Архитектура iSCSI-хранилища на основе двухузлового кластера
Кластер и его узлы:
| Название узла | IP-адрес | Назначение |
|---|---|---|
| 192.168.23.100 | Виртуальный IP-адрес кластера iSCSI-хранилища | |
| pcmk-1 | 192.168.23.101 | Первый узел кластера |
| pcmk-2 | 192.168.23.102 | Второй узел кластера |
На каждом узле – для разрешения имён добавить в файл /etc/hosts строки:
192.168.23.101 pcmk-1 192.168.23.102 pcmk-2 |
На узле pcmk-1 – установить название узла:
|
На узле pcmk-2 – установить название узла:
|
На каждом узле – для работы DRBD сетевой экран (если используется) должен пропускать входящие и исходящие TCP-пакеты на порте 7789.
На каждом узле необходимо:
Установить пакеты с DRBD-утилитами и drbd-модулем ядра, соответствующим версии загруженного ядра.
|
Установить пакет для настройки SCSI-сервера (target):
|
DRBD-устройство состоит из двух дисков – по одному на каждом узле. Запись и чтение осуществляется только на ведущий диск (Primary). Ведомый диск (Secondary) только синхронизируется с ведущим.
DRBD-устройство должно управляться только кластером Pacemaker, т. е. не должна использоваться служба systemd.
На каждом узле – создать конфигурационный файл /etc/drbd.d/iscsi_data.res, содержащий настройки ресурса iscsi_data:
resource "iscsi_data" {
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 drbdadm create-md iscsi_data |
sudo modprobe drbd echo drbd >/etc/modules-load.d/drbd.conf |
На каждом узле –включить DRBD-диск:
sudo drbdadm up iscsi_data |
Проверить состояние DRBD-диска:
sudo drbdadm status |
В выводе команды на первом узле будет ... - при не запущенном втором:
!!!! iscsi_data role:Secondary
disk:Inconsistent
pcmk-2 role:Secondary
disk:Inconsistent |
В выводе команды на первом узле будет при запущенном DRBD на втором узле:
iscsi_data role:Secondary
disk:Inconsistent
pcmk-2 role:Secondary
disk:Inconsistent |
На каждом узле –проверить, что появилось блочное устройство /dev/drbd1:
sudo lsblk |
В выводе команды должен появиться диск drbd1:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 6,8G 0 rom vda 252:0 0 20G 0 disk ├─vda1 252:1 0 1M 0 part └─vda2 252:2 0 20G 0 part / vdb 252:16 0 20G 0 disk └─drbd1 147:1 0 20G 0 disk |
Теперь DRBD состоит из двух локальных дисков /dev/vdb и сетевого соединения между ними.
Необходимо синхронизировать DRBD-диски узлов.
Для этого – На первом узле (В данном случае) – сделать DRBD-диск первого узла ведущим:
sudo drbdadm primary --force iscsi_data |
Начнётся синхронизация дисков на двух узлах:
sudo drbdadm status |
Вывод команды:
iscsi_data role:Primary disk:UpToDate pcmk-2 role:Secondary replication:SyncSource peer-disk:Inconsistent done:1.03 |
Процесс синхронизации дисков можно отслеживать с помощью команды:
sudo drbdsetup events2 |
Вывод команды:
exists resource name:iscsi_data role:Primary suspended:no force-io-failures:no may_promote:no promotion_score:10101 exists connection name:iscsi_data peer-node-id:1 conn-name:pcmk-2 connection:Connected role:Secondary exists device name:iscsi_data volume:0 minor:1 backing_dev:/dev/vdb disk:UpToDate client:no quorum:yes exists peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 replication:SyncSource peer-disk:Inconsistent peer-client:no resync-suspended:no done:72.16 exists path name:iscsi_data peer-node-id:1 conn-name:pcmk-2 local:ipv4:10.192.6.74:7789 peer:ipv4:10.192.6.75:7789 established:yes exists - ... change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:73.14 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:74.55 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:75.95 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:77.36 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:78.78 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:80.18 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:81.58 ... change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 done:99.86 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 change resource name:iscsi_data may_promote:no promotion_score:10102 change peer-device name:iscsi_data peer-node-id:1 conn-name:pcmk-2 volume:0 replication:Established peer-disk:UpToDate peer-client:no |
Для завершения команды нажать <CTRL+C>.
sudo drbdmon |
Во время синхронизации будет выводиться:
Дождаться окончания синхронизации, когда будет выводиться информация:
iscsi_data role:Primary
disk:UpToDate
pcmk-2 role:Secondary
peer-disk:UpToDate |
На узле, где DRBD = Primary? :
Создать ресурсного агента для управления DRBD-диском (DRBD-ресурс "iscsi_data"):
sudo pcs resource create "DRBD" ocf:linbit:drbd drbd_resource="iscsi_data" op monitor interval=29s role="Promoted" op monitor interval=31s role="Unpromoted" |
Настроить ресурсного агента для управления DRBD-диском:
sudo pcs resource promotable "DRBD" promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify="true" |
sudo pcs resource status |
Вывод команды:
* ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1
* Clone Set: DRBD-clone [drbd_iscsi] (promotable):
* Promoted: [ pcmk-1 ]
* Unpromoted: [ pcmk-2 ] |
стр 5: ??
crm(live)configure# property no-quorum-policy="ignore"
crm(live)configure# property default-resource-stickiness="200"
Нужны ограничения:
Создать ограничение: iSCSI запускается на том узле, где DRBD=Primary
!!!! sudo pcs constraint colocation add iSCSI with Promoted DRBD-clone |
Создать ограничение: ClusterIP запускается на том узле, где iSCSI:
!!!! sudo pcs constraint colocation add iSCSI with Promoted DRBD-clone |
Создать ограничение: вначале запускается DRBD, потом iSCSI
| !!!! sudo constraint order promote DRBD-clone then start iSCSI |
Вывод:
!!!! Adding WebData-clone WebFS (kind: Mandatory) (Options: first-action=promote then-action=start) |
Создать ограничение: вначале запускается iSCSI, потом iSCSI
| !!!! sudo constraint order promote DRBD-clone then start ClusterIP |
Проверить созданные ограничения:
| sudo pcs constraint |
Вывод:
Location Constraints: Ordering Constraints: Colocation Constraints: Ticket Constraints: |
Перед использованием кластера необходимо проверить его работоспособность при отказе одного из узлов.
На любом узле – определить, какой из узлов кластера является ведущим, с помощью команды:
sudo pcs status |
В выводе команды ведущий узел отобразится в строке с ресурсом ClusterIP после слова "Started":
Full List of Resources: * ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-1 |
Предположим, что ведущим узлом является pcmk-1.
На любом узле – остановить узел pcmk-1 кластера:
sudo pcs cluster stop pcmk-1 |
На втором узле pcmk-2 – проверить состояние кластера:
sudo pcs status |
В выводе команды отобразится, что узел pcmk-1 отключён, а ведущим узлом является pcmk-2:
Node List: * Online: [ pcmk-2 ] * OFFLINE: [ pcmk-1 ] Full List of Resources: * ClusterIP (ocf:heartbeat:IPaddr2): Started pcmk-2 |
iSCSI-хранилище должно быть доступно по своему IP-адресу 192.168.23.100.
На любом узле – включить обратно первый узел кластера pcmk-1:
sudo pcs cluster start pcmk-1 |
На любом узле – проверить, что оба узла кластера работают:
sudo pcs status |
В выводе команды отобразится, что оба узла в работе:
Node List: * Online: [ pcmk-1 pcmk-2 ] |