Дерево страниц

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)


Описание стенда

node-XXУзлы, предоставляющие ресурс хранения данных. Далее в примере используется минимально возможное количество таких узлов — два, с именами node-00 и node-01. Каждый из этих узлов оснащен двумя дополнительными накопителями (/dev/vdb и /dev/vdc), которые используются для предоставления разделяемого ресурса хранения данных. Далее обозначаются как узлы данных.
witness"Наблюдатель". Так как в примере использует минимальное количество узлов данных (два), для создания кворума в кластере необходим дополнительный узел. При большем количестве узлов данных наблюдатель не требуется. Дополнительные накопители в наблюдателе не требуются. Далее узел-наблюдатель обозначается как наблюдатель.
не имеет значенияДополнительно для тестирования могут использоваться клиентские компьютеры, далее - клиенты.

Далее предполагается, что:

  • все узлы и клиенты подключены к сети передачи данных и находятся в одном широковещательном домене (в одной подсети);
  • все узлы имеют постоянные (статические) IP-адреса;
  • в сети настроено разрешение имен, поэтому далее в примерах используются имена узлов, а не их IP-адреса;

IP-адреса узлов далее обозначаются как <адрес_имя_узла>, например: <адрес_node-00> или <адрес_witness>. Пример реального адреса: 192.168.1.200.
Диапазон адресов подсети, в которой находятся узлы и клиенты обозначается как <подсеть>. Пример задания подсети: 192.168.1.0/24.

Краткую справку по настройке статических адресов и разрешения имен см. в статье Настройка разрешения имен и статических IP-адресов.

Для настройки кластера требуется выполнение синхронизированных действий на всех узлах кластера. Описанная далее процедура крайне чувствительна к порядку и скорости выполнения этих действия. Порядок выполнения необходимо соблюдать строго. Для устранения возможных ошибок, случайным образом возникающих от слишком быстрого или слишком медленного выполнения операций, в инструкции предусмотрены проверки и компенсационные действия, которыми не следует пренебрегать.

Установка пакетов

Установка пакетов выполняется на всех узлах. Необходимые для создания связки NFS+DRBD под управлением Pacemaker пакеты можно командой:

sudo apt install drbd-`uname -r` drbd-utils nfs-kernel-server pcs

При этом будет установлена версия пакета drbd, соответствующая версии загруженного ядра.

Настройка NFS+DRBD

