Thank you for reading this post, don't forget to subscribe!
В наличие имеется 2 сервера:
nfs1 nfs2
192.168.1.130 и 192.168.1.131
правим файлы /etc/hosts
1 2 3 4 5 |
[root@nfs1 ~]# <strong>cat /etc/hosts</strong> 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.130 nfs1 192.168.1.131 nfs2 |
на оба сервера добавлены 2 диска по 10 гб
cat /etc/sysctl.conf
net.ipv4.ip_forward=1
# drbd tuning
net.ipv4.tcp_no_metrics_save = 1
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 87380 33554432
vm.dirty_ratio = 10
vm.dirty_background_ratio = 4
sysctl -p
Ставим DRBD на обе ноды:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum install -y kmod-drbd84 drbd84-utils
modprobe drbd
echo drbd > /etc/modules-load.d/drbd.conf
cat /etc/drbd.d/replicated.res
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
resource replicated { protocol C; on <strong>nfs1</strong> { device /dev/drbd0; disk <strong>/dev/sdb</strong>; address <strong>192.168.1.130</strong>:7788; meta-disk internal; } on <strong>nfs2</strong> { device /dev/drbd0; disk <strong>/dev/sdb</strong>; address <strong>192.168.1.131</strong>:7788; meta-disk internal; } } |
[/codesyntax]
reboot
mkfs.ext4 /dev/sdb
dd if=/dev/zero of=/dev/sdb bs=1M oflag=direct status=progress
НА NFS1
[root@nfs1 ~]# drbdadm create-md replicated
[codesyntax lang="php"]
1 2 3 4 5 6 7 |
[root@nfs1 ~]# drbdadm create-md replicated initializing activity log initializing bitmap (320 KB) to all zero Writing meta data... New drbd meta data block successfully created. success |
[/codesyntax]
далее на NFS1 и NFS2 стартуем:
[root@nfs1 ~]# systemctl start drbd
[root@nfs2 ~]# systemctl start drbd
Проверяем:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@nfs1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 14.3G 0 part ├─centos-root 253:0 0 2G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] ├─centos-usr 253:2 0 4.7G 0 lvm /usr ├─centos-home 253:3 0 1G 0 lvm /home └─centos-var 253:4 0 4.7G 0 lvm /var sdb 8:16 0 10G 0 disk └─drbd0 147:0 0 10G 1 disk sr0 11:0 1 1024M 0 rom |
[/codesyntax]
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@nfs2 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 14.3G 0 part ├─centos-root 253:0 0 2G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] ├─centos-usr 253:2 0 4.7G 0 lvm /usr ├─centos-home 253:3 0 1G 0 lvm /home └─centos-var 253:4 0 4.7G 0 lvm /var sdb 8:16 0 10G 0 disk sr0 11:0 1 1024M 0 rom drbd0 147:0 0 10G 1 disk |
[/codesyntax]
видим что drbd0 появился.
Запускаем принудительную репликаю только на NFS1:
[root@nfs1 ~]# drbdadm primary replicated --force
проверяем статус:
[root@nfs1 ~]# cat /proc/drbd
[codesyntax lang="php"]
1 2 3 4 5 |
version: 8.4.11-1 (api:1/proto:86-101) GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2020-04-05 02:58:18 0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless C r----- ns:0 nr:0 dw:0 dr:2120 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10485404 |
[/codesyntax]
создаём файловую систему и монтируем устройство.
ТОЛЬКО НА NFS1
[root@nfs1 ~]# mkfs.ext4 /dev/drbd0
[root@nfs1 ~]# mount /dev/drbd0 /nfs/
[root@nfs1 ~]# df -h | grep drbd
/dev/drbd0 9.8G 37M 9.2G 1% /nfs
копируем хомяк в эту директорию:
[root@nfs1 ~]# cp -r /home/* /nfs/
переключаем на второй nfs:
[root@nfs1 ~]# umount /nfs/
[root@nfs1 ~]# drbdadm secondary replicated
[root@nfs2 ~]# drbdadm primary replicated
[root@nfs2 ~]# mount /dev/drbd0 /nfs/
[root@nfs2 ~]# ls -lah /nfs/
total 40K
drwxr-xr-x 7 root root 4.0K Sep 12 14:32 .
dr-xr-xr-x. 19 root root 4.0K Sep 5 13:53 ..
drwx------ 3 root root 4.0K Sep 12 14:32 ansible
drwx------ 2 root root 4.0K Sep 12 14:32 ceph
drwx------ 2 root root 16K Sep 12 14:02 lost+found
drwx------ 3 root root 4.0K Sep 12 14:32 mid
drwx------ 3 root root 4.0K Sep 12 14:32 user1
возвращаем на первый nfs1:
[root@nfs2 ~]# umount /nfs/
[root@nfs2 ~]# drbdadm secondary replicated
[root@nfs1 ~]# drbdadm primary replicated
[root@nfs1 ~]# mount /dev/drbd0 /nfs/
добавляем в автомонтирование:
cat /etc/fstab
/dev/drbd0 /nfs ext4 noatime,noauto,nobarrier 0 0
DRBD НАСТРОЕН
отметим что точно такую же настройку можно делать и с LVM томами.
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@nfs1 ~]# cat /etc/drbd.d/replicated.res resource replicated { protocol C; on nfs1 { device /dev/drbd0; disk /dev/mapper/centos-nfs; address 192.168.1.130:7788; meta-disk internal; } on nfs2 { device /dev/drbd0; disk /dev/mapper/centos-nfs; address 192.168.1.131:7788; meta-disk internal; } } |
[/codesyntax]
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@nfs1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 14.3G 0 part ├─centos-root 253:0 0 2G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] ├─centos-usr 253:2 0 4.7G 0 lvm /usr ├─centos-home 253:3 0 1G 0 lvm /home └─centos-var 253:4 0 4.7G 0 lvm /var sdb 8:16 0 10G 0 disk └─centos-nfs 253:5 0 5G 0 lvm └─drbd0 147:0 0 5G 0 disk /nfs sr0 11:0 1 1024M 0 rom |
[/codesyntax]
-------------- --------------------- --------------------- -------------------------
Настройка NFS сервера и NFS клиента:
ставим необходимые пакеты:
yum install nfs-utils -y
systemctl stop nfs-lock && systemctl disable nfs-lock
------------------ ---------------------------------- ------------------------------
Ставим pacemaker на nfs1 nfs2:
yum install -y pacemaker pcs
echo "H@xorP@assWD" | passwd hacluster --stdin
systemctl start pcsd
НА NFS1
pcs cluster auth nfs1 nfs2 -u hacluster -p H@xorP@assWD
pcs cluster setup --start --name mycluster nfs1 nfs2
На nfs1 nfs2:
systemctl start corosync
systemctl enable corosync
pcs cluster start --all
pcs cluster enable --all
проверяем. Мастер должен быть с id 1 и слейв с id2
corosync-cfgtool -s
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@nfs1 ~]# corosync-cfgtool -s Printing ring status. Local node ID 1 RING ID 0 id = 192.168.1.130 status = ring 0 active with no faults [root@nfs2 ~]# corosync-cfgtool -s Printing ring status. Local node ID 2 RING ID 0 id = 192.168.1.131 status = ring 0 active with no faults |
[/codesyntax]
на NFS1
pcs cluster cib mycluster
Отключите политику кворума и STONITH в файле конфигурации кластера.
pcs -f /root/mycluster property set no-quorum-policy=ignore
pcs -f /root/mycluster property set stonith-enabled=false
pcs -f /root/mycluster resource defaults resource-stickiness=300
Теперь добавим в кластер наш DRBD ресурс replicated
pcs -f /root/mycluster resource create replicated ocf:linbit:drbd drbd_resource=replicated op monitor interval=10s
Создайте дополнительный ресурс клонирования replicated -clone, чтобы позволить ресурсу работать на обоих узлах в одно время
pcs -f /root/mycluster resource master replicated-clone replicated master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
добавляем файловую систему drbd
pcs -f /root/mycluster resource create replicated-fs Filesystem device="/dev/drbd0" directory="/nfs" fstype="ext4"
файловая система должна быть запущена на том же узле, что и replicated-clone, поскольку
службы кластера pacemaker, которые работают на одном узле, зависят друг от друга/
pcs -f /root/mycluster constraint colocation add replicated-fs with replicated-clone INFINITY with-rsc-role=Master
добавляем виртуальный айпишник:
pcs -f /root/mycluster resource create vip1 ocf:heartbeat:IPaddr2 ip=192.168.1.136 cidr_netmask=24 op monitor interval=10s
VIP требует, чтобы активная файловая система работала, поэтому нам нужно убедиться, что ресурс DRBD
стартует до VIP
pcs -f /root/mycluster constraint colocation add vip1 with replicated-fs INFINITY
pcs -f /root/mycluster constraint order replicated-fs then vip1
проверяем:
pcs -f /root/mycluster resource show
pcs -f /root/mycluster constraint
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@nfs1 ~]# pcs -f /root/mycluster resource show r0 (ocf::linbit:drbd): Stopped Master/Slave Set: replicated-clone [replicated] Stopped: [ nfs1 nfs2 ] replicated-fs (ocf::heartbeat:Filesystem): Stopped vip1 (ocf::heartbeat:IPaddr2): Stopped [root@nfs1 ~]# pcs -f /root/mycluster constraint Location Constraints: Ordering Constraints: start replicated-fs then start vip1 (kind:Mandatory) Colocation Constraints: replicated-fs with replicated-clone (score:INFINITY) (with-rsc-role:Master) vip1 with replicated-fs (score:INFINITY) Ticket Constraints: |
[/codesyntax]
сохраняем все изменения:
[root@nfs1 ~]# pcs cluster cib-push mycluster
CIB updated
теперь производим установку:
pcs -f /root/mycluster resource create nfsd nfsserver nfs_shared_infodir=/nfs
pcs -f /root/mycluster resource create nfsroot exportfs clientspec="192.168.1.0/24" options=rw,sync,no_root_squash directory=/nfs fsid=0
pcs -f /root/mycluster constraint colocation add nfsd with vip1 INFINITY
pcs -f /root/mycluster constraint colocation add vip1 with nfsroot INFINITY
pcs -f /root/mycluster constraint order vip1 then nfsd
pcs -f /root/mycluster constraint order nfsd then nfsroot
pcs -f /root/mycluster constraint order promote replicated-clone then start replicated-fs
pcs resource cleanup
pcs cluster cib-push mycluster
проверяем:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@nfs1 ~]# ls -lah /nfs/ total 40K drwxr-xr-x 7 root root 4.0K Sep 13 14:52 . dr-xr-xr-x. 19 root root 4.0K Sep 5 13:53 .. -rw-r----- 1 root root 0 Sep 13 14:50 etab -rw-r--r-- 1 root root 0 Sep 13 13:33 export-lock drwx------ 2 root root 16K Sep 12 21:25 lost+found drwx------ 2 root root 4.0K Sep 13 13:33 nfsdcltrack -rw-r----- 1 root root 0 Sep 13 13:33 rmtab -rw-r----- 1 root root 0 Sep 13 14:50 .rmtab drwxr-x--x 2 root root 4.0K Sep 13 13:33 rpc_pipefs drwxr-x--x 5 rpcuser rpcuser 4.0K Sep 13 13:33 statd drwxr-x--x 2 root root 4.0K Sep 13 13:33 v4recovery -rw-r----- 1 root root 0 Sep 13 13:33 xtab |
[/codesyntax]
создадим директорию и переключим на второй NFS сервер:
[root@nfs1 ~]# mkdir /nfs/TEEEEEEEEEEEEEEEEEEEESSSSSSSSSSSTTTTTT
[root@nfs1 ~]# pcs resource move replicated-fs nfs2
смотрим на nfs2 что подмонтировался диск и там есть директория, создаём ещё одну директорию и переключаем всё на первый nfs1
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[root@nfs2 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 909M 0 909M 0% /dev tmpfs 920M 53M 867M 6% /dev/shm tmpfs 920M 8.6M 911M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgroup /dev/mapper/centos-root 2.0G 44M 1.8G 3% / /dev/mapper/centos-usr 4.5G 1.4G 2.9G 33% /usr /dev/sda1 477M 221M 227M 50% /boot /dev/mapper/centos-home 976M 2.6M 907M 1% /home /dev/mapper/centos-var 4.5G 261M 4.0G 7% /var tmpfs 184M 0 184M 0% /run/user/0 /dev/drbd0 4.8G 21M 4.6G 1% /nfs [root@nfs2 ~]# ls -lah /nfs/ total 44K drwxr-xr-x 8 root root 4.0K Sep 13 14:53 . dr-xr-xr-x. 19 root root 4.0K Sep 5 13:53 .. -rw-r----- 1 root root 0 Sep 13 14:50 etab -rw-r--r-- 1 root root 0 Sep 13 13:33 export-lock drwx------ 2 root root 16K Sep 12 21:25 lost+found drwx------ 2 root root 4.0K Sep 13 13:33 nfsdcltrack -rw-r----- 1 root root 0 Sep 13 13:33 rmtab -rw-r----- 1 root root 0 Sep 13 14:50 .rmtab drwxr-x--x 2 root root 4.0K Sep 13 13:33 rpc_pipefs drwxr-x--x 5 rpcuser rpcuser 4.0K Sep 13 13:33 statd drwxr-xr-x 2 root root 4.0K Sep 13 14:53 TEEEEEEEEEEEEEEEEEEEESSSSSSSSSSSTTTTTT drwxr-x--x 2 root root 4.0K Sep 13 13:33 v4recovery -rw-r----- 1 root root 0 Sep 13 13:33 xtab [root@nfs2 ~]# mkdir /nfs/222222222222222222TEEEEEEEST |
[/codesyntax]
[root@nfs2 ~]# pcs resource move replicated-fs nfs1
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@nfs1 ~]# ls -lah /nfs/ total 48K drwxr-xr-x 9 root root 4.0K Sep 13 14:55 . dr-xr-xr-x. 19 root root 4.0K Sep 5 13:53 .. drwxr-xr-x 2 root root 4.0K Sep 13 14:55 222222222222222222TEEEEEEEST -rw-r----- 1 root root 0 Sep 13 14:50 etab -rw-r--r-- 1 root root 0 Sep 13 13:33 export-lock drwx------ 2 root root 16K Sep 12 21:25 lost+found drwx------ 2 root root 4.0K Sep 13 13:33 nfsdcltrack -rw-r----- 1 root root 0 Sep 13 13:33 rmtab -rw-r----- 1 root root 0 Sep 13 14:50 .rmtab drwxr-x--x 2 root root 4.0K Sep 13 13:33 rpc_pipefs drwxr-x--x 5 rpcuser rpcuser 4.0K Sep 13 13:33 statd drwxr-xr-x 2 root root 4.0K Sep 13 14:53 TEEEEEEEEEEEEEEEEEEEESSSSSSSSSSSTTTTTT drwxr-x--x 2 root root 4.0K Sep 13 13:33 v4recovery -rw-r----- 1 root root 0 Sep 13 13:33 xtab |
[/codesyntax]
------------------ ------------------------ ------------------
если необходимо удалить ресурс:
обновить кластер:
cibadmin --query > tmp.xml
cibadmin --replace --xml-file tmp.xml
Удалить ресурс
pcs -f /root/mycluster resource delete db
Удалить кластер
pcs cluster destroy
на NFS2
drbdadm secondary all
drbdadm disconnect all
drbdadm -- --discard-my-data connect all
на NFS1
drbdadm primary all
drbdadm disconnect all
drbdadm connect all
на nfs1 nfs2
drbdadm status
cat /proc/drbd