Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Секция
Столбец

Оглавление
stylenone

Введение

Примечание

Перед выполнением действий из данной статьи необходимо настроить кластер в соответствии со статьёй "Развертывание двухузлового кластера pacemaker".

Столбец
Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8).

Введение

В статье описано создание iSCSI-хранилища данных на основе двухузлового кластера Pacemaker. Главная цель кластера, чтобы iSCSI-хранилище всегда было доступно для клиентов.

!!!! не используется fencing (STONITH) !!!

Термины

iSCSI (Internet Small Computer System Interface) – протокол для работы c хранилищем данных через сеть Ethernet (поверх TCP/IP) с использованием SCSI-команд.

SCSI-target – SCSI-цель – в зависимости от контекста это либо сервер, предоставляющий доступ к устройству хранения данных, либо объект, экспортируемый устройством хранения. Объект может делиться на логические единицы (LU).

SCSI-initiator – SCSI-инициатор – клиент, использующий SCSI-хранилище для хранения данных.

...

Кластер используется для минимизации времени недоступности iSCSI-хранилища.

Архитектура кластера

Кластер состоит из двух узлов: ведущего и подчинённого. Роль ведущего может выполнять любой узел (на рисунке ниже ведущим является узел pcmk-1, а подчинённым – pcmk-2).

Примечание

Термины "ведущий узел кластера" и "подчинённый узел кластера" используются только в рамках описываемого кластера iSCSI-хранилища. Сам по себе кластер Pacemaker не делит узлы на ведущие и подчинённые, для него все узлы равноправны.

На каждом узле:

  • есть диск /dev/vdb (на компьютере и в виртуальной машине VirtualBox это будет диск /dev/sdb);
  • поверх диска /dev/vdb работает DRBD-устройство;
  • поверх DRBD-устройства работает iSCSI-сервер.

Кластер управляет: виртуальным IP-адресом, запуском и остановкой DRBD-устройства и iSCSI-сервера.

На ведущем узле: DRBD-устройство является ведущим, работает iSCSI-сервер. На подчинённом узле: DRBD-устройство является подчинённым, iSCSI-сервер остановлен.

iSCSI-клиенты подключаются к виртуальному IP-адресу кластера. Аутентификация iSCSI-клиентов не используется.


Image Added

Рисунок 1. Архитектура iSCSI-хранилища на основе двухузлового кластера


Якорь
Hosts_adresses
Hosts_adresses

Кластер и его узлы:

Название узлаIP-адресНазначение

10.192.1.100/16
Виртуальный IP-адрес кластера
pcmk-110.192.6.74/16
Первый узел кластера
pcmk-210.192.6.75/16
Второй узел кластера

Предварительная настройка

Разрешение имён

Задать имена узлов и настроить разрешение имён в соответствии со статьёй "Настройка разрешения имен и статических IP-адресов".

При тестовом создании кластера можно настроить разрешение имён с помощью файла /etc/hosts:

  1. На каждом узле – добавить в файл /etc/hosts строки:
    Блок кода
    10.192.6.74 pcmk-1
    10.192.6.75 pcmk-2
  2. На первом узле – установить имя узла pcmk-1:
    Command
    sudo hostnamectl hostname pcmk-1
  3. На втором узле – установить имя узла pcmk-2:
    Command
    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)".

При настройке учесть:

  1. Для установки DRBD-пакетов используется команда:
    Command

    sudo apt install drbd-utils "drbd-$(uname -r)"

  2. DRBD-устройство настраивается на узлах pcmk-1 и pcmk-2 с IP-адресами, указанными в разделе "Архитектура кластера".
  3. Для создания DRBD-устройства используется блочное устройство /dev/vdb.
  4. Настраиваются глобальные настройки в файле /etc/drbd.d/global_common.conf:
    Блок кода
    global {
      usage-count no;
    }
  5. Настраивается ресурс "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;
      }
    }
  6. Для запуска DRBD-устройства – вместо команды "sudo /etc/init.d/drbd start" используется команда:
    Command

    sudo drbdadm up dvolume

  7. Для назначения ведущим DRBD-устройством на текущем узле – вместо команды "sudo drbdadm -- --overwrite-data-of-peer primary all" используется команда:
    Command

    sudo drbdadm primary --force all

  8. Предупреждение

    Не создавать файловую систему и не монтировать DRBD-устройство.