Следующие шаги настройки выполняются на всех узлах и на узле-свидетеле, если он используется.

  1. Добавить в службу nfsdcld.service зависимость от службы nfs-server.service:
    echo -e "[Unit]\nPartOf=nfs-server.service" | sudo SYSTEMD_EDITOR=tee systemctl edit nfsdcld.service
  2. Загрузить в ядро модуль drbd:
    sudo modprobe drbd
  3. Создать каталоги для монтирования ресурсов:
    sudo mkdir -p /opt/drbd-nfs/{exports,internal}
  4. Создать конфигурационный файл /etc/drbd.d/global_common.conf со следующим содержимым:
    resource ha_nfs {
        on node-00 { volume 0 { device /dev/drbd1; disk /dev/vdb; meta-disk internal; }
                     volume 1 { device /dev/drbd2; disk /dev/vdc; meta-disk internal; } node-id 0; address <адрес_node-00>:7789;
        }
        on node-01 { volume 0 { device /dev/drbd1; disk /dev/vdb; meta-disk internal; }
                     volume 1 { device /dev/drbd2; disk /dev/vdc; meta-disk internal; } node-id 1; address <адрес_node-00>:7789;
        }
        on witness { volume 0 { device /dev/drbd1; disk none;     meta-disk internal; }
                     volume 1 { device /dev/drbd2; disk none;     meta-disk internal; } node-id 2; address <адрес_witness>:7789;
        }
        connection-mesh { hosts node-00 node-01 witness; }
        options { on-no-quorum suspend-io; quorum majority; }
  5. Отключить передачу статистики использования DRBD на внешние серверы. Для этого в файле /etc/drbd.d/global_common.conf изменить значение параметра usage-count на no:
    sudo sed -i "s/^\(\s*usage-count\s\+\)yes;/\1no;/" /etc/drbd.d/global_common.conf

Следующие шаги настройки выполняются на всех узлах данных, на свидетеле их выполнять не требуется:

  1. Создать ресурс ha_nfs:
    sudo drbdadm create-md ha_nfs
  2. Опционально — проверить параметры созданного ресурса:
    sudo drbdadm dump all
  3. Включить созданный ресурс в работу:
    sudo drbdadm up ha_nfs

Следующие шаги настройки выполняются на одном из узлов данных. После выполнения этих действий этот узел будет назначен первичным (primary): 

  1. Создать новые идентификаторы (UUID) ресурсов. Синхронизация ресурсов занимает много времени, и при создании нового ресурса не требуется. Для исключения синхронизации используется опция --clear-bitmap.
    sudo drbdadm new-current-uuid --clear-bitmap ha_nfs/0
    sudo drbdadm new-current-uuid --clear-bitmap ha_nfs/1
  2. Назначить узел первичным:
    sudo drbdadm primary --force ha_nfs
  3. Создать на дисковых ресурсах файловые системы:
    sudo mkfs.ext4 /dev/drbd1
    sudo mkfs.ext4 /dev/drbd2
  4. Примонтировать дисковые ресурсы:
    sudo mount /dev/drbd1 /opt/drbd-nfs/internal/
    sudo mount /dev/drbd2 /opt/drbd-nfs/exports/
  5. Создать на примонтированных ресурсах структуру каталогов:
    sudo mkdir /opt/drbd-nfs/internal/{portblock_tickle_dir,nfs_info_dir}
    sudo mkdir /opt/drbd-nfs/exports/data
  6. Отмонтировать ресурсы:
    sudo umount /dev/drbd1
    sudo umount /dev/drbd2

На остальных узлах данных:

  1. Назначить узел вторичным:
    sudo drbdadm secondary ha_nfs

Следующий шаг настройки выполняется на узле-свидетеле:

  1.  Запустить ресурс:
    sudo drbdadm up ha_nfs
  2. Настроить системную службу drbd и разрешить её автоматический запуска при загрузке ОС:
    sudo mv /etc/init.d/drbd /etc/systemd/system/
    sudo systemctl enable drbd

Выполнить на всех узлах проверку:

  1. Выполнить команду проверки состояния:
    sudo drbdadm status ha_nfs
    При нормальной работе узла вывод команды должен иметь вид:
    ha_nfs role:Secondary
      volume:0 disk:Diskless
      volume:1 disk:Diskless
      node-00 role:Primary
        volume:0 peer-disk:UpToDate
        volume:1 peer-disk:UpToDate
      node-01 role:Secondary
        volume:0 peer-disk:UpToDate
        volume:1 peer-disk:UpToDate
    Если в выводе команды имеется сообщение (сообщения) вида status:Connetcting, то повторить проверку после некоторой паузы. Проверку состояния повторять до исчезновения этих сообщений.
    Если в выводе команды имеется сообщение (сообщения) вида status:StandAlone, то выполнить команду:
    sudo drbdadm adjust ha_nfs
    После чего повторно выполнить проверку стояния.

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

Выполнить на первичном узле настройку кластера:

  1. Настроить аутентификацию на всех узлах данных (здесь и далее в примерах используются два узла — node-00 и node-01): 
    sudo pcs host auth node-00 node-01 -u hacluster -p <пароль>
  2. Создать первичную конфигурацию кластера:
    sudo pcs cluster setup pace_nfs_cluster node-00 node-01 --force
  3. Запустить кластер:
    sudo pcs cluster start --all
  4. Для тестирования отключить механизм stonith:
    sudo pcs property set stonith-enabled="false"
  5. Разрешить автоматический запуск кластера при загрузке ОС:
    sudo pcs cluster enable --all
  6. Опционально — проверить состояние кластера (эти команды можно использовать для проверки состояния кластера и в дальнейшем):
    sudo pcs status cluster
    sudo pcs status
    sudo pcs quorum status
  7. Создать кластерный ресурс drbd_ha_nfs:
    sudo pcs resource create drbd_ha_nfs ocf:linbit:drbd drbd_resource=ha_nfs op start interval=0s timeout=240s stop interval=0s timeout=100s monitor interval=31s timeout=20s role=Unpromoted monitor interval=29s timeout=20s role=Promoted
  8. Настроить параметры кластерного ресурса drbd_ha_nfs:
    sudo pcs resource promotable drbd_ha_nfs promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true
  9. Создать кластерные ресурсы fs_drbd_ha_nfs_internal и fs_drbd_ha_nfs_exports. Для сокращения записи общие параметры команд сохранены в переменной окружения common:
    common='fstype=ext4 options=noatime,nodiratime op start interval="0" timeout="60s" stop interval="0" timeout="60s" monitor interval="20" timeout="40s"'
    sudo pcs resource create fs_drbd_ha_nfs_internal ocf:heartbeat:Filesystem device=/dev/drbd1 directory=/opt/drbd-nfs/internal/ $common
    sudo pcs resource create fs_drbd_ha_nfs_exports  ocf:heartbeat:Filesystem device=/dev/drbd2 directory=/opt/drbd-nfs/exports/  $common
  10. Определить взаимосвязи кластерных ресурсов fs_drbd_ha_nfs_exports и fs_drbd_ha_nfs_internal и ресурса drbd_ha_nfs:
    sudo pcs constraint colocation add fs_drbd_ha_nfs_internal with drbd_ha_nfs-clone INFINITY with-rsc-role=Promoted
    sudo pcs constraint colocation add fs_drbd_ha_nfs_exports  with drbd_ha_nfs-clone INFINITY with-rsc-role=Promoted
    sudo pcs constraint order promote drbd_ha_nfs-clone then start fs_drbd_ha_nfs_internal
    sudo pcs constraint order promote drbd_ha_nfs-clone then start fs_drbd_ha_nfs_exports
  11. Создать ресурс nfs_server:
    sudo pcs resource create nfs_server ocf:heartbeat:nfsserver op start interval=0s timeout=40s stop interval=0s timeout=20s monitor interval=10s timeout=20s
  12. Определить взаимосвязи ресурсов fs_drbd_ha_nfs_internal и fs_drbd_ha_nfs_exports и ресурса nfs_server:
    sudo pcs constraint colocation add nfs_server with fs_drbd_ha_nfs_internal INFINITY
    sudo pcs constraint colocation add nfs_server with fs_drbd_ha_nfs_exports  INFINITY
    sudo pcs constraint order fs_drbd_ha_nfs_internal then nfs_server
    sudo pcs constraint order fs_drbd_ha_nfs_exports  then nfs_server
  13. Создать ресурс nfs_exports. Для сокращения записи общие параметры команд сохранены в переменной окружения common:
    sudo pcs resource create nfs_exports ocf:heartbeat:exportfs clientspec=<подсеть> directory=/opt/drbd-nfs/exports/data \
     fsid=1 unlock_on_stop=1 options=rw,sync,no_subtree_check,insecure,no_root_squash op start interval=0s timeout=40s stop interval=0s timeout=120s monitor interval=10s timeout=20s
  14. Определить взаимосвязи ресурсов:
    sudo pcs constraint order nfs_server then nfs_exports
    sudo pcs constraint colocation add nfs_exports with nfs_server INFINITY
    sudo pcs constraint location drbd_ha_nfs-clone prefers node-00=300 node-01=200

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

  1. Проверить состояние ресурсов NFS, выполнив на одном из узлов команду:
    sudo pcs resource status
    Если кластер запущен успешно, то вывод команды будет иметь следующий вид:
      * Clone Set: drbd_ha_nfs-clone [drbd_ha_nfs] (promotable):
        * Promoted: [ node-00 ]
        * Unpromoted: [ node-01 ]
      * fs_drbd_ha_nfs_internal    (ocf:heartbeat:Filesystem):     Started node-00
      * fs_drbd_ha_nfs_exports    (ocf:heartbeat:Filesystem):     Started node-00
      * nfs_server    (ocf:heartbeat:nfsserver):     Started node-00
      * nfs_exports    (ocf:heartbeat:exportfs):     Started node-00
    Если в выводе команды сообщается, что ресурс остановлен (Stopped), то выполнить команду:
    sudo pcs resource clear nfs_server && sudo pcs resource cleanup nfs_server


  • Нет меток