unison是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过SSH、RSH和Socket等网络协议进行同步。更棒的是,unison支持双向同步操作,你既可以从A同步到B,也可以从B同步到A,这些都不需要额外的设定。

inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。

使用 inotify很简单:创建一个文件描述符,附加一个或多个监视器(一个监视器 是一个路径和一组事件),然后使用 read 方法从描述符获取事件。read 并不会用光整个周期,它在事件发生之前是被阻塞的。

环境介绍

服务器分别为:

服务器node1:192.168.5.10,同步目录:/opt/http/
服务器node2:192.168.5.20,同步目录:/opt/http/

配置epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

1、在node1和 node2上安装一下软件

(1)安装ocaml

[root@node1 ~]# yum install  ocaml -y

(2)安装unison

[root@node1 ~]# yum install  unison240.x86_64 -y

(3)安装inotify

[root@node1 ~]# yum install  inotify-tools.x86_64 -y

2、配置双机ssh信任

详细请参考 https://www.cnblogs.com/Sunzz/p/8320330.html

(1)在node1机root用户下执行ssh-keygen命令,在需要输入的地方,直接回车,生成建立安全信任关系的证书。

[root@node1 ~]# ssh-keygen -t rsa

node1对node2建立信任关系

[root@node1 ~]# chmod 600 /root/.ssh/authorized_keys
[root@node1 ~]# scp -r /root/.ssh/id_rsa.pub 192.168.5.20:/root/.ssh/authorized_keys

(2)node2对node1建立信任关系

在node2机上执行同样的操作,建立node2对node1的信任关系。

(3)远程执行命令测试是否成功,第一次有可能要输入密码

命令格式:ssh 远程用户名@远程主机IP地址 '远程命令或者脚本'

[root@node2 ~]# ssh root@192.168.5.10 'hostname'

3、添加脚本

(1)在192.168.5.10服务器node1上添加脚本:

[root@node1 ~]# mkdir /script
[root@node2 ~]# vim /script/inotify.sh
#/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
thenip2="192.168.5.20" ##目标主机IPsrc2="/opt/http/"dst2="/opt/http/"/usr/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do/usr/bin/unison -batch $src2 ssh://$ip2/$dst2echo -n "$line " >> /var/log/inotify/inotify$(date +%u).logecho ` date +%F %T " " -f1-4` >> /var/log/inotify/inotify$(date +%u).log
done
fi

(2)在192.168.5.20服务器node2上添加脚本:

[root@node2 ~]# mkdir /script
[root@node2 ~]# vim /script/inotify.sh
#/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
thenip2="192.168.5.10"src2="/opt/http/"dst2="/opt/http/"/usr/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do/usr/bin/unison -batch $src2 ssh://$ip2/$dst2echo -n "$line " >> /var/log/inotify/inotify$(date +%u).logecho ` date +%F %T " " -f1-4` >> /var/log/inotify/inotify$(date +%u).log
done
fi

4、在二台服务器上修改脚本权限:

[root@node1 ~]# chmod a+x /script/inotify.sh

5、建立日志目录

如果/var/log/inotify目录没有则需要手工创建,用来存放inotify的日志;

[root@node2 ~]# mkdir /var/log/inotify

6、添加定时任务

[root@node2 ~]# crontab -e
* * * * * /bin/bash /script/inotify.sh > /dev/null 2>&1 &

重启电脑,测试二台服务器中/opt/http/的内容是否能同步

不重启电脑,手动执行脚本也可以测试

/bin/bash /script/inotify.sh或/script/inotify.sh

在其中一台/opt/http/目录中添加,或修改,或删除文件的时候,可以看到脚本状态,同时另一台服务器也应该会跟随操作。

7、如果需要可以指定某几种后缀的文件不同步

打开/root/.unison/default.prf,添加:

ignore = Name *.txt
ignore = Name *.mdb

意思就是不同步txt和mdb格式的文件,修改完之后重新执行一下/bin/sh /script/inotify.sh即可生效。

我的是直接指定名称:

ignore = Name .bash_profile
ignore = Name .viminfo
ignore = Name .bash_history

以上步骤操作完成基本上都不会有问题,如果有问题那你接着往下看。

8、如果有问题,请手动修改下脚本:

在某些公司中,是禁止禁用root远程登陆,只能使用普通用户进行同步方案

等待同步目录(二台电脑不能使用一样的待同步目录名,否则报错)

192.168.5.10: /opt/http/
192.168.5.20: /opt/http/

安装过程如下

useradd –g apache unison
passwd unison
(输入新密码)
chown –R unison. /opt/http/
mkdir /home/unison/.ssh
chmod 700  /home/unison/.ssh
su – unison
ssh-keygen -t rsa
(然后连续三次回车)
添加密钥到授权密钥文件中

在192.168.5.10服务器node1上操作(22是端口号)

cd /home/unison/.ssh
ssh "-p 22" 192.168.5.10 cat /home/unison/.ssh/id_rsa.pub >> authorized_keys  #小写p
ssh "-p 22" 192.168.5.20 cat /home/unison /.ssh/id_rsa.pub >> authorized_keys
scp  -P 22 authorized_keys 192.168.5.20:/home/unison/.ssh/  #大写P
chmod 600  /home/unison/.ssh/authorized_keys

在192.168.5.20服务器B上操作

chmod 600 /home/unison/.ssh/authorized_keys

分别在两台机器上执行如下测试(第一次执行时,会要求输入密码,以后执行则不需要说明信任成功)

