Unison+inotify实现数据实时双向同步

1.Unison简介

Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:

※跨平台使用;

※对内核和用户权限没有特别要求;

※Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;-

※只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。

 

2.配置双机SSH互信(步骤略)

A:192.168.24.137 同步目录:/data/wwwroot

B:192.168.24.138 同步目录:/data/checkout

 

3.在A,B上均安装unison所需的工具包

tar zxf ocaml-3.10.2.tar.gz

cd ocaml-3.10.2

./configure

make world opt

make install

tar zxf unison-2.32.52.tar.gz

cd unison-2.32.52

make UISTYLE=text THREADS=true STATIC=true

cp unison /usr/local/bin/

 

4.写A的unison配置文件

vim .unison/default.prf

# Unison preferences file

root = /data/wwwroot            #本地同步目录

root = ssh://[email protected]//data/checkout #远程同步目录

ignore = Path aa   #同步时排除aa

batch = true     #全自动模式,接受并执行默认动作

maxthreads = 300 #同步最大线程数

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

group = true   #保持同步文件的属组信息

perms = -1    #保持同步文件的读写信息 

fastcheck = false   #表示按时间戳来同步

rsync = false   #不使用rsync

sshargs = -C   #同步时使用ssh压缩传输

xferbycopying = true #优化传输

confirmbigdel =false  #设置当某个目录为空时,unison不会停止运作

log = true  #在终端显示同步过程

logfile = /root/.unison/data.log   #记录日志

 

执行unison调用default.prf

 

5.写B的unison配置文件

vim .unison/default.prf

root = /data/checkout

root = ssh://[email protected]//data/wwwroot

batch = true

maxthreads = 300

owner = true

group = true 

perms = -1

fastcheck = false

rsync = false

sshargs = -C

xferbycopying = true 

confirmbigdel =false

log = true

logfile = /root/.unison/data.log 

 

执行unison调用default.prf

 

6.使用inotify-tools配合unison做双向实时同步

 

在A,B上:

tar zxf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure && make && make install

 

A脚本

vim inotify.sh

#!/bin/bash

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f

%e' -e modify,delete,create,attrib /data/wwwroot | while read files

do

/usr/local/bin/unison

echo "${files} was unisoned" >> /tmp/unison.log 2>&1

 

chmod +x inotify.sh

./inotify.sh

echo "source inotify.sh" >> /etc/rc.local

 

B脚本

vim inotify.sh

#!/bin/bash

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f

%e' -e modify,delete,create,attrib /data/checkout | while read files

do

/usr/local/bin/unison

echo "${files} was unisoned" >> /tmp/unison.log 2>&1

 

chmod +x inotify.sh

./inotify.sh

echo "source inotify.sh" >> /etc/rc.local

 

6.测试(略)

你可能感兴趣的:(unison+inotify)