Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 172 Следующий »


Введение

В статье описано создание 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-110.192.6.74/16
Первый узел кластера
pcmk-210.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)".

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

  1. DRBD-устройство настраивается на узлах pcmk-1 и pcmk-2 с IP-адресами, указанными в разделе "Архитектура кластера".
  2. Для создания DRBD-устройства используется блочное устройство /dev/vdb.
  3. Необходимо настроить ресурс "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;
      }
    }
  4. Для запуска DRBD-устройства вместо команды "sudo /etc/init.d/drbd start" использовать команду:
    sudo drbdadm up dvolume
  5. Для назначения ведущим DRBD-устройством на текущем узле вместо команды "sudo drbdadm -- --overwrite-data-of-peer primary all" использовать команду:
    sudo drbdadm primary --force all
  6. Не создавать файловую систему и не монтировать DRBD-устройство.

  7. После окончания синхронизации DRBD-устройств команда на ведущем узле:
    sudo drbdadm status
    должна выводить:
    dvolume role:Primary
      disk:UpToDate
      pcmk-2 role:Secondary
        peer-disk:UpToDate

iSCSI-сервер

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

sudo apt install targetcli-fb

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

DRBD-ресурс

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

  1. Создать ресурсного агента "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"
  2. Проверить настройки ресурсного агента "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 -устройством):

  1. iSCSI-сервер будет иметь имя "iqn.2025-08.iscsi.pcmk12" и принимать запросы на порту 3260 IP-адреса 10.192.1.100.
  2. Создать ресурсного агента "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"
  3. Настроить ресурсного агента "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"
  4. Проверить настройки ресурсного агента "p_iSCSITarget":
    sudo pcs resource status p_iSCSITarget
    Вывод команды:
      * p_iSCSITarget       (ocf:heartbeat:iSCSITarget):     Started pcmk-2
    Проверить настройки ресурсного агента "p_iSCSI_lun1
    sudo pcs resource status p_iSCSI_lun1
    Вывод команды:
      * p_iSCSI_lun1        (ocf:heartbeat:iSCSILogicalUnit):        Started pcmk-2

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

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

  1. Отключить (если не отключено) STONITH, которое используется для физического отключения (обесточивания) неисправного физического диска:
    sudo pcs property set stonith-enabled="false"
  2. Предотвратить перераспределение ресурсов между узлами после того, как кластер восстановил работу в нормальном режиме после аварийного режима:
    sudo pcs resource defaults update resource-stickiness=100
  3. Проверить настройки:
    sudo pcs property
    Вывод команды:
    Cluster Properties:
     cluster-infrastructure: corosync
     cluster-name: astracluster
     dc-version: 3.0.0-3.0.0
     have-watchdog: false
     no-quorum-policy: ignore
     stonith-enabled: false

    sudo pcs resource defaults
    Вывод команды:
    Meta Attrs: rsc_defaults-meta_attributes
      resource-stickiness=100


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

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

  1. Задать ограничения на запуск ресурса "ClusterIP": 
    sudo pcs constraint colocation add "ClusterIP" with Promoted "p_DRBD-clone"
    sudo pcs constraint order promote "p_DRBD-clone" then start "ClusterIP"
  2. Задать ограничения на запуск ресурса "p_iSCSITarget":
    sudo pcs constraint colocation add "p_iSCSITarget" with "ClusterIP" INFINITY
    sudo pcs constraint order "ClusterIP" then start "p_iSCSITarget"
  3. Задать ограничения на запуск ресурса "p_iSCSI_lun1":
    sudo pcs constraint colocation add "p_iSCSI_lun1" with "p_iSCSITarget" INFINITY
    sudo pcs constraint order "p_iSCSITarget" then "p_iSCSI_lun1"
  4. Проверить созданные ограничения:
    sudo pcs constraint
    Вывод команды:
    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. Перезапустить кластер, чтобы ограничения вступили в силу:
    sudo pcs cluster stop --all
    sudo pcs cluster start --all
  6. Проверить состояние кластера:
    sudo pcs status
    Вывод команды должен отображать, что все ресурсы запущены на каком-то одном узле кластера:
    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
    
    

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

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


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

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 ]


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

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

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

  1. Запустить кластер на каждом узле (на котором кластер не запущен) командой:
    sudo pcs cluster start
  2. Дождаться окончания запуска кластера на обоих узлах, что может занять несколько десятков секунд.
  3. Проверить состояние кластера, выполнив на любом узле команду:
    sudo pcs status
    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
  4. Проверить состояние DRBD-устройства, выполнив на любом узле команду:
    sudo drbdadm status
    dvolume role:Primary
     disk:UpToDate
     pcmk-2 role:Secondary
       peer-disk:UpToDate
  5. Проверить состояние iSCSI-хранилища, выполнив на ведущем узле команду:
    sudo targetcli ls /
    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-ресурсе:
    dvolume role:Primary
     disk:UpToDate
     pcmk-1 connection:StandAlone
  •  на подчинённом DRBD-ресурсе:
    dvolume role:Secondary
     disk:UpToDate
     pcmk-2 connection:StandAlone


Чтобы объединить отдельные части в одно DRBD-устройство, необходимо выполнить на каждом узле команду:

sudo drbdadm connect dvolume

Подключение к кластерному iSCSI-хранилищу данных

Подключение к iSCSI-хранилищу описано в статье "Использование протокола iSCSI".



  • Нет меток