Shell-case:集群中服务器间实时同步

      今天和大家分享一个比较常见的技术,实时同步技术,在集群中,很多设备的内容都是一样的,装的时候可以用克隆的方法,但后来有的时候需要进行修改,我们就要一模一样的操作每个机子,这就很麻烦,我们就希望可以修改其中一个机子后,自动同步到其他服务器上,这时候就要用到 rsync 同步技术,我们知道rsync可以同步,但是怎么做实时同步呢?话不多说代码奉上:

Watch_Root=需要同步的目录
ip=需要同步到的主机ip
Same_Root=root@$ip:$Watch_Root
rsync --delete -az $Watch_Root $Same_Root
while inotifywait -rqq $Watch_Root                                              
do
  rsync --delete -az $Watch_Root $Same_Root
done &
echo -e \n 'Start rsync is uccssful'

      不过这代码在使用前,必须,必须,必须将服务器间做好秘钥连接!!如果不知道秘钥如何连接,可以前往外地 github https://github.com/SmartLyu/shell 里面的 alltime_rsync 其中包含了也包含了所有的操作,可以拿脚本直接使用,只需要修改其中的ip和Watch_Root,就可以使用了,它会自动建立秘钥,不过需要输入密码。

      下面我们来分析一下算法,其实算法很简单,因为我们的要求也很简单,当一个服务器文件被修改后,就把其被修改的文件同步到其他服务器上,那我们要做的就是监控,然后发现被修改后进行同步,那我们一个一个来实现,显示如何做到实时监控,想要做到实时,就是要设备每时每刻观察,那就是无限循环的做,无限循环好做哇,while即可,那怎么监控呢,一个命令 inotifywait 就可做到,不过这个不能yum安装,所以要解压编译安装,具体包在资源中的inotify包中,可以自行下载安装,那么代码雏形就出来了

Watch_Root=需要同步的目录
while :
do
     inotifywait -rqq $Watch_Root
done

      检测后,当检测到有变化执行同步命令,那我们只要进行一个判断即可,然后执行同步就完成了需求:

Watch_Root=需要同步的目录
ip=需要同步到的主机ip
Same_Root=root@$ip:$Watch_Root
while :
do
     inotifywait -rqq $Watch_Root
     [ $? -eq 0 ] && rsync --delete -az $Watch_Root $Same_Root
done

      然后我们为了简化程序,我们可以吧while循环的条件变成命令,当命令成功的时候执行,然后执行完继续进行判断,实质上也是一个死循环,这样就可以简写。
      我们在使用中会发现,程序开始后,我们就希望能进行一次同步,所以我们在循环前可以先运行一次同步,然后再循环执行,实现实时同步,这就成了最后缩写的程序了。

附:有不足的地方,望各位大佬指出,可以留言也可以email给作者,如果喜欢可以收藏转发,但请注明出处,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值