利用unison+inotify 实现数据双向实时同步


环境:Centos 6.5 64位

   server1 :192.168.1.201

   server2 :192.168.1.250

需求软件:ocaml unison inotify-tools

我这里全是使用yum安装的,若是喜欢使用源码编译安装的可以官网下载源码包。

   yum install ocaml unison inotify 


第一步:保证两台服务器之间可以通过ssh无密码访问,为了安全,需要创建一个普通用户:

两边执行的步骤一样:

    useradd unison

    passwd unison

    su - unison

    ssh-keygen -t rsa (直接三次回车即可)

    scp .ssh/id_rsa.pub 192.168.1.250:/home/unison/.ssh/authrized_keys

    scp .ssh/id_rsa.pub 192.168.1.201:/home/unison/.ssh/authrized_keys 

    chmod 600 .ssh


第二步:创建shell脚本来执行同步

 在server1 上

  vim /home/unison/inotify.sh

#! /bin/bash
ip2="192.168.1.250"
src2="/home/unison/test"
dst2="/home/unison/test"
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line; do
/usr/bin/unison -batch $src2 ssh://$ip2//$dst2
echo -n "$line" >> /home/unison/inotify.log
echo `date| cut -d ' ' -f1-4` >> /home/unison/inotify.log
done

在server2 上创建脚本:

#! /bin/bash
ip1="192.168.1.201"
src1="/home/unison/test"
dst1="/home/unison/test"
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src1 | while read line; do
/usr/bin/unison -batch $src1 ssh://$ip1//$dst1
echo -n "$line" >> /home/unison/inotify.log
echo `date| cut -d ' ' -f1-4` >> /home/unison/inotify.log
done

        

最后分别在两台服务器上执行脚本即可:

  nohup sh /home/unison/inotify.sh   //加nohup,即可退出当前用户,也可以继续执行此脚本

若想开机启动,可以加入到/etc/rc.d/rc.local中。