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
[iyunv@jie1 ~]# cd inotify-tools-3.14
[iyunv@jie1 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify&& make && make install
[iyunv@jie1 inotify-tools-3.14]# cd /usr/local/inotify/
##修改PATH环境变量
[iyunv@jie1 inotify]# echo "PATH=/usr/local/inotify/bin:$PATH">/etc/profile.d/inotify.sh
[iyunv@jie1 inotify]# source /etc/profile.d/inotify.sh
##添加库文件到系统识别的路径
[iyunv@jie1 inotify]# echo "/usr/local/inotify/lib">/etc/ld.so.conf.d/inotify.conf
[iyunv@jie1 inotify]# ldconfig -v | grep inotify
/usr/local/inotify/lib:
libinotifytools.so.0 -> libinotifytools.so.0.4.1
##链接库文件到系统识别的路径
[iyunv@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
##安装依赖性包
[iyunv@jie1 unison-2.32.52]#yum -y install ctags-etags
[iyunv@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文件夹 [iyunv@www unison-2.40.63]# mkdir /root/bin
再次执行make install,还是报如下错误: [root@wwwunison-2.40.63]# 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,就解决了问题: [root@wwwunison-2.40.63]# make install mv /root/bin//unison/tmp/unison-12899 cp unison /root/bin/ cp unison/root/bin/unison-2.40 至此,全部安装完毕
4 配置双机 ssh 信任##把服务器A生成的公钥传到服务器B上####
[iyunv@jie1 ~]# ssh-keygen -t rsa #生成ssh的密钥对
[iyunv@jie1 ~]# scp ~/.ssh/id_rsa.pub 192.168.127.130:/root #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[iyunv@jie3 ~]# mv id_rsa.pub .ssh/authorized_keys #在服务器B上把服务器A传来的公钥文件改名并存放到ssh目录下
[iyunv@jie3 ~]# chmod 600 .ssh/authorized_keys #给公钥文件改权限为600
[iyunv@jie1 ~]# service sshd restart #重启sshd服务
##把服务器B生成的公钥传到服务器A上####
[iyunv@jie3 ~]# ssh-keygen -t rsa #生成ssh的密钥对
[iyunv@jie3 ~]# scp ~/.ssh/id_rsa.pub 172.16.22.1:/root #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[iyunv@jie1 ~]# mv id_rsa.pub .ssh/authorized_keys #在服务器A上把服务器B传来的公钥文件改名并存放到ssh目录下
[iyunv@jie1 ~]# chmod 600 .ssh/authorized_keys #给公钥文件改权限为600
[iyunv@jie3 ~]# service sshd restart #重启sshd服务5 编写unison同步的脚本进行测试服务器130脚本:
1
2
3
4
5
6
7
8
9
10
| 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的脚本
1
2
3
4
5
6
7
8
9
10
| 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 &
经测试,如果脚本加入到这个里面,开机自启动,虽然运行了这个脚本,但是文件并不能同步,所以还是要手动执行一次。
目前不知道什么原因,请各位指教!
|