nas+inotify+rsync+shell实现实时同步文件
环境:
10.0.0.132 备份服务器:搭建rsync同步服务端
10.0.0.129 数据服务器:inotify实现监控挂载到本地的NAS目录文件变化,通过rsync实时同步到服务端,搭建NAS服务给到master服务nginx使用,存放nginx web端的文件(通过映射nobody)
1.基础环境
1.客户端
nginx端:10.0.0.128:/data/nfs
##挂载nas盘
cat /etc/fstab | grep nfs
10.0.0.129:/data/nfs-share1 /data/nfs nfs defaults,_netdev 0 0
mount -a
10.0.0.129:/data/nfs-share1 nfs4 98G 17G 82G 17% /data/nfs
##查看nas
[root@master nfs]#ll
total 0
-rw-r--r-- 1 root root 0 Oct 3 12:04 test.txt
2.10.0.0.129 NAS服务端+inotify监控文件变化+rsync同步,基于/etc/rsync.pas密码文件来实现,inotifywait
监控/data/nfs-share1的数据变化,共享给到10.0.0.128使用
3.10.0.0.132 rsync同步远端目录 /data/bak,基于/etc/rsyncd.conf
2.编写脚本实现实时同步
vim inotify_rsync.sh
##监控NAS目录的变化
SRC='/data/nfs-share1/'
##备份服务器为132的bak,调用rsync的协议
DEST='[email protected]::bak'
rpm -q rsync &> /dev/null || yum -y install rsync
rpm -q inotify-tools &> /dev/null || yum -y install inotify-tools
echo "starting monitor file change..."
sleep 2
#持续前台监控特定事件,定义时间格式、日期格式、动作(新建、删除、移动---重命名、写入、权限变化) + nas目录,输入到while内
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
##表示新建=新建,删除=删除
rsync -az --delete --password-file=/etc/rsync.pas $SRC $DEST
echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
#日志在129上面,在129上执行的脚本
done
#2022-10-03 12:50:08 /data/nfs-share1/ e.txt
#2022-10-03 12:50:08 /data/nfs-share1/ e.txt
#2022-10-03 12:50:08 /data/nfs-share1/ e.txt
传参给DATE TIME DIR FILE
FILEPATH=${DIR}${FILE}--->/data/nfs-share1/e.txt
执行脚本,同时监控132的/data/bak
#后台挂起监控,这个东西最好是实时跑的,或是不放心可以整个crontab -e让他实时跑
nohup ./inotify_rsync.sh
starting monitor file change...
crontab -e
* * * * * /root/inotify_rsync.sh
132上0.5监控一次,watch实时监控
watch -n0.5 ls -l /data/bak
#在128nginx机器上实时写入文件
echo "rsync test" >> rsync.txt
在129上查看实时日志,输出格式,查看变化的文件
tail -f /var/log/changelist.log
At 12:27:16 on 2022-10-03, file /data/nfs-share1/a.txt was backuped up via rsync
At 12:27:16 on 2022-10-03, file /data/nfs-share1/a.txt was backuped up via rsync
在132上查看实时rsyncd的日志
tail -f /var/log/rsyncd.log
![image-20221003131013163](/i/l/?n=22&i=blog/2792175/202210/2792175-20221003132237844-1735424300.png)
![image-20221003131143435](/i/l/?n=22&i=blog/2792175/202210/2792175-20221003132238220-1999300626.png)