unison + inotify文件双向实时同步


unison+inotify实现文件数据双向实时同步

Unison是一款跨平台的文件同步工具,不仅支持本地对本地同步,

也支持通过SSH、RSH和Socket等网络协议进行同步。更棒的是,

Unison支持双向同步操作,你既可以从A同步到B,也可以从B同步到A,这些都不需要额外的设定。

系统:CentOS7.4 两台

server1:192.168.10.10

server2:192.168.10.11

一.安装Objective Caml compiler

Objective Caml compiler (version 3.11.2 or later) 官网地址:http://caml.inria.fr/

cd /opt

wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz

tar -zxvf ocaml-4.03.0.tar.gz

cd ocaml-4.03.0

./configure

make configure

make world opt

make install

二.安装unison

如果需要单向同步到远程目录,则远程机器也需要安装unison。

(例如只需要A机器远程实时同步文件到B机器,B不需同步到A。则两台机器都需要安装unison.)

yum -y install ctags-etags  # 缺少此安装包时下面make步骤会报错

cd /opt

wgethttp://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz

mkdir unison-2.48.4 && cd unison-2.48.4

tar -zxvf /opt/unison-2.48.4.tar.gz

cd src

make UISTYLE=text THREADS=true

cp unison /usr/local/bin/

unison -version  # 有版本信息出现,则安装成功

三.安装inotify

inotify官方地址:https://en.wikipedia.org/wiki/Inotify

yum -y install inotify-tools (yum源安装)

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

tar xvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure

make

make install

四.双机ssh信任

server1上执行

ssh-keygen -t rsa 一直打回车就行了

ssh-copy-id root@192.168.10.11 #回车输入11的密码

server2上执行

ssh-keygen -t rsa 一直打回车就行了

ssh-copy-id root@192.168.10.10 #回车输入10的密码

#注 !如果非22端口,如2222端口,如下:

ssh-keygen -t rsa 一直打回车

ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 2222 root@192.168.10.11"

五.unison的使用

unison的用法非常灵活和简单,可以通过如下三种方式调用unison。 

第一种方式:”unison profile_name [options]” 

unison默认会读取~/.unison目录下的配置文件”default.prf”

第二种方式:”unison profile root1 root2 [options]”

root1、root2分别表示要执行同步的两个路径。这两个路径可以是本地目录路径,也可以是远程服务器的路径,如ssh://username@//tmp/test 。由于同步的路径已经在命令行指定了,所以这里无需在profile.prf配置文件中进行root指令的相关设置。

第三种方式:”unison root1 root2 [options]”

这种方式相当于执行”unison default root1 root2”命令,即unison默认读取default.prf的配置。

六.配置双机文件目录同步(如需单向同步则只需要配置server端)

unison默认读取/root/.unison/default.prf的配置.但是安装完成后默认不会创建这个文件.需要手动创建

mkdir -p /root/.unison/

vim /root/.unison/default.prf

配置文件如下:

#Unison preferences file

root = /data/share/

root = ssh://root@192.168.10.11//data/share/

#force =

#ignore =

batch = true

maxthreads = 300

#repeat = 1

#retry = 3

owner = true

group = true

perms = -1

fastcheck = false

rsync = false

sshargs = -C

xferbycopying = true

log = true

logfile = /root/.unison/unison.log

七.创建同步脚本

mkdir -p /opt/script

cd /opt/script

vim inotify-unison.sh

#!/bin/bash

##########################################

/usr/bin/inotifywait -mrq  /data/share/ --format "%w%f"  -e create|while read line

  do

    echo `date +%F' '%T'  '%A`

/usr/local/bin/unison

    echo -e ' \n \n '

done

#保存脚本文件

chmod +xinotify-unison.sh

八.编写脚本启动停止服务

vim /etc/init.d/unison_inotify #以下为脚本内容

#!/bin/bash

# intofitywait watch /data/share/

# unison ---  sync from /data/share to //remote//data/share

. /etc/rc.d/init.d/functions

use_username=root

log_path=/$use_username/.unison/unison-diy.log

procID=`ps aux |grep inotify-unison.sh |grep -v grep|awk '{print $2}'`start() {

        echo -n $"Starting unison_inotify... "

        su - $use_username -c "nohup  /script/inotify-unison.sh  >>$log_path 2>&1 &"

    RETVAL=$?

        [ $RETVAL = 0 ] && action

}

stop() {

    #echo  $"Stopping unison_inotify ... "

    kill $procID  >/dev/null 2>&1

    RETVAL=$?

    [ $RETVAL = 0 ] && echo  "Stopping unison_inotify...  `action`" || echo 'unison_inotify(PID) is not run'

}

status() {

    check_proc=`ps aux |grep inotify-unison.sh |grep -v grep|awk '{print $2}'|wc -l`   

    if [ $check_proc -ne 0 ]

      then

      echo 'unison_inotify is running'

    else

      echo 'unison_inotify is not run'

    fi

}

case "$1" in

  start)

    start

    ;;

  stop)

    stop

    ;;

  status)

    status

    ;;

  restart)

    stop

    start

    ;;

  *)

    echo $"Usage: $prog {start|stop|status}"

    RETVAL=2

esac

exit $RETVAL

#保存文件

chmod +x/etc/init.d/unison_inotify

启动|关闭|状态|重启脚本文件

/etc/init.d/unison_inotify start|stop|status|restart

9.inotify优缺点

优点:   监控文件系统事件变化, 通过同步工具实现实时数据同步.

缺点:    并发如果大于200个文件 ( 10-100K ), 同步就会有延迟.

10.注意事项

如果inotify监控文件过大(T级别文件)需要配置

查看系统默认参数值

sysctl -a | grep max_queued_events

结果是:fs.inotify.max_queued_events = 16384

sysctl -a | grep max_user_watches

结果是:fs.inotify.max_user_watches = 8192

sysctl -a | grep max_user_instances

结果是:fs.inotify.max_user_instances = 128

修改参数:

vim /etc/sysctl.conf #添加以下代码

fs.inotify.max_queued_events=99999999

fs.inotify.max_user_watches=99999999

fs.inotify.max_user_instances=65535

:wq! #保存退出

sysctl -p #生效

参数说明:

max_queued_events #inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确

max_user_watches #要同步的文件包含多少目录,可以用:find /data -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/data为同步文件目录)

max_user_instances #每个用户创建inotify实例最大值.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容