使用unison实现文件夹双向同步

在部署双机热备的情况下,要保证两台热备机器上特定目录的文件一致,需要使用文件夹双向同步功能,unison和inotify配合使用,可以实现此效果。

 

操作系统 CentOS6.4 64位

两台机器地址分别为192.168.2.20 和 192.168.2.71


1、下载unison安装包
http://www.seas.upenn.edu/~bcpierce/unison//download.html


2、下载unison编译器
http://caml.inria.fr/pub/distrib/ocaml-4.02/


3、安装编译器
./configure
make world opt
make install


4、安装unison
make UISTYLE=text
make install


在执行make install的过程中,可能会出现以下错误提示:
mv: cannot stat '/root/bin//unison': No such file or directory
make: [doinstall] Error 1 (ignored)
cp unison /root/bin/
cp: cannot create regular file '/root/bin/': Is a directory
make: *** [doinstall] Error 1


出现错误的原因在与Unison默认是将文件Copy到/root/bin目录,但Linux默认是没有该目录的,因此我们需要将生成的可执行文件unison复制到系统的PATH目录。
cp unison /usr/local/bin
注意:如果unsion不是安装到/usr/bin目录,那么就要将软连接建立到/usr/bin目录,或者将安装的/usr/local/bin目录加到PATH路径,否则同步会报错bash: unison: command not found

5、配置ssh key信任
建议通过普通用户进行操作,理由是通过root操作本身就危险,免密码登陆的root就更危险了。
创建unison普通用户

在192.168.2.20上执行以下命令
[unison@localhost ~]$ ssh-keygen -t rsa
在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;
在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。
之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/unison/.ssh/目录下。


[unison@localhost ~]$ scp .ssh/id_rsa.pub unison@192.168.2.71:/home/unison/ 将公钥拷贝到另外一台机器上


然后在另外一台192.168.2.71机器上执行以下命令
[unison@localhost ~]$ mv id_rsa.pub .ssh/authorized_keys
以root用户重启sshd
[root@localhost ~]# /etc/init.d/sshd restart


192.168.2.20上测试是否配置成功
[unison@localhost ~]$ ssh 192.168.2.71 date 如果不用输入密码直接登录,就说明配置成功


用同样的方式,在192.168.2.71上完成配置


6、修改unison配置
[unison@localhost ~]$ vi .unison/default.prf 




# Unison preferences file
#
#

#root指定的路径,必须对unison用户开放写权限
root=/home/unison/test

#如果ssh端口不是默认22,就是ip后面加上
root=ssh://unison@192.168.2.71:8022//home/unison/test
batch=true
fastcheck=true
logfile=/home/unison/.unison/unison.log

#true表示当需要同步的两个目录一个为空时,unison将停止 false表示同步的某个目录为空时不会停止运转
confirmbigdel=false

#path可以指定需要检查的路径,或者指定某个文件,可以写多个

path=map

path=1.xml


repeat=1 #一秒执行一次检查
#owner=true #保持同步过来的文件属主
#group=true #保持同步过来的文件组信息


注意,owner和group为true的情况下,非unison用户创建的文件同步失败,因为同步过了之后,执行chown会提示无权限 
如果要保持属主和组一致,就要用root账户来执行同步


7、设置成开机启动
以root用户将 su - unison -c unison 写入rc.local   




这时,通过repeat来重复检查,如果目录下文件太多的话,会导致unison资源占用太多,
设置repeat=0,使用inotify配合使用,可以在文件发生增删改的情况下,启动unison,执行一次同步


8、inotify安装
下载源码 https://sourceforge.net/projects/inotify-tools/files/inotify-tools/
[root@localhost unison]# tar xfv inotify-tools-3.13.tar.gz
[root@localhost inotify-tools-3.13]# ./configure 
[root@localhost inotify-tools-3.13]# make
[root@localhost inotify-tools-3.13]# make install


9、编写inotify执行脚本
[root@localhost unison]# vi notify.sh


LOG=/home/unison/inotify.log
inotifywait -mrq -e create,delete,modify,move /home/unison/test | while read line; do
        unison
        echo -n "$line  " >> $LOG
        echo `date | cut -d " " -f1-4` >> $LOG
done


此处inotifywait -mrq -e create,delete,modify,move表示要监测create,delete,modify,move四类文件操作,可以根据需要配置监测的操作
注意,首先要将unison的配置文件里面的repeat设置为0或者注释掉,这样unison只执行一次就退出了。


10、将inotify脚本添加到开机启动
nohup su - unison -c /home/unison/notify.sh &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值