首页 > 代码库 > unison实现数据双向同步

unison实现数据双向同步

unison简介:双向同步镜像工具,支持跨平台同步。unios可以史本地磁盘的两个文件夹保持内容一致,也支持网络数据的同步

特点:跨平台

    1.对内核和用户权限无特别要求

    2.unison是双向的,能自动更新两份副本中没有冲突的部分

    3.两种方法,一种是远程shell方式,由ssh完成

              另一种是socket方式,由发送tcp包通信

    4.支持增量同步

操作系统:RHEL6.2

A系统IP:192.168.5.205

B系统IP:192.168.5.206

A系统里目录/ixdba/webdata 实时同步到B系统/ixdba/webdata

  1. 在A系统安装ocaml和unison

    1)安装ocaml    下载地址:http://pan.baidu.com/s/1dDGNZ25

    [root@A ~]# tar jxvf ocaml-3.10.2.tar.bz2
    [root@A ~]# cd ocaml-3.10.2
    [root@A ocaml-3.10.2]# make world opt

    [root@A ocaml-3.10.2]# makeinstall

    2)安装unison 下载地址:http://pan.baidu.com/s/1o6hZJr8

    [root@A ~]# tar zxvf unison-2.32.52.tar.gz 

    [root@A ~]# cd unison-2.32.52
    [root@A unison-2.32.52]# make UISTYLE=text THREADS=true STATIC=true

注:UISTYLE=text THREADS=true STATIC=true 表示使用命令行方式,加入线程支持,以静态模式编译

    [root@A unison-2.32.52]# cp unison /usr/local/bin/

注:在B系统里也要装ocaml和unison,步骤与上面一样

2.配置A系统和B系统ssh信任

以下操作要在A系统和B系统都执行一遍,这里以A系统为例

1)以root用户登录

2)在root用户的主目录内创建 .ssh目录并设置正确的权限

[root@A ~]# mkdir /root/.ssh

[root@A ~]# chmod 700 /root/.ssh

3)使用ssh-keygen命令生成第2版的SSH协议的RSA密钥

[root@A ~]# ssh-keygen -t rsa

3.添加密钥到授权密钥文件中,在A系统中执行以下命令

1)

[root@A ~]# cd /root/.ssh/
[root@A .ssh]# ssh 192.168.5.205 cat /root/.ssh/id_rsa.pub >>authorized_keys
[root@A .ssh]# ssh 192.168.5.206 cat /root/.ssh/id_rsa.pub >>authorized_keys 

[root@A .ssh]# scp authorized_keys 192.168.5.206:root/.ssh

[root@A .ssh]# chmod 600 /root/.ssh/authorized_keys 

2)在B系统执行如下命令

[root@B ~]# chmod 600 /root/.ssh/authorized_keys 

3)分别在两台机器上执行如下测试,第一次执行时,会要求输入密码信息,再次执行时,不需要输入密码就能显示系统日期,说明ssh互相信任配置成功

[root@A .ssh]# ssh 192.168.5.205 date
Wed Sep 24 17:23:50 HKT 2014
[root@A .ssh]# ssh 192.168.5.206 date
Wed Sep 24 17:24:50 CST 2014

[root@B ~]# ssh 192.168.5.206 date
Wed Sep 24 17:25:20 CST 2014
[root@B ~]# ssh 192.168.5.205 date
Wed Sep 24 17:24:37 HKT 2014

4)测试

[root@A .ssh]# unison / ssh://192.168.5.206/ -testserver
Contacting server...
Connected [//A//test -> //B//root]

4.通过命令远程使用unison

如:

unison /test ssh://root@192.168.5.206//test

表示将本机的/test 和远程主机的/test 同步 ,注意需要交互 输入回车,输入y确认

5.通过配置文件来使用unsion

在A系统操作

1) /root/.unison 用于保存unison的配置文件,如果是root用户,则位于/root/.unison

在/root/.unison目录下,如果不指定配置文件的名称,则默认是default.prf

创建/root/.unison/ixdba.prf

[root@A ~]# vim /root/.unison/ixdba.prf
 1 root =  /ixdba/webdata      #表示本机要同步的目录

 2 root = ssh://root@192.168.5.206//ixdba/webdata2  #表示B系统要同步的目录
 3 #force = /ixdba/webdata   #force如果不注释表示unison就变成单向同步了

 4 path=www
 5 path=upload
 6 ignore = Path WEB-INF/tmp #忽略/ixdba/webdata/WEB-INF/tmp 目录,即同步时不同步这个目录

 7 #prefer = ssh://root@192.168.5.206//ixdba/webdata
 8 batch = true              #表示 全自动模式,不用交互输入 回车 和y确认

 9 maxthreads = 300          #同步时的最大线程

 10 repeat = 1              #  表示间隔一秒后开始新的同步检查,1秒实时同步 - -

 11 #retry =3                 #指定失败的重试次数

 12 owner = true                #表示保持同步的文件属主信息

 13 group = true
 14 perms = -1              #  表示同步过程中保持同步文件的读写权限
 15 fastcheck = true      #true表示同步时通过文件的创建时间比较两地文件
                             false表示比较两地文件的内容,建议设置为true

 16 rsync =false          #不激活rsync传输模式
 17 #debug=verbose       
 18 sshargs =-C           #表示使用ssh的压缩传输方式
 19 xferbycopying =true   #优化传输参数
 20 confirmbigdel=false     #保证当需要同步的某个目录为空时,unison不会停止运转
 21 log=true                #表示在终端输出运行信息
 22 logfile=/root/.unison/ixdba_10.10.log   #记录日志

注:

4  5   指定/ixdba/webdata/www 和 /ixdba/webdata/upload 需要同步,/ixdba/webdata 下的其他目录不同步  

5.测试,在A系统执行,查看B系统 /ixdba/webdata 是否有A系统的同步数据

修改B系统/ixdba/webdata的数据,再在A系统执行uniosn ixdba,看A系统/ixdba/webdata 是否一致

[root@A ~]# unison ixdba

6.总结 unison双向同步的基本原理:A将改动的同步到B,B将改动的同步到A,最后A、B的内容都相同



本文出自 “梦三国” 博客,谢绝转载!

unison实现数据双向同步