参考链接

https://www.cnblogs.com/bill2014/p/7416289.html

rsync+inotify:https://www.cnblogs.com/bill2014/p/7411711.html
keepalive+rsync+inotify:https://www.fandenggui.com/post/keepalived-rsync-inotify.html#10-L40

rsync+inotify-tools与rsync+sersync架构的区别

1、rsync+inotify-tools
a、inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
b、rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低
2、rsync+sersync
a、sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
b、rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。
总结:
当同步的目录数据量不大时,建议使用rsync+inotify
当同步的目录数据量很大时(几百G甚至1T以上)文件很多时,建议使用rsync+sersync

Rsync+sersync配置及使用

服务端:192.168.3.52 (rsync-server)
客户端:192.168.3.55 (rsync-client)
目标:将客户端/data/rsync目录下文件实时同步到服务端/data/rsync目录下

Rsync部署见: https://blog.csdn.net/martinlinux/article/details/114588852

服务端部署sersync

serync下载地址 goodle code: https://code.goodle.com/archive/psersync/downloads
Git Hub镜像地址: https://github.com/orangle/sersync

1. 安装

tar -zxf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
cd /usr/local/
mv GNU-Linux-x86 sersync

2. 配置sersync(rsync-client端)

sersync配置文件详解

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5"><host hostip="localhost" port="8008"></host>    #hostip与port是针对插件的保留字段,对于同步没有任何作用,保留默认即可。<debug start="false"/>                #开启debug模式,会在当前终端输出同步信息,建议开启之后运行命令时将日志2>&1放入日志文件中。<fileSystem xfs="false"/>             #对于xfs文件系统的用户,需要将这个选项开启,才能是sersync正常工作。
下边这段表示:对于sersync监控的文件,会默认过滤系统的临时文件(以"."开头,以"~"结尾),除了这些文件外,可以自定义其他需要过滤的文件。<filter start="false">                           <exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude>
</filter>以下:inotify监控参数,对于大多数应用,可以把createFile设置为false来提高性能,减少rsync通讯,因为拷贝文件到监控目录
会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝时结束的事件close_write,同样可以实现文件
完整同步。
(看情况开启)
注意:要将createFolder保持为true,如果将createFloder设置为false,则不会对产生的目录进行监控,该目录下的子文件与子目
录也不会被监控,所以除非特殊需要,请开启。默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不
需要删除远程目标服务器的文件(目录),则可以将delete参数设置为false,则不会删除事件监控。<inotify>                                    <delete start="true"/>                       <createFolder start="true"/><createFile start="false"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="false"/><modify start="false"/>
</inotify>
<sersync><localpath watch="/opt/tongbu">                   /opt/tongbu目录为sersync主服务器本地待同步的目录,ip为从服务器的ip地址,name="tongbu1",tongbu1为rsync.conf中模块的名字。<remote ip="127.0.0.1" name="tongbu1"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/>               rsync的同步参数<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>      设置为true的时候,认证模式开启      <userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/>                      如果开启就是使用 rsync -e ssh的方式进行传输</rsync><failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->         失败日志脚本配置如果文件同步失败,会重新传送,再次失败就会写入rsync_fail_log.sh,然后每隔一段时间(timetoexecute进行设置)执行该脚本再次重新传送,然后清空该脚本。<crontab start="false" schedule="600"><!--600mins-->        每隔一段时间整体同步,,如果文件量比较大,crontab的时间间隔要设的大一些,否则可能增加通讯开销。如果开启了filter文件过滤功能,那么crontab整体同步也需要设置过滤,否则虽然实时同步的时候文件被过滤了,但crontab整体同步的时候,如果不单独设置crontabfilter,还会将需要过滤的文件同步到远程服务器,crontab的过滤正则与fileter过滤的不同。<crontabfilter start="false">                         如果同时开启了filter与crontab,则要开启crontab的crontabfilter。<exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/>                设置为true,将文件同步到远程服务器后会调用name参数指定的插件。如果需要使用插件则需要在启动实例的时候加上-m参数</sersync>
以下:当同步文件完成后,会调用command插件,如同步文件是test.php,则test.php文件再改动后,调用rsync同步到远程服务器
后,调用comand插件,执行/bin/sh test.php suffix >/dev/null 2>&1
如果suffix设置了,则会放在inotify事件test.php之后,如果ignoError为true,则会添加>/dev/null 2>&1,当然还可以设
置command的filter,当filter为true,include可以只对正则匹配到的文件调用command。<plugin name="command"><param prefix="/bin/sh" suffix="" ignoreError="true"/>    <!--prefix /opt/tongbu/mmm.sh suffix--><filter start="false"><include expression="(.*)\.php"/><include expression="(.*)\.sh"/></filter>
</plugin>
以下:向指定ip与端口发送inotify所产生的文件路径信息。
<plugin name="socket">   <localpath watch="/opt/tongbu"><deshost ip="192.168.138.20" port="8009"/></localpath>
</plugin>以下:在同步的过程中将文件发送到目的服务器后刷新cdn接口。改模块是根据chainaCDN的协议,进行设计,当有文件产生的时候,就
向cdn接口发送需要刷新的路径位置。
localpath是需要监控的目录,cdninfo标签制定了cdn接口的域名,端口号,以及用户名与密码。
sendurl标签是需要刷新的url的前缀。regexurl标签中的,regex属性为true时,使用match 属性的正则语句匹配inotify返回
的路径信息,并将正则匹配到的部分作为url一部分。<plugin name="refreshCDN"><localpath watch="/data0/htdocs/cms.xoyo.com/site/"><cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/><sendurl base="http://pic.xoyo.com/cms"/><regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/></localpath>
</plugin>
</head>

