Keepalived实现nfs高可用

Keepalived实现nfs高可用

Nfs_master服务器:172.20.26.167 (keepalived、nfs、sersync、rsync)

Nfs_salve服务器:172.20.26.198   (keepalived、nfs、rsync)

Nfs_client服务器:172.20.26.24     (nfs)

原理:两台机器上配置要一致,keepalived监控nfs进程,master上的nfs主进程宕掉无法启动时由slave主机上的nfs继续工作,master的数据备份到slave上,同时master和slave数据用rsync和sersync实时同步,保证数据的完整性。

部署keepalived服务

分别在172.20.26.167、172.20.26.198安装部署keepalived服务

yum install epel-release -y  #安装epel 源

yum update -y   #更新安装源

yum install psmisc -y  #脚本中用到killall 命令,需要安装pamisc

yum install keepalived -y

vim /etc/keepalived/keepalived.conf   #设置VIP地址为172.20.26.200,并增加chk_nginx 的脚本检测以及脚本追踪:

vrrp_script chk_nfs {

       script "/data/sh/chk_nfs.sh"

       interval 1

       weight -20

      }

track_script {

           chk_nfs

           }

notify_backup "/data/sh/notify_nfs.sh backup"

追踪上面所定义的chk_nfs,名字要与上面定义的一致。

非抢占模式:master和backup的state均设置为BACKUP,其次是master端配置nopreempt,backup不用配置。

Keepalived实现nfs高可用_第1张图片

Keepalived实现nfs高可用_第2张图片

 两边keepalived服务都安装后,将配置文件拷贝到172.20.26.198服务器/etc/keepalived/目录下

scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/

vim /etc/keepalived/keepalived.conf

Keepalived实现nfs高可用_第3张图片

分别在172.20.26.167、172.20.26.198服务器上创建/data/sh目录及chk_nfs.sh脚本:

mkdir -p /data/sh    #创建脚本目录

vim /data/sh/chk_nfs.sh   #编写脚本文件

#!/bin/bash

killall -0 nfsd &>/dev/null

if [[ $? -ne 0]];then

   pkill keepalived

fi

chmod +x /data/sh/chk_nfs.sh    #授权执行权限

两台服务器启动keepalived服务,查看VIP地址在172.20.26.167服务器上

systemctl start keepalived

Keepalived实现nfs高可用_第4张图片

如果172.20.26.167上nfs服务sotp掉,随之nfs服务stop 掉,keepalived服务也会被pkill掉,VIP 将漂移到172.20.26.198服务器上, 即使172.20.26.167服务器上nfs服务和keepalived服务恢复,VIP也不抢回,继续保留在172.20.26.198服务器上,只有在172.20.26.198服务器上nfs服务down掉,随着nfs服务down掉,keepalived服务也被pkill 掉,VIP才会漂移回172.20.26.167服务器上。

上面配置文件中需要关注的是我们设置成非抢占模式,如果设置成抢占模式会在不断的切换主备时容易造成nfs数据丢失。

Keepalived实现nfs高可用_第5张图片

部署NFS服务

在nfs_master172.20.26.167、nfs_slave172.20.26.198、nfs_client172.20.26.24 设置免密登录

[root@node1 ~]# ssh-keygen   #一路回车

[root@node1 ~]# ssh-copy-id 172.20.26.198  #输入172.20.26.198root密码,回车即可

[root@node1 ~]# ssh-copy-id 172.20.26.24  #输入172.20.26.24root密码,回车即可

Keepalived实现nfs高可用_第6张图片

在nfs_master172.20.26.167安装nfs-utils

yum install nfs-utils -y

Keepalived实现nfs高可用_第7张图片

#创建nfs共享目录

mkdir -p /nfs

#修改权限

chmod -R 777 /nfs

#编辑export文件

vim /etc/exports

/nfs 172.20.26.0/24(rw,no_root_squash,sync)   #设置172.20.26.0网段的设备均可访问nfs目录

#配置生效

exportfs -r

#查看生效

exportfs

exportfs -rv

Keepalived实现nfs高可用_第8张图片

#启动rpcbind、nfs服务

systemctl start rpcbind && systemctl enable rpcbind

systemctl start nfs && systemctl enable nfs

#查看 RPC 服务的注册状况

