双向自动文件同步--unison

目的说明:测试两台设备文件之间的同步。

 

设备:虚拟机两台  10.1.1.3910.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.39server

1、安装ocaml

 

  
  
  
  
  1. tar xzvf ocaml-4.00.0.tar.gz 
  2. cd ocaml-4.00.0 
  3. yum install -y gcc gcc++  //我的测试机没有安装gcc,无法编译 
  4. ./configure 
  5. make world.opt 
  6. make install 
  7. cd .. 

2、安装unison

 

  
  
  
  
  1. tar xzvf unison-2.40.63.tar.gz 
  2. cd unison-2.40.63 
  3. yum install emacs emacs-common   //make时出错,提示需要etags 
  4. make UISTYLE=text && make install 
  5. 注:安装完成后会出错,原因是unison想要在/root/bin/目录下创建命令,但系统中没有/root/bin目录。需要手动拷贝命令。操作如下: 
  6. cp unison /usr/local/bin/ 
  7. rsync -av unison [email protected]:///usr/local/bin/ 

 

3、两服务器之间做ssh信任

3.1 10.1.1.39上做如下操作:

 

  
  
  
  
  1. ssh-keygen -t rsa 
  2. rsync -av id_rsa.pub [email protected]:///root/.ssh/id_rsa.pub_39 

3.2 10.1.1.40上做如下操作:

 

  
  
  
  
  1. ssh-keygen -t rsa 
  2. rsync -av id_rsa.pub [email protected]:///root/.ssh/id_rsa.pub_40 
  3. cd /root/.ssh/ 
  4. cat id_rsa.pub_39 > authorized_keys 

3.3 10.1.1.39上做如下操作:


  
  
  
  
  1. cat id_rsa.pub_40 > authorized_keys 

 

4通过配置文件来使用unison

安装完unison之后,默认不会出现配置文件,需要手动执行一下unison命令,才会在/root/.unison/ 目录下出现default.prf (默认配置文件)。

 

  
  
  
  
  1. /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表示同步时使用文件的创建时间来比较两地文件如果这个选项为falseunison则将比较两地文件的内容.建议设置为true

——log = true

——logfile则指定了同时将输出写入log文件

更多参数的详细介绍,请参考unison的使用手册。

/usr/local/bin/unison -help

 

5unison的实时同步设置

参数repeat = 1

意思是说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

你可能感兴趣的:(备份,同步,实时,unison,双向)