目的说明:测试两台设备文件之间的同步。
设备:虚拟机两台 10.1.1.39、10.1.1.40。
系统:CentOS release 5.6 (Final)
软件:
ocaml-4.00.0
下载链接:
http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.0.tar.gz
unison-2.40.63
下载链接:
http://http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.63.tar.gz
安装过程:
只需要在其中一台主机安装unison server端即可,以10.1.1.39为server端。
1、安装ocaml
- tar xzvf ocaml-4.00.0.tar.gz
- cd ocaml-4.00.0
- yum install -y gcc gcc++ //我的测试机没有安装gcc,无法编译
- ./configure
- make world.opt
- make install
- cd ..
2、安装unison
- tar xzvf unison-2.40.63.tar.gz
- cd unison-2.40.63
- yum install emacs emacs-common //make时出错,提示需要etags
- make UISTYLE=text && make install
- 注:安装完成后会出错,原因是unison想要在/root/bin/目录下创建命令,但系统中没有/root/bin目录。需要手动拷贝命令。操作如下:
- cp unison /usr/local/bin/
- rsync -av unison [email protected]:///usr/local/bin/
3、两服务器之间做ssh信任
3.1 在10.1.1.39上做如下操作:
- ssh-keygen -t rsa
- rsync -av id_rsa.pub [email protected]:///root/.ssh/id_rsa.pub_39
3.2 在10.1.1.40上做如下操作:
- ssh-keygen -t rsa
- rsync -av id_rsa.pub [email protected]:///root/.ssh/id_rsa.pub_40
- cd /root/.ssh/
- cat id_rsa.pub_39 > authorized_keys
3.3 在10.1.1.39上做如下操作:
- cat id_rsa.pub_40 > authorized_keys
4、通过配置文件来使用unison
安装完unison之后,默认不会出现配置文件,需要手动执行一下unison命令,才会在/root/.unison/ 目录下出现default.prf (默认配置文件)。
- /usr/local/bin/unison /var/www/html/ ssh://[email protected]//var/www/html/
配置文件内容如下(根据个人需求选择相应参数):
# Unison preferences file
root = /var/www/html
root = ssh://[email protected]//var/www/html
batch = true
owner = true
group = true
perms = -1
repeat = 1
#retry = 3
fastcheck=false
rsync =false
sshargs = -C
xferbycopying = true
confirmbigdel = false
log = true
logfile = /var/log/unison.log
——root表示需要同步的目录;
——force表示使用unison单项同步功能,注释掉以便启用双向同步;
——ignore = Path表示同步/mnt目录时不同步tmp;
——batch = true,表示全自动模式,接受缺省动作;
——fastcheck = true,表示同步时使用文件的创建时间来比较两地文件,如果这个选项为false,unison则将比较两地文件的内容.建议设置为true;
——log = true ;
——logfile则指定了同时将输出写入log文件。
更多参数的详细介绍,请参考unison的使用手册。
/usr/local/bin/unison -help
5、unison的实时同步设置
参数:repeat = 1
意思是说1秒后检查并同步。这个参数基本上能满足我所需要的实时性要求。所以我将此参数添加到了配置文件中。
执行下面的命令:
- /usr/local/bin/unison > /dev/null 2>&1 &
至此,测试基本完成。
未解决的问题:
当要同步的文件有冲突时,unison会跳过有冲突的文件。冲突问题的解决我想到了定期用rsync做同步来使文件保持一致。但随之未来的问题是:保留两端的哪个文件版本,即哪方作为rsync同步源的问题还没想到解决办法。目前的思路是:unison或者rsync同步时能不能以修改时间为判断依据(不考虑两个系统时间不一样的情况),将修改时间晚的作为新版本,覆盖掉修改时间早的旧版本。请浏览到此文章的朋友帮忙解惑。
参考资料:
http://www.cis.upenn.edu/~bcpierce/unison/
http://baiying.blog.51cto.com/1068039/819451