一.编译安装unison
unison各版本下载地址 http://www.seas.upenn.edu/~bcpierce/unison//download.html
unison编译器下载地址 http://caml.inria.fr/pub/distrib (版本至少3.0.7)
1.环境说明 (在其他地方部署时修改下IP与同步目录即可)
host1 192.168.42.241 同步目录 /root/test
host2 192.168.42.243 同步目录 /root/test
2. 安装Objective Caml compiler(若安装的unison的是二进制程序,则不用安装。因二进制程序版本都太老,这里选择编译安装)
[root@241 ~]# cd /usr/src/
[root@241 src]# wget http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.0.tar.gz
[root@241 src]# tar xf ocaml-3.12.1+rc1.tar.gz
[root@241 src]# tar xf ocaml-3.12.0.tar.gz
[root@241 src]# cd ocaml-3.12.0
[root@241 ocaml-3.12.0]# ./configure
[root@241 ocaml-3.12.0]# make world opt
[root@241 ocaml-3.12.0]# make install
3.编译安装Unison
[root@241 ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.102.tar.gz
[root@241 src]# tar xf unison-2.40.102.tar.gz
[root@241 src]# cd unison-2.40.102
[root@241 unison-2.40.102]# make UISTYLE=text THREADS=true STATIC=true
[root@241 unison-2.40.102]# cp unison /usr/local/bin/ #将生成的二进制程序复杂到系统的PATH路径里
[root@241 unison-2.40.102]# scp unison [email protected]:/usr/local/bin/unison #将unison二进制程序复制到host2
二.配置双机ssh信任
[root@241 ~]# ssh-keygen
[root@243 ~]# ssh-keygen
[root@243 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[root@241 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
三.unison配置
1.编辑unison配置文件
[root@241 ~]# vim .unison/default.prf
# Unison preferences file
#root = /root/test #两个root表示要同步的文件夹(下面的同步脚本定义了同步目录,所以这里注释掉,否则会冲突)
#root = ssh://192.168.42.243//root/test
#path = /root/test #两个path表示只同步指定的子目录及文件,而非整个目录
#path = /root/test
#ingnore = PATH test/txt #ingnore = Path 表示忽略/root/test 下面的test/txt
batch = true #表示全自动模式,接受默认动作
#maxthreads = 300
#repeat = 1
#retry = 3
owner = true #owner group perms表示保持原来的属主 属组 权限
group = true
perms = -1
fastcheck = true #true表示同步时通过文件的创建时间来比较两地文件 false表示比较两地文件的内容
rsync = false
#debug = verbose
sshargs = -C #表示使用ssh的压缩方式传输
xferbycopying = true
confirmbigdel = false #true表示当需要同步的两个目录一个为空时,unison将停止 false表示同步的某个目录为空时不会停止运转
log = true
logfile = /root/.unison/unison.log
#host2 配置文件一样
四.安装inotify
1.查看系统是否支持inotify
[root@241 ~]# ls -l /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Nov 11 11:25 max_queued_events
-rw-r--r-- 1 root root 0 Nov 11 11:25 max_user_instances
-rw-r--r-- 1 root root 0 Nov 11 11:25 max_user_watches
2.安装inotify
[root@241 src]# tar xf inotify-tools-3.14.tar.gz
[root@241 src]# cd inotify-tools-3.14
[root@241 inotify-tools-3.14]# ./configure
[root@241 inotify-tools-3.14]# make && make install
echo 30000000 > /proc/sys/fs/inotify/max_user_watches (注意:重启机器后此设置会消失,如果监控的文件数目不是特别多,可以不设置)
3.编写inotify实时监控脚本
[root@241 ~]# vim unison.sh
#!/bin/bash
DESTHOST=192.168.42.243
DESTHOSTDIR=/root/test
SRCDIR=/root/test
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e create,delete,modify,move $SRCDIR | while read line; do
/usr/local/bin/unison $SRCDIR ssh://$DESTHOST/$DESTHOSTDIR
done
chmod +x unison.sh
4.按同样方法在host2安装inotify和编写同步脚本
5.分别在host1 host2 让脚本运行于后台
[root@241 ~]# nohup ./unison.sh &
[root@243 ~]# nohup ./unison.sh &