软件包的下载地址: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

##编译安装ocamlunison依赖于ocaml

解压 tar zvxf ocaml-3.10.2.tar.gz  

cd/root/ocaml-3.10.2
./configure
make world opt
make install

 

##编译安装inotify
[root@jie1 ~]# cd inotify-tools-3.14
[root@jie1 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify&& make && make install
[root@jie1 inotify-tools-3.14]# cd /usr/local/inotify/
##修改PATH环境变量
[root@jie1 inotify]# echo "PATH=/usr/local/inotify/bin:$PATH">/etc/profile.d/inotify.sh
[root@jie1 inotify]# source /etc/profile.d/inotify.sh
##添加库文件到系统识别的路径
[root@jie1 inotify]# echo "/usr/local/inotify/lib">/etc/ld.so.conf.d/inotify.conf
[root@jie1 inotify]# ldconfig -v | grep inotify
/usr/local/inotify/lib:
    libinotifytools.so.0 -> libinotifytools.so.0.4.1
##链接库文件到系统识别的路径
[root@jie1 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
##安装依赖性包
[root@jie1 unison-2.32.52]#yum -y install ctags-etags
[root@jie1 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文件夹

[root@www 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上####
[root@jie1 ~]# ssh-keygen -t rsa   #
生成ssh的密钥对
[root@jie1 ~]# scp ~/.ssh/id_rsa.pub  192.168.127.130:/root  #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[root@jie3 ~]# mv id_rsa.pub .ssh/authorized_keys  #在服务器B上把服务器A传来的公钥文件改名并存放到ssh目录下
[root@jie3 ~]# chmod 600 .ssh/authorized_keys  #给公钥文件改权限为600
[root@jie1 ~]# service sshd restart  #重启sshd服务


##
把服务器B生成的公钥传到服务器A上####
[root@jie3 ~]# ssh-keygen -t rsa   #
生成ssh的密钥对
[root@jie3 ~]# scp ~/.ssh/id_rsa.pub  172.16.22.1:/root  #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[root@jie1 ~]# mv id_rsa.pub .ssh/authorized_keys  #在服务器A上把服务器B传来的公钥文件改名并存放到ssh目录下
[root@jie1 ~]# chmod 600 .ssh/authorized_keys  #给公钥文件改权限为600
[root@jie3 ~]# 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  &

经测试,如果脚本加入到这个里面,开机自启动,虽然运行了这个脚本,但是文件并不能同步,所以还是要手动执行一次。

目前不知道什么原因,请各位指教!