iSCSI-сервер

Для проверки настроек SCSI-сервера установить пакет:

Command
sudo apt install targetcli-fb

Настройка кластера

DRBD-ресурс

На ведущем узле кластера (т. е. на узле с ведущим DRBD-устройством):

  1. Создать ресурсного агента "p_DRBD" для управления DRBD-устройством:
    Command

    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"

  2. Проверить настройки ресурсного агента "p_DRBD":
    Command

    sudo pcs resource status p_DRBD

    Вывод команды:
    Блок кода
      * Clone Set: p_DRBD-clone [p_DRBD] (promotable):
        * Promoted: [ pcmk-1 ]
        * Unpromoted: [ pcmk-2 ]

iSCSI-ресурс

На ведущем узле кластера (т. е. на узле с ведущим DRBD -устройством):

  1. iSCSI-сервер будет иметь имя "iqn.2025-08.iscsi.pcmk12" и принимать запросы на порту 3260 IP-адреса 10.192.1.100.
  2. Создать ресурсного агента "p_iSCSITarget" для управления iSCSI-сервером:
    Command

    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"

  3. Создать ресурсного агента "p_iSCSI_lun1" для управления экспортируемым диском /dev/drbd1:
    Command

    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"

  4. Проверить настройки ресурсного агента "p_iSCSITarget":
    Command

    sudo pcs resource status p_iSCSITarget

    Вывод команды:
    Блок кода
      * p_iSCSITarget       (ocf:heartbeat:iSCSITarget):     Started pcmk-2
    Проверить настройки ресурсного агента "p_iSCSI_lun1:
    Command

    sudo pcs resource status p_iSCSI_lun1

    Вывод команды:
    Блок кода
      * p_iSCSI_lun1        (ocf:heartbeat:iSCSILogicalUnit):        Started pcmk-2

Ограничения на запуск ресурсов

На любом работающем узле кластера:

  1. Отключить (если уже не отключён) режим работы STONITH, при котором неисправное оборудование физически отключается (обесточивается):
    Command

    sudo pcs property set stonith-enabled="false"

  2. Предотвратить перераспределение ресурсов между узлами при восстановлении нормального режима работы кластера после аварии:
    Command

    sudo pcs resource defaults update resource-stickiness=100


Все ресурсы кластера должны работать на одном узле и запускаться по порядку: ведущий "p_DRBD", "ClusterIP", "p_iSCSITarget", "p_iSCSI_lun1".

Для этого на любом работающем узле кластера:

  1. Задать ограничения на запуск ресурса "ClusterIP": 
    Command

    sudo pcs constraint colocation add "ClusterIP" with Promoted "p_DRBD-clone"

    Command

    sudo pcs constraint order promote "p_DRBD-clone" then start "ClusterIP"

  2. Задать ограничения на запуск ресурса "p_iSCSITarget":
    Command

    sudo pcs constraint colocation add "p_iSCSITarget" with "ClusterIP" INFINITY

    Command

    sudo pcs constraint order "ClusterIP" then start "p_iSCSITarget"

  3. Задать ограничения на запуск ресурса "p_iSCSI_lun1":
    Command

    sudo pcs constraint colocation add "p_iSCSI_lun1" with "p_iSCSITarget" INFINITY

    Command

    sudo pcs constraint order "p_iSCSITarget" then "p_iSCSI_lun1"

  4. Проверить созданные ограничения:
    Command
    sudo pcs constraint
    Раскрыть
    titleВывод команды...
    Блок кода
    Location Constraints:
    Ordering Constraints:
      promote p_DRBD-clone then start ClusterIP (kind:Mandatory)
      start ClusterIP then start p_iSCSITarget (kind:Mandatory)
      start p_iSCSITarget then start p_iSCSI_lun1 (kind:Mandatory)
    Colocation Constraints:
      ClusterIP with p_DRBD-clone (score:INFINITY) (rsc-role:Started) (with-rsc-role:Promoted)
      p_iSCSITarget with ClusterIP (score:INFINITY)
      p_iSCSI_lun1 with p_iSCSITarget (score:INFINITY)
    Ticket Constraints:
  5. Перезапустить кластер, чтобы ограничения вступили в силу:
    Command

    sudo pcs cluster stop --all

    Command

    sudo pcs cluster start --all

  6. Проверить, что все ресурсы запущены на каком-то одном узле кластера:
    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: Sun Aug 24 19:37:05 2025 on pcmk-1
      * Last change:  Sun Aug 24 19:32:28 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-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
    
    

