unison+inotify实现web数据双向同步
Unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH、RSH和Socket等网络协议进行同步。更棒的是,Unison支持双向同步操作,你既可以从A同步到B,也可以从B同步到A,这些都不需要额外的设定。
服务器分别为:
vm1:10.0.1.12 ,同步目录: /data/ftp/dybus/
vm2:10.0.1.13 ,同步目录:/data/ftp/dybus/
1.下载包 inotify-tools-3.14.tar.gz ocaml-3.10.2.tar.gz unison-2.40.63.tar.gz
wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz
wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.40.63/unison-2.40.63.tar.gz
vm1和vm2上面同时安装以下程序
安装 inotify-tools-3.14.tar.gz
tar zxvfp inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
安装ocaml-3.10.2.tar.gz
tar zxvfp ocaml-3.10.2.tar.gz
cd ocaml-3.10.2
./configure
make world opt
make install
安装unison-2.40.63.tar.gz
tar zxvfp unison-2.40.63.tar.gz
cd unison-2.40.63
ls
make UISTYLE=text THREADS=true STATIC=true #UISTYLE=text THREADS=true STATIC=true 表示:使用命令方式,加入线程支持,以静态模式编译
make install
mv /root/bin//unison /tmp/unison-11425
mv: 无法获取"/root/bin//unison" 的文件状态(stat): 没有那个文件或目录
make: [doinstall] 错误 1 (忽略)
cp unison /root/bin/
cp: 无法创建普通文件"/root/bin/": 是一个目录
make: *** [doinstall] 错误 1
cp unison /usr/local/bin
##make install会提示错误,此错误就是要你cp unison /usr/local/bin,复制即可
制作密钥使两台设备免密登录
vm1
cd
cd .ssh/
ssh-keygen -t rsa -P ''
[一直回车]
ls
touch authorized_keys
cat id_rsa.pub >>authorized_keys
scp authorized_keys root@10.0.1.12:/root/.ssh/
vm2
cd .ssh/
ssh-keygen -t rsa -P ''
[一直回车]
测试免密登录
vm2
[root@web02~]# ssh root@10.0.1.12
Last login: Thu Sep 8 14:46:13 2016 from 192.168.13.94
[root@web01~]#
vm1
[root@web01~]# ssh root@10.0.1.13
Last login: Thu Sep 8 14:46:13 2016 from 192.168.13.94
[root@web02~]#
创建文件目录
[root@web01~]# mkdir -p /data/ftp/dybus/
[root@web02~]# mkdir -p /data/ftp/dybus/
编写脚本,实现数据实时同步。
vm1
vim unison-A.sh
#/bin/bash
ipB="10.0.1.13"
srcA="/data/ftp/dybus/"
dstB="/data/ftp/dybus/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $srcA | while read line; do
/usr/local/bin/unison -servercmd=/usr/local/bin/unison -batch $srcA ssh://$ipB/$dstB
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
vm2
vim unison-B.sh
#/bin/bash
ipA="10.0.1.12"
dstA="/data/ftp/dybus/"
srcB="/data/ftp/dybus/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $dstB | while read line; do
/usr/local/bin/unison -servercmd=/usr/local/bin/unison -batch $srcB ssh://$ipA/$dstA
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
创建定时任务保持实时同步 vm1 和vm2上都需要做
#unison+inotify
* * * * * /data/script/unison-A.sh > /dev/null 2>&1 &
测试是否成功
vm1
cd /data/ftp/dybus/
touch 123
ls
vm2
ls
123
vm2
rm -rf 123
vm1
ls
OK 测试成功。