|
| Имя узла | Комментарий |
|---|---|
| node-XX | Узлы, предоставляющие ресурс хранения данных. Далее в примере используется минимально возможное количество таких узлов — два, с именами node-00 и node-01. Каждый из этих узлов оснащен двумя дополнительными накопителями (/dev/vdb и /dev/vdc), которые используются для предоставления разделяемого ресурса хранения данных. Далее обозначаются как узлы данных. |
| witness | "Наблюдатель". Так как в примере использует минимальное количество узлов данных (два), для создания кворума в кластере необходим дополнительный узел. При большем количестве узлов данных наблюдатель не требуется. Дополнительные накопители в наблюдателе не требуются. Далее узел-наблюдатель обозначается как наблюдатель. |
| не имеет значения | Дополнительно для тестирования могут использоваться клиентские компьютеры, далее - клиенты. |
Далее предполагается, что:
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, соответствующая версии загруженного ядра.
Следующие шаги настройки выполняются на всех узлах и на узле-свидетеле, если он используется.
| echo -e "[Unit]\nPartOf=nfs-server.service" | sudo SYSTEMD_EDITOR=tee systemctl edit nfsdcld.service |
| sudo modprobe drbd |
| sudo mkdir -p /opt/drbd-nfs/{exports,internal} |
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; } |
| sudo sed -i "s/^\(\s*usage-count\s\+\)yes;/\1no;/" /etc/drbd.d/global_common.conf |
Следующие шаги настройки выполняются на всех узлах данных, на свидетеле их выполнять не требуется:
| sudo drbdadm create-md ha_nfs |
| sudo drbdadm dump all |
| sudo drbdadm up ha_nfs |
Следующие шаги настройки выполняются на одном из узлов данных. После выполнения этих действий этот узел будет назначен первичным (primary):
| 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 up ha_nfs |
| sudo mv /etc/init.d/drbd /etc/systemd/system/ sudo systemctl enable drbd |
Настройка кластера выполняется на первичном узле:
| 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 |
| sudo pcs property set stonith-enabled="false" |
| sudo pcs cluster enable --all |
| sudo pcs status cluster sudo pcs status sudo pcs quorum status |
| 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 |
| sudo pcs resource promotable drbd_ha_nfs promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true |
common='fstype=ext4 options=noatime,nodiratime op start interval="0" timeout="60s" stop interval="0" timeout="60s" monitor interval="20" timeout="40s"' |
| 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 |
| 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 |
| 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 |
sudo pcs resource create nfs_exports ocf:heartbeat:exportfs clientspec=<подсеть> directory=/opt/drbd-nfs/exports/data \ |
sudo pcs constraint order nfs_server then nfs_exports |
| sudo pcs resource status |