Проверка работоспособности кластера при отказе ведущего узла

Все ресурсы кластера запускаются на каком-то одном узле – на ведущем узле кластера.

Когда отключается ведущий узел, ресурсы запускаются на втором узле. Второй узел становится ведущим узлом кластера. При восстановлении работы первого узла ресурсы остаются работать на втором узле.


Порядок проверки работоспособности кластера при отказе ведущего узла:

  1. Определить, на каком узле запущены ресурсы, т.е. какой узел кластера является ведущим:
    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
    
  2. Рассмотрим случай, когда ведущим узлом является первый узел pcmk-1.
  3. На любом узле – остановить ведущий узел:
    Command

    sudo pcs cluster stop pcmk-1

  4. На втором узле – проверить, что все ресурсы перемещены с первого на второй узел 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
  5. На любом узле – запустить обратно первый узел:
    Command

    sudo pcs cluster start pcmk-1

  6. На любом узле – проверить, что оба узла работают и все ресурсы остались на втором узле:
    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

Возможные проблемы и способы их решения

Запуск и проверка состояния кластера

После остановки или сбоя в работе кластера необходимо:

  1. На каждом узле (на котором кластер не запущен) – запустить кластер:
    Command

    sudo pcs cluster start

    Дождаться окончания запуска кластера, что может занять несколько десятков секунд.
  2. На любом узле – проверить, что все ресурсы запущены на каком-то одном узле кластера:
    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
  3. На любом узле – проверить состояние DRBD-устройства:
    Command

    sudo drbdadm status

    Раскрыть
    titleВывод команды на ведущем узле...
    Блок кода
    dvolume role:Primary
     disk:UpToDate
     pcmk-2 role:Secondary
       peer-disk:UpToDate
  4. На ведущем узле – проверить настройки 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":

  • на узле с ведущим DRBD-ресурсом (pcmk-2):
    Блок кода
    dvolume role:Primary
     disk:UpToDate
     pcmk-1 connection:StandAlone
  •  на узле с подчинённым 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

...

!!! Logical unit number (LUN) is a physical device that is backed by the iSCSI backstore. Each LUN has a unique number

DRBD (Distributed Replicated Block Device) – распределённая система хранения, которая зеркалирует блочные устройства компьютеров через сеть Ethernet. Зеркалироваться могут жёсткие диски, разделы дисков и т. п.

Архитектура кластера

Кластер состоит из двух узлов: pcmk-1 и pcmk-2.

На каждом узле:

поверх физического диска /dev/vdb запущена распределённая система хранения DRBD;

  • поверх DRBD-диска работает SCSI-target.

В нормальном режиме работы кластера: один узел является ведущим, второй – вторичным.

Кластер имеет виртуальный IP-адрес 192.168.23.100, который физически принадлежит ведущему узлу.

Ресурсы: ведущий DRBD-диск, SCSI-target – активны на ведущем узле кластера.

Image Removed

Рисунок 1. Архитектура iSCSI-хранилища на основе двухузлового кластера

Кластер и его узлы:

...

 Предварительная настройка

На каждом узле – для разрешения имён добавить в файл /etc/hosts строки:

Блок кода
192.168.23.101 pcmk-1
192.168.23.102 pcmk-2

На узле pcmk-1 – установить название узла:

Command
sudo hostnamectl hostname pcmk-1

На узле pcmk-2 – установить название узла:

Command
sudo hostnamectl hostname pcmk-2

На каждом узле – для работы DRBD сетевой экран (если используется) должен пропускать входящие и исходящие TCP-пакеты на порте 7789.

На каждом узле – для работы iSCSI-target сетевой экран (если используется) должен пропускать входящие и исходящие TCP-пакеты на порте 3260.

Установка ПО

На каждом узле необходимо:

