实现自动远程实时同步文件的方法:
1、ssh远程密钥登陆
由于远程同步需要密码验证,我们通过公私钥免密码登陆远程主机,从而实现远程自动同步。
2、rsync(触发事件调用 rsync 远程同步文件至一台或多台服务器)
一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
3、inotifywait(对文件系统事件实时监控)
一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
一、部署无密码登陆(这里以web1为管理主机,配置免密登录web4,web5,web6)
[root@web1 ~]# vim ip.config 存放需要远程ssh免密登录的ip
192.168.1.4 web4
192.168.1.5 web5
192.168.1.6 web6
[root@web1 ~]# vim ssh_without_pass.sh
#!/bin/bash
ssh-keygen -t rsa -b 2048 -N "" -f $HOME/.ssh/id_rsa
cat $HOME/.ssh/id_rsa.pub >$HOME/.ssh/authorized_keys
chmod 600 $HOME/.ssh/authorized_keys
for ip in $(awk '{print $1}' ip.config); do
rsync -av -e 'ssh -o StrictHostKeyChecking=no' $HOME/.ssh/authorized_keys root@$ip:$HOME/.ssh/
done
[root@web1 ~]# ./ssh_without_pass.sh 执行
ssh -o StrictHostKeyChecking=no #SSH免密码登陆避免首次需要输入yes
二、编写安装rsync和inotify工具,并实时监控目录的shell脚本,当有变更的时候就自动的执行同步
[root@web1 ~]# vim rsync_inotify_install.sh
#!/bin/bash
yum -y install rsync gcc make
tar -xf inotify-tools-3.13.tar.gz #源码安装inotify
cd inotify-tools-3.13
./configure
make && make install
which inotifywait
[root@web1 ~]# chmod +x rsync_inotify_install.sh
[root@web1 ~]# ./rsync_inotify_install.sh
[root@web1 ~]# vim rsync_inotifywait.sh
#!/bin/bash
dir=/opt #设置需要实时同步的目录
while inotifywait -rqq $dir #运行成功则执行以下代码
do
rsync -a -e 'ssh -o StrictHostKeyChecking=no' --delete $dir root@$ip:/$dir
done
[root@web1 ~]#chmod +x ./rsync_inotifywait.sh
[root@web1 ~]#./rsync_inotifywait.sh & 放入后台运行
[root@web1 ~]# jobs -l 查看当前在后台运行的命令
[1]+ 19047 运行中 ./rsync_inotifywait.sh &
三、添加开机自启动
因为inotify只在启动时会监控目录,在没有启动期间的文件发生的更改,是不知道的,所以这里添加开机自启动,防止各种意外遗漏,保证目录一致。
echo “/root/rsync_inotifywait.sh &” >> /etc/rc.local
每次触发都要扫描整个目录进行文件差异对比, 文件越多越耗时长