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.测试(略)