Установить пакеты с DRBD-утилитами и drbd-модулем ядра, соответствующим версии загруженного ядра.

Command
sudo apt install drbd-utils drbd-`uname -r`

Установить пакет для настройки SCSI-сервера (target):

Command
sudo apt install targetcli-fb

Настройка кластера

DRBD

DRBD-устройство состоит из двух дисков – по одному на каждом узле. Запись и чтение осуществляется только на ведущий диск (Primary). Ведомый диск (Secondary) только синхронизируется с ведущим.

DRBD-устройство должно управляться только кластером Pacemaker, т. е. не должна использоваться служба systemd.

На каждом узле – создать конфигурационный файл /etc/drbd.d/dvolume.res, содержащий настройки ресурса dvolume:

Блок кода
title/etc/drbd.d/iscsi_data.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-диска:

Command
sudo drbdadm create-md dvolume

Вывод команды:

Блок кода
initializing activity log
initializing bitmap (640 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

Загрузить модуль ядра для работы с DRBD:

Command

sudo modprobe drbd

Включить автозагрузку модуля ядра DRBD при загрузке ОС:

Command

echo drbd | sudo tee /etc/modules-load.d/drbd.conf

На каждом узле –включить DRBD-диск:

Command

sudo drbdadm up dvolume

Проверить состояние DRBD-диска:

Command

sudo drbdadm status

В выводе команды на первом узле будет ... - при не запущенном втором:

Блок кода
dvolume role:Secondary
  disk:Inconsistent
  pcmk-2 connection:Connecting

В выводе команды на первом узле будет при запущенном DRBD на втором узле:

Блок кода
dvolume role:Secondary
  disk:Inconsistent
  pcmk-2 role:Secondary
    disk:Inconsistent

На каждом узле –проверить, что появилось блочное устройство /dev/drbd1:

Command

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-диск первого узла ведущим:

Command

sudo drbdadm primary --force dvolume

Начнётся синхронизация дисков на двух узлах:

Command

sudo drbdadm status

Вывод команды:

Блок кода
dvolume role:Primary
 disk:UpToDate
 pcmk-2 role:Secondary
   replication:SyncSource peer-disk:Inconsistent done:1.03

Для отлеживания процесса синхронизации дисков можно использовать команду:

Command

sudo drbdsetup events2

Вывод команды:

Блок кода
exists resource name:dvolume role:Primary suspended:no force-io-failures:no may_promote:no promotion_score:10101
exists connection name:dvolume peer-node-id:1 conn-name:pcmk-2 connection:Connected role:Secondary
exists device name:dvolume volume:0 minor:1 backing_dev:/dev/vdb disk:UpToDate client:no quorum:yes
exists peer-device name:dvolume 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:dvolume 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:dvolume peer-node-id:1 conn-name:pcmk-2 volume:0 done:0.86
change peer-device name:dvolume peer-node-id:1 conn-name:pcmk-2 volume:0 done:1.27
change peer-device name:dvolume peer-node-id:1 conn-name:pcmk-2 volume:0 done:2.67
change peer-device name:dvolume peer-node-id:1 conn-name:pcmk-2 volume:0 done:4.08
...
change peer-device name:dvolume peer-node-id:1 conn-name:pcmk-2 volume:0 done:99.86
change peer-device name:dvolume peer-node-id:1 conn-name:pcmk-2 volume:0
change resource name:dvolume may_promote:no promotion_score:10102
change peer-device name:dvolume peer-node-id:1 conn-name:pcmk-2 volume:0 replication:Established peer-disk:UpToDate peer-client:no

Для завершения команды нажать <CTRL+C>.

На первом узле – когда диски полностью синхронизированы:

Command

sudo drbdadm status

Вывод команды:

Блок кода
dvolume role:Primary
  disk:UpToDate
  pcmk-2 role:Secondary
    peer-disk:UpToDate

Настройка iSCSI-сервера

Настройка без ограничения доступа со стороны клиентов.

На первом узле pcmk-1, на котором DRBD = Primary:

Запустить оболочку по управлению iSCSI-объектами:

Command

sudo targetcli

Вывод команды:

Блок кода
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> 

Далее команды выполняются внутри оболочки.

Зарегистрировать блочное DRBD-устройство /dev/drbd1 в качестве ... под именем, например, storage01:

Перейти в каталог /backstores/block:

Command

--- /> cd /backstores/block

Command

> /backstores/block create storage01 /dev/drbd1

Вывод:

Блок кода
Created block storage object storage01 using /dev/drbd1.

Создать iSCSI-target:

Перейти в каталог /iscsi:

Command

----- /backstores/block> cd /iscsi 

Command

> /iscsi create

Вывод:

Блок кода
Created target iqn.2003-01.org.linux-iscsi.pcmk-1.x8664:sn.6425f3536d03.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

Создать LUN – блочное устройство, :

Перейти в каталог luns из /iscsi/<iSCSI-target>:

Command

>cd /iscsi/iqn.2003-01.org.linux-iscsi.pcmk-1.x8664:sn.56c2d5f061b1/tpg1/luns

Command

/iscsi/iqn.20...d03/tpg1/luns> create /backstores/block/storage01

Вывод:

Блок кода
Created LUN 0.

Проверить созданные устройства:

Command

...> ls /

Вывод:

Блок кода
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- storage01 ..................................................................... [/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.2003-01.org.linux-iscsi.pcmk-1.x8664:sn.56c2d5f061b1 .......................................................... [TPGs: 1]
  |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 0]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 ................................................................ [block/storage01 (/dev/drbd1) (default_tg_pt_gp)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ..................................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]
  o- vhost ............................................................................................................ [Targets: 0]
  o- xen-pvscsi

> cd /

> saveconfig

> exit

---

Although by default targetcli saves the running configuration upon exit, a distribution-specific service must be enabled to restore the saved configuration on reboot. See distribution documentation for specifics, but for example:

$ sudo systemctl enable target.service

---

Отключение контроля доступа   – из https://wiki.astralinux.ru/x/h8COEg

Command

/iscsi/iqn.2003-01.org.linux-iscsi.pcmk-1.x8664:sn.56c2d5f061b1/tpg1 set attribute generate_node_acls=1

!!!!! Переход Portal 0.0.0.0:3260

Pacemaker + DRBD

На узле, где DRBD = Primary :

Создать ресурсного агента для управления DRBD-диском (DRBD-ресурс "iscsi_data"):

Command

sudo pcs resource create "p_DRBD" ocf:linbit:drbd drbd_resource="iscsi_data" op monitor interval=29s role="Promoted" op monitor interval=31s role="Unpromoted"

Настроить ресурсного агента для управления DRBD-диском:

Command

sudo pcs resource promotable "p_DRBD" promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify="true"

Command

sudo pcs resource status

Вывод команды:

Блок кода
  * ClusterIP   (ocf:heartbeat:IPaddr2):         Started pcmk-1
  * Clone Set: p_DRBD-clone [drbd_iscsi] (promotable):
    * Promoted: [ pcmk-1 ]
    * Unpromoted: [ pcmk-2 ]

Pacemaker + iSCSI Target

На узле, где DRBD = Primary :

Создать ресурсного агента для управления iSCSI-Target:

Command

sudo pcs resource create "p_iSCSITarget" ocf:heartbeat:iSCSITarget iqn="iqn.2003-01.org.linux-iscsi.pcmk-1.x8664:sn.56c2d5f061b1" portals="0.0.0.0:3260" op monitor interval="10s"

Настроить ресурсного агента для управления iSCSI-диском LUN:

Command

sudo pcs resource create "p_iSCSI_lun1" ocf:heartbeat:iSCSILogicalUnit target_iqn="iqn.2003-01.org.linux-iscsi.pcmk-1.x8664:sn.56c2d5f061b1" lun="1" path="/dev/drbd1" op monitor interval="10s"

!!!!! Переход Portal 0.0.0.0:3260

Command

sudo pcs resource status

Вывод команды:

Блок кода
Full List of Resources:
  * ClusterIP   (ocf:heartbeat:IPaddr2):         Started pcmk-1
  * p_iSCSITarget       (ocf:heartbeat:iSCSITarget):     Started pcmk-1
  * Clone Set: p_DRBD-clone [p_DRBD] (promotable):
    * Promoted: [ pcmk-1 ]
    * Unpromoted: [ pcmk-2 ] 

Pacemaker - взаимная настройка ресурсов

На любом работающем узле кластера:

  1. Отключить (если ещё не отключено) STONITH, которое используется для физического отключения (обесточивания) неисправного физического диска:
    Command

    sudo pcs property set stonith-enabled="false"

  2. Предотвратить перераспределение ресурсов между узлами после того, как кластер восстановил работу в нормальном режиме с двумя узлами:
    Command

    sudo pcs resource defaults update resource-stickiness=100

Настроить кластер, чтобы:

  • все ресурсы: p_iSCSITarget, iSCSI-lun, ClusterIP – работали на одном узле вместе с первичным ресурсом DRBD.
  • ресурсы запускались по порядку: первичный DRBD, iSCSI-target, iSCSI-lun, ClusterIP.

Для этого на любом работающем узле кластера:

...

Command

sudo pcs constraint colocation add "p_iSCSITarget" with Promoted "p_DRBD-clone"

Command

sudo pcs constraint order promote "p_DRBD-clone" then start "p_iSCSITarget"

Блок кода
Adding p_DRBD-clone p_iSCSITarget (kind: Mandatory) (Options: first-action=promote then-action=start)

...

Command

sudo pcs constraint colocation add "p_iSCSI_lun1" with "p_iSCSITarget" INFINITY

Command

sudo pcs constraint order "p_iSCSITarget" then "p_iSCSI_lun1"

Блок кода
Adding p_iSCSITarget p_iSCSI_lun1 (kind: Mandatory) (Options: first-action=start then-action=start)

...

Command

sudo pcs constraint colocation add "ClusterIP" with "p_iSCSI_lun1" INFINITY

Command

sudo pcs constraint order "p_iSCSI_lun1" then "ClusterIP"

Блок кода
Adding p_iSCSI_lun1 ClusterIP (kind: Mandatory) (Options: first-action=start then-action=start)

...

Command
sudo pcs constraint

...

Блок кода
Location Constraints:
Ordering Constraints:
  promote p_DRBD-clone then start p_iSCSITarget (kind:Mandatory)
  start p_iSCSITarget then start p_iSCSI_lun1 (kind:Mandatory)
  start p_iSCSI_lun1 then start ClusterIP (kind:Mandatory)
Colocation Constraints:
  ClusterIP with p_iSCSI_lun1 (score:INFINITY)
  p_iSCSITarget with p_DRBD-clone (score:INFINITY) (rsc-role:Started) (with-rsc-role:Promoted)
  p_iSCSI_lun1 with p_iSCSITarget (score:INFINITY)
Ticket Constraints:

Проверка работоспособности кластера при отказе одного из узлов

Перед использованием кластера необходимо проверить его работоспособность при отказе одного из узлов.

На любом узле – определить, какой из узлов кластера является ведущим, с помощью команды:

Command

sudo pcs status

В выводе команды ведущий узел отобразится в строке с ресурсом ClusterIP после слова "Started":

Блок кода
Full List of Resources:
  * ClusterIP   (ocf:heartbeat:IPaddr2):         Started pcmk-1

Предположим, что ведущим узлом является pcmk-1.

На любом узле – остановить узел pcmk-1 кластера:

Command

sudo pcs cluster stop pcmk-1

На втором узле pcmk-2 – проверить состояние кластера: 

Command

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:

Command

sudo pcs cluster start pcmk-1

На любом узле – проверить, что оба узла кластера работают:

Command

sudo pcs status

В выводе команды отобразится, что оба узла в работе:

Блок кода
Node List:
  * Online: [ pcmk-1 pcmk-2 ]

Возможные проблемы и способы их решения

После любого сбоя в работе кластера: остановки одного из узлов, прерывания связи между узлами – необходимо проверить состояние узлов кластера, выполнив на каждом узле команды:

sudo drbdadm status

sudo pcs status

---

Если DRBD разделился на части после разрыва связи между ними (сети):

На Primary:

...

На Secondary:

sudo drbdadm status

...

Для сборки DRBD:

На Primary:

sudo drbdadm connect dbvolume

На Secondary:

sudo drbdadm connect --discard-my-data dbvolume

---

...