软件包的下载地址:http://down.51cto.com/data/2219727
1 目的:实现两个主机上面的目录实时同步数据,Unison支撑双向同步操纵,你既可以从A同步到B,也可以从B同步到A,这些都不须要额外的设定。
2 实验环境:server1 : 192.168.127.129 server2 : 192.168.127.130
同步的目录都是/data/nest
3 安装部署:两个服务器安装 unison 和ocaml,inotify
##编译安装ocaml,unison依赖于ocaml
解压 tar zvxf ocaml-3.10.2.tar.gz
cd/root/ocaml-3.10.2
./configure
make world opt
make install
##编译安装inotify
[[email protected] ~]# cd inotify-tools-3.14
[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify&& make && make install
[[email protected] inotify-tools-3.14]# cd /usr/local/inotify/
##修改PATH环境变量
[[email protected] inotify]# echo "PATH=/usr/local/inotify/bin:$PATH">/etc/profile.d/inotify.sh
[[email protected] inotify]# source /etc/profile.d/inotify.sh
##添加库文件到系统识别的路径
[[email protected] inotify]# echo "/usr/local/inotify/lib">/etc/ld.so.conf.d/inotify.conf
[[email protected] inotify]# ldconfig -v | grep inotify
/usr/local/inotify/lib:
libinotifytools.so.0 -> libinotifytools.so.0.4.1
##链接库文件到系统识别的路径
[[email protected] inotify]# ln -sv /usr/local/inotify/include/ /usr/include/inotify
`/usr/include/inotify‘ -> `/usr/local/inotify/include/‘
##编译安装unison (保证两台主机之间版本要一致)
Tar zxvf unison-2.32.52.tar.gz
cd/root/unison-2.32.52
##安装依赖性包
[[email protected] unison-2.32.52]#yum -y install ctags-etags
[[email protected] unison-2.32.52]# make UISTYLE=text
##make install会提示错误,
安装报错:
mv /root/bin//unison/tmp/unison-12798
mv: 无法 stat “/root/bin//unison”: 没有那个文件或目录
make: [doinstall] 错误 1 (忽略)
cp unison /root/bin/
cp: 无法创建一般文件“/root/bin/”: 是一个目录
make: *** [doinstall] 错误 1
解决办法:
创建/root/bin文件夹
[[email protected] unison-2.40.63]# mkdir /root/bin
再次执行make install,还是报如下错误:
[[email protected]]# make install
mv /root/bin//unison/tmp/unison-12868
mv: 无法 stat “/root/bin//unison”: 没有那个文件或目录
make: [doinstall] 错误 1 (忽略)
cp unison /root/bin/
cp unison/root/bin/unison-2.40
尝试再次执行make install,就解决了问题:
[[email protected]]# make install
mv /root/bin//unison/tmp/unison-12899
cp unison /root/bin/
cp unison/root/bin/unison-2.40
至此,全部安装完毕
4 配置双机 ssh 信任
##把服务器A生成的公钥传到服务器B上####
[[email protected] ~]# ssh-keygen -t rsa #生成ssh的密钥对
[[email protected] ~]# scp ~/.ssh/id_rsa.pub 192.168.127.130:/root #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[[email protected] ~]# mv id_rsa.pub .ssh/authorized_keys #在服务器B上把服务器A传来的公钥文件改名并存放到ssh目录下
[[email protected] ~]# chmod 600 .ssh/authorized_keys #给公钥文件改权限为600
[[email protected] ~]# service sshd restart #重启sshd服务
##把服务器B生成的公钥传到服务器A上####
[[email protected] ~]# ssh-keygen -t rsa #生成ssh的密钥对
[[email protected] ~]# scp ~/.ssh/id_rsa.pub 172.16.22.1:/root #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[[email protected] ~]# mv id_rsa.pub .ssh/authorized_keys #在服务器A上把服务器B传来的公钥文件改名并存放到ssh目录下
[[email protected] ~]# chmod 600 .ssh/authorized_keys #给公钥文件改权限为600
[[email protected] ~]# service sshd restart #重启sshd服务
5 编写unison同步的脚本进行测试
服务器130脚本:
Vi 130.sh #/bin/bash ipA="192.168.127.129" srcB="/data/nest" dstA="/data/a" /usr/local/inotify/bin/inotifywait -mrq -ecreate,delete,modify,move $srcB | whi le read line; do /root/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
服务器129的脚本
Vi 129.sh #/bin/bash ipB="192.168.127.130" srcA="/data/a/" dstB="/data/nest/" /usr/local/inotify/bin/inotifywait -mrq -ecreate,delete,modify,move $srcA | while read line; do /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
##服务器129测试 ,
Sh –x 129.sh先运行unison同步脚本,查看过程,然后进入同步目录/data/nest,去里面新建文件或者目录,不出意外的话,脚本会有长时间的输出信息,然后你登入130去查看/data/nest这个目录,刚刚129上面的文件都会同步过来
## 服务器130测试
同上
最后我们可以把脚本加入到开机自动项里面,并且后台运行编辑/etc/rc.local
加入 /bin/sh /shell/139.sh &
经测试,如果脚本加入到这个里面,开机自启动,虽然运行了这个脚本,但是文件并不能同步,所以还是要手动执行一次。
目前不知道什么原因,请各位指教!