千家信息网

部署nfs高可用rsync+inotify

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,项目环境:三台主机(centos7):nfs-server主:172.16.1.20nfs-server从:172.16.1.30client(客户机):172.16.1.40项目操作:1, 首先搭建
千家信息网最后更新 2024年11月17日部署nfs高可用rsync+inotify

项目环境:

三台主机(centos7):

nfs-server主:172.16.1.20
nfs-server从:172.16.1.30
client(客户机):172.16.1.40

项目操作:

1, 首先搭建nfs服务器

主从nfs-server都需搭建,相同的操作。

[root@nfs-master ~]# yum -y install nfs-utils  #安装nfs服务[root@nfs-master ~]# yum -y install rpcbind #安装远程传输控制协议
[root@nfs-master ~]# vim /etc/exports  #编写nfs文件/nfs-share  172.16.1.*(rw,sync,no_root_squash)

参数解释:
172.16.1.*:表示允许该网段,也可以自定义ip地址
rw:可读可写
sync:同步数据到磁盘
no_root_squash:加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。

[root@nfs-master ~]# mkdir /nfs-share       #创建共享目录[root@nfs-master ~]# systemctl start rpcbind    #先启动该服务[root@nfs-master ~]# systemctl start nfs

2, 在从nfs-server上搭建rsync:

//安装rsync:[root@nfs-slave ~]# yum -y install rsync
//修改rsync配置文件:[root@nfs-slave ~]# vim /etc/rsyncd.conf

修改内容如下:

//为授权账户创建数据文件:[root@nfs-slave ~]# vim /etc/rsyncd_users.db    #文件名可以自定义,但是必须与上面配置文件中数据文件名相同

注意:用户名得和rsync配置文件中同一个用户。

//授予权限[root@nfs-slave ~]# chmod 600 /etc/rsyncd_users.db
//启动rsync服务:[root@nfs-slave ~]# rsync  --daemon

3, 在主nfs-server上安装inotify工具:

下载并上传inotify-tools-3.14.tar.gz安装包

[root@nfs-master ~]# tar zxf inotify-tools-3.14.tar.gz [root@nfs-master ~]# cd inotify-tools-3.14/[root@nfs-master inotify-tools-3.14]# ./configure && make && make install

##编写触发式同步脚本:
[root@nfs-master ~]# vim inotify.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /nfs-share"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /nfs-share sunqiuming@172.16.1.30::rsync"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE

do
$RSYNC_CMD
done

注意:该脚本用于监控本地的共享目录/nfs-share,只要监控到对该目录有任何操作,就会同步数据到从nfs-server服务器上的/nfs-share目录下(需要权限)。

//创建脚本中的密码文件(为了在同步的过程中不用在输入密码)

[root@nfs-master ~]# echo "123456" >  /etc/server.pass##文件名自定义,只要确保与上述脚本中相同

[root@nfs-master ~]# chmod 600 /etc/server.pass #授予权限

//对从nfs-server服务上的共享目录授予权限

[root@nfs-slave ~]# chmod 777 /nfs-share/[root@nfs-slave ~]# ls -ld /nfs-share/drwxrwxrwx 2 root root 6 Nov 14 23:14 /nfs-share/

//将脚本文件加入开机自启:
[root@nfs-master ~]# echo '/root/inotify.sh' >> /etc/rc.local

//执行该触发脚本:
[root@nfs-master ~]# sh inotify.sh & #后台运行

4, client客户机进行挂载:

[root@client ~]# mkdir /test    #创建测试挂载目录[root@client ~]# mount -t nfs -o soft,timeo=5 172.16.1.20:/nfs-share  /test #注意使用软挂载,默认是硬挂载,使用软挂载,当服务端宕机,不会一直阻塞
##在测试目录下编写测试文件:[root@client test]# echo "hello" > index.html[root@client test]# echo "ha ha ha " > index.php

//在主nfs-server上进行查看:

[root@nfs-master ~]# cd /nfs-share/[root@nfs-master nfs-share]# cat index.html hello[root@nfs-master nfs-share]# cat index.php ha ha ha

//再次到从nfs-server上进行查看(是否已经触发脚本,并同步数据)

[root@nfs-slave ~]# cd /nfs-share/[root@nfs-slave nfs-share]# lsnfs-share[root@nfs-slave nfs-share]# cd nfs-share/[root@nfs-slave nfs-share]# cat index.html hello[root@nfs-slave nfs-share]# cat index.php ha ha ha

数据同步成功。。。。。。。。。。


5, 模拟nfs-server故障:

模拟故障前首先在客户机上编写检测脚本:

[root@client ~]# vim nfs.sh#!/bin/bashwhile  true; do        ping 172.16.1.20 -c 4  &> /dev/nullif [ $? -ne 0  ];then        umount -l /test  && mount -t nfs -o soft,timeo=5 172.16.1.30:/nfs-share /testfisleep 1done

注意:这个脚本会每秒检测一次,只要当主nfs-server故障后,就会重新挂载到从nfs-server上的共享目录下。

//执行该脚本:
[root@client ~]# sh nfs.sh & #让其后台运行

//接下来将主nfs-server主机进行关机或者停止服务(模拟宕机)。


//最后验证客户机是否检测到,并且将目录挂载到从nfs-server服务器上。

[root@client ~]# cd /test[root@client test]# lsnfs-share[root@client test]# ls nfs-share/123.txt  index.html  index.php

---------------------------------可以看到当主nfs-server故障后,会执行脚本重新挂载到备用nfs-server上,以实现数据不会丢失,并且不会中断正在运行的服务---------------------

-------- 本文至此结束,感谢阅读 --------

0