rpcinfo -p localhost

#showmount测试

showmount -e 172.20.26.200

Keepalived实现nfs高可用_第9张图片

###由于只是测试,我们共享的这个/nfs目录默认是没有单独挂载硬盘的,生产环境下最好是给这个共享目录单独挂载一块硬盘或者单独的磁盘分区

在nfs_slave172.20.26.198服务器所有操作和master一致

yum install epel-release -y  #安装epel 源

yum update -y   #更新安装源

yum install nfs-utils -y

创建nfs共享目录

mkdir -p /nfs

#修改权限

chmod -R 777 /nfs

#编辑export文件

vim /etc/exports

/nfs 172.20.26.0/24(rw,no_root_squash,sync)  设置172.20.26.0网段的设备均可访问nfs目录

#配置生效

exportfs -r

#查看生效

exportfs

exportfs -rv

Keepalived实现nfs高可用_第10张图片

#启动rpcbind、nfs服务

systemctl start rpcbind && systemctl enable rpcbind

systemctl start nfs && systemctl enable nfs

#showmount测试

showmount -e 172.20.26.200

在客户端172.20.26.24上也安装nfs

yum install epel-release -y  #安装epel 源

yum update -y   #更新安装源

yum install nfs-utils -y

systemctl start rpcbind && systemctl enable rpcbind

mkdir -p /nfs  #创建挂载点目录

在客户端172.20.26.24上挂载nfs_master172.20.26.167上的nfs共享目录

mount -t nfs 172.20.26.200:/nfs /nfs

Keepalived实现nfs高可用_第11张图片

在客户机上实现开机挂载,则需要编辑/etc/fstab

vim /etc/fstab

172.20.26.200:/nfs   /nfs  nfs defaults 0 0

Keepalived实现nfs高可用_第12张图片

mount -a    #表示读取fstab 里的信息进行挂载

 目前VIP在172.20.26.167服务器上,拷贝新文件到172.20.26.167服务器上nfs目录下,客户端172.20.26.24访问nfs共享目录正常。

Keepalived实现nfs高可用_第13张图片

Keepalived实现nfs高可用_第14张图片

Keepalived实现nfs高可用_第15张图片

Keepalived实现nfs高可用_第16张图片

部署172.20.26.167、172.20.26.198服务器上的rsync服务

在172.20.26.167安装sersync、rsync、inotify-tools

上传、安装 sersync

root@node1 /]# cd /usr/src

[root@node1 src]# rz   

将sersync2.5.4_64bit_binary_stable_final.tar上传到172.20.26.167上,配置sersync服务

Keepalived实现nfs高可用_第17张图片

[root@node1 src]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

将解压出来的GNU-Linux-x86目录移到/usr/local/sersync

root@node1 src]# mv GNU-Linux-x86/ /usr/local/sersync

Keepalived实现nfs高可用_第18张图片

 /usr/local/sersync下只有confxml.xml、sersync2两个文件,一个是配置文件、一个可执行文件。

[root@node1 sersync]# vim /usr/local/sersync/confxml.xml

  改为

Inotify 模块定义通知开始同步的条件:

             #开始删除的时候,默认为true

            #创建目录的时候,默认为true

              #创建文件的时候,默认为false,这里改为“true”

              #关闭写的时候,默认为true

             #从---移动到的时候,默认为true

             #开始移动的时候,默认为true

              #查询开始,默认为false

              #修改开始的时候,默认为false

将超时时间改为true

计划任务默认是false ,如果改为true,默认是600分钟做一次全量同步

开启认证,配置使用rsync 和密码文件

保存退出

Keepalived实现nfs高可用_第19张图片

[root@node1 sersync]# ./sersync2 -d -r -o /usr/local/sersync/confxml.xml #启动sersync 服务

[root@node1 sersync]# echo "123456" >/etc/rsync.passwd   #编辑密码文件

[root@node1 sersync]# chmod 600 /etc/rsync.passwd  #修改rsync.passwd 文件的权限,其他人和组不可读写

[root@node1 ~]# yum install rsync inotify-tools -y

[root@node1 ~]# vim /etc/rsyncd.conf

Keepalived实现nfs高可用_第20张图片

systemctl start rsyncd  #启动rsync服务