举例:
如果产生文件事件为:/data0/htdocs/cms.xoyo.com/site/jx3.xoyo.com/image/a/123.txt
经过上面的match正则匹配后,最后刷新的路径是:http://pic.xoyo.com/cms/jx3/a/123.txt
如果regex属性为false,最后刷新的路径是:http://pic.xoyo.com/cms/jx3.xoyo.com/images/a/123.txt

sersync配置

  1. 备份配置文件

cp sersync/confxml.xml sersync/confxml.xml-bak

  1. 开启同步日志记录
原文内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/>                <fileSystem xfs="false"/> 改为:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5"><host hostip="localhost" port="8008"></host><debug start="true"/>                <fileSystem xfs="false"/>
注意:(变更记录)开启日志之后,启动sersync时,一定要日志重定向
sersync -r -d -o /usr/local/sersync/conf/confxml.xml 2>&1 /usr/local/sersync.log
  1. 更改优化sersync配置,24-28行,因为我只用了一个服务端一个客户端,所以只有一个同步服务器
原内容为:<localpath watch="/opt/tongbu"><remote ip="127.0.0.1" name="tongbu1"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath>
改为:<localpath watch="/data/rsync"><remote ip="192.168.3.52" name="rsync"/></localpath>
  1. 更改31-34行,认证部分
<commonParams params="-artuz"/>
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>改为:<rsync><commonParams params="-azvlHS"/><auth start="true" users="tytt"passwordfile="/etc/rsync.passwd"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="true" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync>上面这个配置就是在拼接rsync -azvlHS --timeout=100 /data/rsync rsync_backup@192.168.3.52::rsync --password-file=/etc/rsync.password这个命令
  1. 修改36-37行
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->改为:
<failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
当同步失败时,日志记录到/usr/local/sersync/logs/rsync_fail_log.sh,并且每60分钟对失败的文件进行重新同步。
  1. 开启定期整个目录同步
原文内容:<crontab start="false" schedule="600"><!--600mins-->        <crontabfilter start="false">                         <exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab>
改为:<crontab start="true" schedule="60"><!--600mins-->        <crontabfilter start="false">                         <exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab>我这里设置的是60分钟整个目录同步一次(设置定期同步是因为:防止服务端新增或修改文件,导致服务端和客户端不一样;还可以同步.*隐藏文件)

启动sersync

/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml

选项:

参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍,如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步
参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

开机自启

vim /etc/rc.loal
/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml

Rsync+实时监控同步软件相关推荐

  1. ​inotify+rsync实时数据同步实践讲解17

    inotify+rsync实时数据同步实践讲解17说明:本文来自来自北京老男孩linux运维实战培训中心-运维就业课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.bl ...

  2. 二十九、rsync+inotity实时监控同步工具

    一.场景应用:                                    客户通过url访问资源(查询,下载等),并发量是非常高的,所以运用负载均衡分担web服务器的压力,在后端连接不同的 ...

  3. 镜像服务器文件实时监控同步程序

    这是为我们网站解决南北电信网通互联互通问题而写的一个程序. 优游中国(www.yooyocn.com)是一个大型旅游门户网站,提供了资讯,视频,图片,博客,论坛等大数据量的业务内容. 为了使全国各地的 ...

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

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

  5. 使用 Rsync 实现远程同步,以及实时同步

    使用 Rsync 实现远程同步,以及实时同步 一.基本介绍 二.使用 Rsync 实现远程同步 1.配置同步端 2.进行同步备份 3.结合 CronJob 进行自动备份 三.通过 Inotify + ...

  6. 企业级别应用--rsync远程同步(配置 rsync 备份源、rsync 下行和上行、inotify+rsync 实时备份)

    文章目录 一.配置 rsync 源服务器 1.1 rsync简介 1.2 rsync特点 1.3 配置 rsync 同步源 1.4 测试rsync功能 下行同步的三种方式 二.inotify+rsyn ...

  7. Cetnos环境下inotify+rsync实时同步

    一.介绍 1.1 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的"rsync算法"来使本地和远程两个主机之间的文件达到同步 ...

  8. 服务器之间文件同步 go,基于golang文件实时监控并同步远端服务器工具

    ### SftpSync 基于golang开发的 文件实时同步软件 ### 前言 1.本人是个重度某度云用户,但是云盘的速度不开会员的情况下真是太慢了,而且也不能实时备份,所以想过自己搭建一个NAS. ...

  9. inotifywait+rsync 实时同步脚本

    利用 inotifywait 对文件系统事件实时监控, 触发事件调用 rsync 远程同步文件至一台或多台服务器 同步指定目录 (缺点: 每次触发都要扫描整个目录进行文件差异对比, 文件越多越耗时长) ...

  10. 真正的inotify+rsync实时同步 彻底告别同步慢

    真正的inotify+rsync实时同步 彻底告别同步慢 我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题.但当web文件越来越多(百万级数量html,jpg等小 文 ...

最新文章

  1. R语言ggplot2可视化:应用pivot_longer函数将数据从宽格式转换为长格式、为dataframe的每一列绘制密度图和直方图(堆叠)
  2. buider模式的缺陷
  3. 常见的内存泄漏原因及解决方法
  4. 使用Nginx反向代理到go-fastdfs
  5. SAP Cloud for Customer的后台作业
  6. Pushing Policy Failed because Checkpoint Firewall “Load on module failed – no memory”
  7. python编程入门到实践笔记习题_Python编程从入门到实践笔记——列表简介
  8. java collections读书笔记(3) vector(2)
  9. Python Cookbook(第3版)pdf
  10. 20140115-URL编码与解码
  11. 学习笔记:图像风格迁移
  12. [轻松拿offer]Web前端面试真题|带详解!
  13. 2021年茶艺师(中级)考试及茶艺师(中级)复审模拟考试
  14. Filecoin矿商史上最全测评,看完这篇谁也坑不了我
  15. linux下通过C语言读取BMP格式图片,在文本终端显示该图片
  16. Python开发-flask框架学习
  17. MATLAB2016笔记(五):进阶矩阵操作
  18. Groovy 百度云分享下载各个版本SDK
  19. koa 项目中的知识点 - 详情页
  20. tms320f2812中断系统分析及其c语言编程,TMS320F2812中断系统分析及其C语言编程

热门文章

  1. Android怎么导入夜神模拟器,电脑文件怎么传到夜神android模拟器 文件上传夜神模拟器...
  2. VMWare ESXi上传iso镜像文件
  3. 基于java的KTV点歌选歌系统
  4. android 模拟点击menu键,android编程之menu按键功能实现方法
  5. 百度年龄计算机在线使用,百度年龄计算器app
  6. 科大讯飞,百度,思必驰,云知声四款识别引擎降噪算法性能对比
  7. 常用的页面布局(两栏布局、三栏(圣杯、双飞翼)布局)
  8. java 将对象置空_Java 中将对象引用置 null 的作用?
  9. C语言数组 一维数组篇
  10. 像素 厘米 英寸 换算