ssh -p 22 unison@192.168.5.10 date
ssh -p 22 unison@192.168.5.20 date
su - root

node1脚本

 #/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
then
ip2="unison@192.168.5.20:22"
src2="/opt/http/"
dst2="/opt/http/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do
/usr/local/bin/unison -batch -sshargs "-i /home/unison/.ssh/id_rsa" $src2 ssh://$ip2
/$dst2
echo -n "$line " >> /var/umelook-log/inotify/inotify$(date +%u).log
echo ` date +%F %T` >> /var/umelook-log/inotify/inotify$(date +%u).log
done
fi

node2脚本:

 #/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
then
ip2="unison@192.168.5.10:22"
src2="/opt/http/"
dst2="/opt/http/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do
/usr/local/bin/unison -batch -sshargs "-i /home/unison/.ssh/id_rsa" $src2 ssh://$ip2
/$dst2
echo -n "$line " >> /var/umelook-log/inotify/inotify$(date +%u).log
echo ` date +%F %T` >> /var/umelook-log/inotify/inotify$(date +%u).log
done
fi

转载于:https://www.cnblogs.com/Sunzz/p/8322335.html

unison+inotify数据实时双向同步相关推荐

  1. inotify+rsync实时双向同步文件

    一.架构 原理使用inotify监控指定文件夹的修改删除变动情况,然后通过rsync推送变动的文件到远端服务器. 二.安装 2.1 server1和server2都安装好rsync和inotify s ...

  2. mysql增量同步kafka_MySQL数据实时增量同步到Kafka - Flume

    写在前面的话 需求,将MySQL里的数据实时增量同步到Kafka.接到活儿的时候,第一个想法就是通过读取MySQL的binlog日志,将数据写到Kafka.不过对比了一些工具,例如:Canel,Dat ...

  3. flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)

    点击上方蓝色字体,关注我 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 准备 配置 ...

  4. 简单实现MySQL数据实时增量同步到Kafka————Maxwell

    任务需求:将MySQL里的数据实时增量同步到Kafka 1.准备工作 1.1.MySQL方面:开启BinLog 1.1.1.修改my.cnf文件 vi /etc/my.cnf [mysqld] ser ...

  5. kettle spoon判断增量更新_使用Kettle实现数据实时增量同步--时间戳增量回滚同步...

    使用Kettle实现数据实时增量同步 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法.关于ETL和Kettle的入门 ...

  6. 数据实时增量同步之CDC工具—Canal、mysql_stream、go-mysql-transfer、Maxwell

    数据实时增量同步之CDC工具-Canal.mysql_stream.go-mysql-transfer.Maxwell 什么是CDC? CDC工具对比 实现原理: Mysql binlog 讲解: m ...

  7. kettle 插入更新 数据增量_使用Kettle实现数据实时增量同步

    2018-09-28: 示例job已上传至github,地址见文末 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法. ...

  8. rsync + inotify 数据实时同步

    一.rsync介绍 rsync英文全称为Remote synchronization,从软件的名称就可以看出来,Rsync具有可是本地和远程两台主机之间的数据快速复制同步镜像.远程备份的功能,这个功能 ...

  9. Centos7.0系统下Rsync+sersync实现多文件数据实时增量同步

    前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增 ...

  10. 实时 双向同步双向复制 即 Beedup 产品

    Beedup 基于数据库日志解析的实时复制软件产品,提供数据库(Oracle/SQLServer/DB2/MySQL/Gbase/PostgreSQL)异地容灾备份,异地数据同步功能.支持复制时的主库 ...

最新文章

  1. 在Mac上控制Alt Delete-如何在Macbook上打开任务管理器
  2. window编程_消息分类
  3. Python-面向对象编程
  4. php网站调试出现的简单问题,调试php时网站出现502的解决方法
  5. 23种设计模式之《单例模式》
  6. windows 2008 server NTP Server
  7. .NET 平台采用率的提升归功于开源
  8. 一个易用、易部署的Python遗传算法库
  9. java三步 网易_Java基础:三步学会Java Socket编程·网易学院·教程
  10. Ajax 与 XmlHttpRequest
  11. pd虚拟机 17.1.2 Intel核心Mac专用版
  12. 简单的C语言程序介绍(重点理解),超详细基础代码解析
  13. SAP SD销售订单保存提示 定价错误: 必要条件 MWSI 丢失解决方法
  14. OSPF之Stub区域
  15. jzoj6152. 【GDOI2019Day2模拟2019.4.29】Endless (倍增维护并查集,平方串)
  16. 本地安全管理审核UDF 第2版 - lsasecur.au3
  17. 【无标题】汇编实验-学生成绩管理系统
  18. 为什么Lisp如此先进,却永远成为不了编程主流语言?深度解析Lisp的优势与劣势
  19. 排序层-深度模型-2015:AutoRec【单隐层神经网络推荐模型】
  20. 简单的二、八、十、十六进制转换

热门文章

  1. 安装 virtualbox additions 备忘 转
  2. 淘宝大数据,打假新武器
  3. UVa-202 Repeating Decimals
  4. 牛年新生儿取名:用诗经给男宝宝起名字
  5. AES200 软件用户手册
  6. 【ParaView教程】2.13 保存截图和保存动画
  7. Android使用百度大脑EasyDL识别交通标志物
  8. 中国舞蹈家协会街舞委员会与微博达成战略合作
  9. 微信小程序——实现下拉框
  10. SEO入门知识1:网站改版后怎么做SEO