Thank you for reading this post, don't forget to subscribe!
cat /etc/hosts
192.168.1.130 nfs1
192.168.1.131 nfs2
настраиваем виртуальный ip адрес:
yum install keepalived -y
[root@nfs1 ~]# cat /etc/keepalived/keepalived.conf
[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 |
global_defs { notification_email { mid@test.ru } notification_email_from Andrey@test.ru smtp_server localhost smtp_connect_timeout 30 router_id centos1 } vrrp_instance VI_1 { state MASTER interface enp0s3 virtual_router_id 51 priority 100 advert_int 4 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.135 dev enp0s3 label enp0s3:vip } } |
[/codesyntax]
[root@nfs2 ~]# cat /etc/keepalived/keepalived.conf
[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 |
global_defs { notification_email { mid@test.ru } notification_email_from Andrey@test.ru smtp_server localhost smtp_connect_timeout 30 router_id centos1 } vrrp_instance VI_1 { state BACKUP interface enp0s3 virtual_router_id 51 priority 99 advert_int 4 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.135 dev enp0s3 label enp0s3:vip } } |
[/codesyntax]
[root@nfs1 ~]# systemctl enable keepalived && systemctl start keepalived
[root@nfs2 ~]# systemctl enable keepalived && systemctl start keepalived
-------------------- ------------------------- ------------------------
настроим репликацию данных с одного сервера на второйс помощью утилиты lsync
Нужно что бы первый/главный сервер мог соединяться со вторым/зависмым сервером без пароля. Для этого воспользуемся ключами для ssh:
[root@nfs1 ~]# ssh-keygen
[root@nfs1 ~]# ssh-copy-id 192.168.1.131
[root@nfs2 ~]# ssh-keygen
[root@nfs2 ~]# ssh-copy-id 192.168.1.130
[root@nfs1 ~]# yum install epel-release
[root@nfs2 ~]# yum install epel-release
[root@nfs1 ~]# yum install lsyncd -y
[root@nfs2 ~]# yum install lsyncd -y
настраиваем логирование:
cat /etc/logrotate.d/lsyncd
1 2 3 4 5 6 7 8 9 10 11 12 |
/var/log/lsyncd/*log { rotate daily missingok notifempty compress sharedscripts postrotate if [ -f /var/lock/lsyncd ]; then /sbin/service lsyncd restart > /dev/null 2>/dev/null || true fi endscript } |
[root@nfs1 ~]# cat /etc/lsyncd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sync { default.rsyncssh, host="192.168.1.131", source="/nfs/", targetdir="/nfs", rsync = { compress = true, group = true, owner = true, rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no" } } |
[root@nfs2 ~]# cat /etc/lsyncd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sync { default.rsyncssh, host="192.168.1.130", source="/nfs/", targetdir="/nfs", rsync = { compress = true, group = true, owner = true, rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no" } } |
тем самым у нас тачки будут синхронизироваться между собой(где было последнее изменение то и копирнётся.)
ставим nfs как на мастеров так и на клиентов:
yum install nfs-utils nfs-utils-lib
cat /etc/sysconfig/nfs | grep MOUNTD_PORT
MOUNTD_PORT=892
добавляем в автозапуск и стартуем:
systemctl enable rpcbind && systemctl start rpcbind
systemctl enable nfs && systemctl start nfs
настраиваем расшаренную директорию для всей подсети( КАК НА NFS1 ТАК И НА NFS2):
[root@nfs1 ~]# cat /etc/exports
/nfs 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
[root@nfs1 ~]# exportfs -rav
exporting 192.168.1.0/24:/nfs
на клиентах ставим:
yum install nmap -y
mkdir /etc/nfs
cat /etc/nfs/nfs
[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 |
#!/bin/bash usage() { echo "usage: $0 (nf1|nf2)" exit 1 } mn1() { umount -f /nfs-client /sbin/mount.nfs nfs1:/nfs /nfs-client } mn2() { umount -f /nfs-client /sbin/mount.nfs nfs2:/nfs /nfs-client } case "$1" in mn1) mn1 ;; mn2) mn2 ;; esac |
[/codesyntax]
chmod +x /etc/nfs/nfs
далее создаём чекер:
cat /etc/nfs/checker
[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 |
#!/bin/bash nfs1_state="active"; nfs2_state="inactive"; while true; do #check if nfs1 server is avaialble live_nfs1=$(nmap -p 892 nfs1 |grep open |awk '{print $2}'); live_nfs2=$(nmap -p 892 nfs2 |grep open |awk '{print $2}'); #Proceed if server is avaialble if [[ "$live_nfs1" = "open" ]]; then if [[ "$nfs1_state" = "inactive" ]]; then /etc/nfs/nfs mn1; nfs1_state="active"; nfs2_state="inactive"; fi sleep 3; elif [[ "$live_nfs2" = "open" ]]; then nfs1_state="inactive"; if [[ "$nfs2_state" = "inactive" ]]; then nfs2_state="active"; /etc/nfs/nfs mn2; fi sleep 3; else nfs2_state="inactive"; sleep 3; fi echo -e "NFS1: $nfs1_state \nNFS2: $nfs2_state \n"; done |
[/codesyntax]
chmod +x /etc/nfs/checker
На всякий случай /etc/init.d/nfs-check
скрипт, который будет стартовать при загрузке системы:
cat /etc/init.d/nfs-check
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#!/bin/bash ### BEGIN INIT INFO # Should-Start: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO # Author: TechNoter NAME="NFS Checker" DAEMON="/etc/nfs/checker" start_nfs_checker() { if [ $(ps aux |grep $DAEMON |wc -l) -gt 1 ]; then echo "$NAME is running" else $DAEMON 2>&1 >> /var/log/nfs_checker.log & echo "$NAME Started" fi } stop_nfs_checker() { if [ $(ps aux |grep $DAEMON |wc -l) -gt 1 ]; then kill -9 $(ps aux |grep $DAEMON | sed -n '1p' |awk '{print $2}') echo "Done"; else echo "$NAME not running"; fi } status_nfs_checker() { if [ $(ps aux |grep $DAEMON |wc -l) -gt 1 ] then echo "$NAME is running" else echo "$NAME not running"; fi } case "$1" in start) start_nfs_checker ;; stop) stop_nfs_checker ;; restart) stop_nfs_checker && sleep 2 && start_nfs_checker ;; status) status_nfs_checker ;; *) echo "Usage: $0 {start|stop|restart|status}" esac |
chmod +x /etc/init.d/nfs-check
chkconfig nfs-check on
ну и всё. вырубаем nfs1 перемонтируется с использованием nfs2 включаем nfs1 перемонтируется на nfs1