部署nfs高可用rsync+inotify
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署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]# ls
nfs-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/bash
while true;
do
ping 172.16.1.20 -c 4 &> /dev/null
if [ $? -ne 0 ];
then
umount -l /test && mount -t nfs -o soft,timeo=5 172.16.1.30:/nfs-share /test
fi
sleep 1
done
注意:这个脚本会每秒检测一次,只要当主nfs-server故障后,就会重新挂载到从nfs-server上的共享目录下。
//执行该脚本:[root@client ~]# sh nfs.sh & #让其后台运行
//接下来将主nfs-server主机进行关机或者停止服务(模拟宕机)。
//最后验证客户机是否检测到,并且将目录挂载到从nfs-server服务器上。
[root@client ~]# cd /test
[root@client test]# ls
nfs-share
[root@client test]# ls nfs-share/
123.txt index.html index.php
---------------------------------可以看到当主nfs-server故障后,会执行脚本重新挂载到备用nfs-server上,以实现数据不会丢失,并且不会中断正在运行的服务---------------------
———————— 本文至此结束,感谢阅读 ————————
以上是关于部署nfs高可用rsync+inotify的主要内容,如果未能解决你的问题,请参考以下文章
Linux NFS挂载优化,inotify+rsync实时备份