Данная статья применима к:
- 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 пакеты можно командой:
При этом будет установлена версия пакета drbd, соответствующая версии загруженного ядра.
Настройка NFS+DRBD
Следующие шаги настройки выполняются на всех узлах и на узле-свидетеле, если он используется.
- Добавить в службу nfsdcld.service зависимость от службы nfs-server.service:echo -e "[Unit]\nPartOf=nfs-server.service" | sudo SYSTEMD_EDITOR=tee systemctl edit nfsdcld.service
- Загрузить в ядро модуль drbd:sudo modprobe drbd
- Создать каталоги для монтирования ресурсов:sudo mkdir -p /opt/drbd-nfs/{exports,internal}
- Создать конфигурационный файл /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; }
- Отключить передачу статистики использования 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
Следующие шаги настройки выполняются на всех узлах данных, на свидетеле их выполнять не требуется:
- Создать ресурс ha_nfs:sudo drbdadm create-md ha_nfs
- Опционально — проверить параметры созданного ресурса:sudo drbdadm dump all
- Включить созданный ресурс в работу:sudo drbdadm up ha_nfs
Следующие шаги настройки выполняются на одном из узлов данных. После выполнения этих действий этот узел будет назначен первичным (primary):
- Создать новые идентификаторы (UUID) ресурсов. Синхронизация ресурсов занимает много времени, и при создании нового ресурса не требуется. Для исключения синхронизации используется опция --clear-bitmap.sudo drbdadm new-current-uuid --clear-bitmap ha_nfs/0
sudo drbdadm new-current-uuid --clear-bitmap ha_nfs/1 - Назначить узел первичным:sudo drbdadm primary --force ha_nfs
- Создать на дисковых ресурсах файловые системы:sudo mkfs.ext4 /dev/drbd1
sudo mkfs.ext4 /dev/drbd2 - Примонтировать дисковые ресурсы:sudo mount /dev/drbd1 /opt/drbd-nfs/internal/
sudo mount /dev/drbd2 /opt/drbd-nfs/exports/ - Создать на примонтированных ресурсах структуру каталогов:sudo mkdir /opt/drbd-nfs/internal/{portblock_tickle_dir,nfs_info_dir}
sudo mkdir /opt/drbd-nfs/exports/data - Отмонтировать ресурсы:sudo umount /dev/drbd1
sudo umount /dev/drbd2
На остальных узлах данных:
- Назначить узел вторичным:sudo drbdadm secondary ha_nfs
Следующий шаг настройки выполняется на узле-свидетеле:
- Запустить ресурс:sudo drbdadm up ha_nfs
- Настроить системную службу drbd и разрешить её автоматический запуска при загрузке ОС:sudo mv /etc/init.d/drbd /etc/systemd/system/
sudo systemctl enable drbd
Выполнить на всех узлах проверку:
- Выполнить команду проверки состояния:sudo drbdadm status ha_nfsПри нормальной работе узла вывод команды должен иметь вид:Если в выводе команды имеется сообщение (сообщения) вида status:Connetcting, то повторить проверку после некоторой паузы. Проверку состояния повторять до исчезновения этих сообщений.
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:StandAlone, то выполнить команду:sudo drbdadm adjust ha_nfsПосле чего повторно выполнить проверку стояния.
Настройка кластера
Выполнить на первичном узле настройку кластера:
- Настроить аутентификацию на всех узлах данных (здесь и далее в примерах используются два узла — node-00 и node-01): sudo pcs host auth node-00 node-01 -u hacluster -p <пароль>
- Создать первичную конфигурацию кластера:sudo pcs cluster setup pace_nfs_cluster node-00 node-01 --force
- Запустить кластер:sudo pcs cluster start --all
- Для тестирования отключить механизм stonith:sudo pcs property set stonith-enabled="false"
- Разрешить автоматический запуск кластера при загрузке ОС:sudo pcs cluster enable --all
- Опционально — проверить состояние кластера (эти команды можно использовать для проверки состояния кластера и в дальнейшем):sudo pcs status cluster
sudo pcs status
sudo pcs quorum status - Создать кластерный ресурс 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
- Настроить параметры кластерного ресурса 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
- Создать кластерные ресурсы 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 - Определить взаимосвязи кластерных ресурсов 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 - Создать ресурс 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
- Определить взаимосвязи ресурсов 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 - Создать ресурс 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 - Определить взаимосвязи ресурсов: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
Проверить состояние кластера
- Проверить состояние ресурсов NFS, выполнив на одном из узлов команду:sudo pcs resource statusЕсли кластер запущен успешно, то вывод команды будет иметь следующий вид:* Clone Set: drbd_ha_nfs-clone [drbd_ha_nfs] (promotable):Если в выводе команды сообщается, что ресурс остановлен (Stopped), то выполнить команду:
* 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-00sudo pcs resource clear nfs_server && sudo pcs resource cleanup nfs_server