systemctl enable rsyncd   #将rsync服务添加为开机启动

172.20.26.198服务器上安装 rsync inotify-tools

[root@node2 ~]# yum install rsync inotify-tools -y

Keepalived实现nfs高可用_第21张图片

[root@node2 ~]# vim /etc/rsyncd.conf

Keepalived实现nfs高可用_第22张图片

[root@node2 /]# echo "rsync:123456" >/etc/rsync.passwd   #编辑密码文件

[root@node2 /]# chmod 600 /etc/rsync.passwd  #修改rsync.passwd 文件的权限,其他人和组不可读写

[root@node2 /]# systemctl start rsyncd     #启动rsync 服务

[root@node2 /]# systemctl enable rsyncd   #设置开机启动rsync服务

现在我们在master节点172.20.26.167上手工同步一下,让slave172.20.26.198节点同步master的数据

rsync -av /nfs/ [email protected]::slave_nfs --password-file=/etc/rsync.passwd

Keepalived实现nfs高可用_第23张图片

Keepalived实现nfs高可用_第24张图片

客户端查看

Keepalived实现nfs高可用_第25张图片

我们验证两台nfs服务器数据实时数据同步

在172.20.26.167服务器上nfs目录下创建test0219.txt文件

Keepalived实现nfs高可用_第26张图片

Keepalived实现nfs高可用_第27张图片

客户端挂载VIP172.20.26.200访问正常

Keepalived实现nfs高可用_第28张图片

在客户端172.20.26.24服务器上执行卸载、重新挂载的脚本命令

mkdir -p /data/sh

vim /data/sh/nfs_remount.sh

#!/bin/bash

#by lqc

#2021-02

#############################

while true;do

ls /nfs &>/dev/null

if [ $? -ne 0 ];then

umount -l /nfs && mount -o soft,timeo=1 172.20.26.200:/nfs /nfs

fi

sleep 1

done

Keepalived实现nfs高可用_第29张图片

[root@node3 nfs]# nohup bash /data/sh/nfs_remount.sh &

Keepalived实现nfs高可用_第30张图片

Keepalived实现nfs高可用_第31张图片

将nfs_remount.sh脚本设置后台运行程序,并开机自启动,创建serverAutoRun.sh脚本:

vim /data/sh/serverAutoRun.sh

#!bash

nohup bash /data/sh/nfs_remount.sh >>/dev/null &

再把执行serverAutoRun.sh脚本命令写进/etc/rc.d/rc.local文件中

vim /etc/rc.local

nohup bash /data/sh/serverAutoRun.sh &

Keepalived实现nfs高可用_第32张图片

再将两个文件赋予可执行权限

chmod +x /data/sh/serverAutoRun.sh

chmod +x /etc/rc.local

重启客户端

我们在172.20.26.167服务器上stop 掉nfs服务,VIP 将漂移到172.20.26.198服务器上,客户端172.20.26.24可以正常访问挂载的nfs目录内容。

Keepalived实现nfs高可用_第33张图片

Keepalived实现nfs高可用_第34张图片

Keepalived实现nfs高可用_第35张图片

如果是抢占模式下,我们将172.20.26.167服务器上的nfs 启动,,172.20.26.198服务器卸载VIP,VIP漂移回172.20.26.167服务器上。

我们这里配置的是非抢占模式,即使将172.20.26.167服务器上的nfs 启动,VIP还是继续保留在172.20.26.198服务器上,客户端访问nfs目录正常。

Keepalived实现nfs高可用_第36张图片

Keepalived实现nfs高可用_第37张图片

Keepalived实现nfs高可用_第38张图片

我们将172.20.26.198服务器上的nfs服务stop掉,VIP将被卸载掉,将漂移到172.20,26.167服务器上

Keepalived实现nfs高可用_第39张图片

Keepalived实现nfs高可用_第40张图片

如果两次切换时客户端172.20.26.24当前访问目录在nfs目录下,则会提示无法打开目录,失效文件句柄,需要重新挂载,如果两次切换时客户端当前访问目录不在nfs目录下,则可以直接进入nfs目录,进行查阅挂载的目录文件。

Keepalived实现nfs高可用_第41张图片

Keepalived实现nfs高可用_第42张图片

你可能感兴趣的:(keepalived,nfs,linux,运维)