阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Unison+inotify实现文件双向自动同步

160次阅读
没有评论

共计 2928 个字符,预计需要花费 8 分钟才能阅读完成。

nfs 适合存小图片和小文件,有一个致命的缺点,就是其中一台 web 服务挂掉之后,会直接导致 web 页面无法访问,动态的那种数据,而且数据量很大的数据不适合 nfs

Unison 是一款跨平台(Window,Unix,Linux)的文件同步对象,不仅支撑本地对本地同步,也支持经由过程 SSH、RSH 和 Socket 同步支持双向同步

下载并且编译安装三个软件包。(inotify-tools-3.14.tar.gz、ocaml-3.10.2.tar.gz、unison-2.32.52.tar.gz)

mkdir  /tools

cd /tools

wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.2.tar.gz

wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz

wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar xf inotify-tools-3.14.tar.gz

tar xf ocaml-3.10.2.tar.gz

tar xf unison-2.32.52.tar.gz

cd inotify-tools-3.14

./configure –prefix=/usr/local/inotify && make && make install

echo “PATH=/usr/local/inotify/bin:$PATH” >/etc/profile.d/inotify.sh

source /etc/profile.d/inotify.sh

echo “/usr/local/inotify/lib” >/etc/ld.so.conf.d/inotify.conf(创建库文件)

ldconfig -v | grep inotify    (使系统从新装载一下所有库文件)

ln -sv /usr/local/inotify/include/ /usr/include/inotify(导出头文件)

cd /tools/ocaml-3.10.2

./configure

make world opt

make install

cd /toos/unison-2.32.52

yum -y install ctags-etags

make UISTYLE=text THREADS=true STATIC=true

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

make install

接下来会提示错误

mv /root/bin//unison /tmp/unison-10576

mv: 无法获取 ”/root/bin//unison” 的文件状态 (stat): 没有那个文件或目录

make: [doinstall] 错误 1 (忽略)

cp unison /root/bin/

cp: 无法创建普通文件 ”/root/bin/”: 是一个目录

make: *** [doinstall] 错误 1

上述报错不用管他,接下来使用一条命令就可以:cp unison /usr/local/bin

上述操作在其他要同步的服务器也操作一遍

生成 ssh 秘钥对:ssh-keygen    cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

将文件 id_rsa    id_rsa.pub    authorized_keys  复制到其他主机上的对应目录

也可以使用 ssh-copy-id - i 命令,例如:ssh-copy-id -i ./.ssh/id_rsa.pub root@192.168.238.236

mkdir -p /var/vm1

mkdir -p /var/vm2

vmware1 上

[root@vmware1 ~]# cat unison-A.sh

#!/bin/bash

ipB=”192.168.1.11″

srcA=”/var/vm1″

dstB=”/var/vm2″

/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcA | while read line; do

/usr/local/bin/unison -batch $srcA ssh://$ipB/$dstB

echo -n “$line ” >> /var/log/inotify.log

echo `date | cut -d ” ” -f1-4` >> /var/log/inotify.log

done

[root@vmware1 ~]# chmod o+x unison-A.sh

[root@vmware1 ~]# bash unison-A.sh &

echo “bash /root/unison-A.sh &” >> /etc/rc.local

vmware2 上

[root@vmware2 ~]# cat unison-B.sh

#!/bin/bash

ipA=”192.168.1.12″

srcB=”/var/vm2″

dstA=”/var/vm1″

/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcB | while read line; do

/usr/local/bin/unison -batch $srcB ssh://$ipA/$dstA

echo -n “$line ” >> /var/log/inotify.log

echo `date | cut -d ” ” -f1-4` >> /var/log/inotify.log

done

[root@vmware1 ~]# chmod o+x unison-B.sh

[root@vmware2 ~]# bash unison-B.sh &

echo  “bash /root/unison-B.sh &”  >> /etc/rc.local

如何解决在和远程服务器同步大量数据,上传一部分数据后超时

实际操作中,最好的方法是, 第一次先把要上传的文件打成包,用 ftp 上传,然后展开到服务器中,之后手动执行一次 unison 同步即可

补充:使用自动同步之前最好执行一下手动同步

inotify+rsync 实现实时同步部署  http://www.linuxidc.com/Linux/2016-03/128938.htm 

rsync+inotify 实现实时同步 http://www.linuxidc.com/Linux/2016-01/127803.htm

rsync+inotify 实现数据单向实时同步 http://www.linuxidc.com/Linux/2015-02/114191.htm

再说 rsync+inotify 实现数据的实时备份 http://www.linuxidc.com/Linux/2015-02/112890.htm

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-05/131691.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2928字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中