实验环境:server:192.168.91.155、192.168.91.158
client:192.168.91.152
实验目的:把clinet指定目录()下的文件同步到server端的指定目录()
主机操作系统环境:centos 1.10 (默认安装rsync)

1、思路

rsync+inotify-tools是通过自己编写脚本实现rsync的调用,而sersync是在inotify-tools的基础上编写出来的,sersync检测到文件有更改等操作时,会自己调用rsync进行同步。
所以要先安装rsync实现服务器之间的同步操作,然后安装sersync检测文件夹动向,并自动调用rsync实现文件同步

2、安装rsync

172.16.1.25、172.16.1.25操作
1)修改配置文件

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass
motd file = /etc/rsyncd.Motd
[slave1]
path = /root/jiaofan/slave1/
comment = slave1
uid = root
gid = root
port=873
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = jiaofan
hosts allow = 192.168.91.152
hosts deny = 192.168.91.254

2)创建密码文件

cat /etc/rsync.pass
jiaofan:123456

3)修改权限(必须是600)

chmod 644 /etc/rsyncd.conf
chmod 600 /etc/rsync.pass

4)启动进程

systemctl start rsyncd

172.16.1.28客户端操作
1)创建认证的密码文件

#cat /etc/rsync.password
123456#chmod 600 /etc/rsync.password 

2)启动进程

systemctl start rsyncd

3)测试同步

rsync -avzP /root/jiaofan/  jiaofan@192.168.91.155::slave1/ --password-file=/etc/rsync.password
rsync -avzP /root/jiaofan/  jiaofan@192.168.91.158::slave1/ --password-file=/etc/rsync.password

3、安装sersync

1、为什么要使用rsync+sersync

  1. sersync是基于inotify开发的,类似于inotify-tools的工具
  2. sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后调用rsync进行同步,只同步发生变化的文件或者目录

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

1)rsync+inotify-tools

  1. inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
  2. rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低

2)rsync+sersync

  1. sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
  2. rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。

总结:
当同步的目录数据量不大时,建议使用rsync+inotify
当同步的目录数据量很大时(几百G甚至1T以上)文件很多时,建议使用rsync+sersync

3、下载sersync

wget https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz

4、修改配置文件

a) 修改24-28行

        <localpath watch="/root/jiaofan/slave1"><remote ip="192.168.91.155" name="slave1"/><remote ip="192.168.91.158" name="slave1"/></localpath>

b)修改31–34行,认证部分

        <rsync><commonParams params="-artuz"/><auth start="true" users="jiaofan" passwordfile="/etc/passwd.txt"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="true" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync>
# ***修改内容为 rsync的密码文件以及 同步所使用的账号类似:rsync -artuz /data/www/ jiaofan@192.168.91.155::slave1/ --password-file=/etc/rsync.password

c) 修改37行

  <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分钟对失败的log进行重新同步

修改后完成的配置文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/><exclude expression="(.*)\.log\.tar\.gz"></exclude></filter><inotify><delete start="false"/><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="/root/jiaofan/slave1"><remote ip="192.168.91.155" name="slave1"/><remote ip="192.168.91.158" name="slave1"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="true" users="jiaofan" passwordfile="/etc/passwd.txt"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="true" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync><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><plugin name="socket"><localpath watch="/opt/tongbu"><deshost ip="192.168.138.20" port="8009"/></localpath></plugin><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>

启动sersync

/usr/local/sersync/bin/sersync2  -d -r -o /usr/local/sersync/confxml.xml
#如果要传多个机器,可以写多个配置文件,然后启动多个配置文件比如在启动confxml_jiaofan.xml
/usr/local/sersync/bin/sersync2  -d -r -o /usr/local/sersync/confxml_jiaofan.xml

5、sersync参数说明

Sersync参数    说明
./sersync -r
-r参数作用是:开启实时监控的之前对主服务器目录与远程目标机器的目录进行一次整体同步;如果需要将sersync运行前,主服务器目录下已经存在的所有文件或目录全部同步到远端,则要以 -r参数运行sersync,将本地与远程整体同步一次;提示说明:如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步;
./sersync -o xx.xml
不指定 -o参数:sersync使用sersync可执行文件目录下的默认配置文件confxml.xml指定 -o 参数:可以指定多个不同的配置文件,从而实现sersync多进程多实例的数据同步
./sersync -n num
-n参数为:指定默认的线程池的线程总数;例如:./sersync -n 5 则指定线程总数为5,如果不指定,默认启动线程池数量是10,如果cpu使用过高,可以通过该参数调低,如果机器配置较高,可以调高默认的线程总数,提升同步效率;
./sersync -d    -d参数为:后台服务,通常情况下使用 -r参数对本地到远端整体同步一遍后,在后台运行此参数启动守护进程实时同步;在第一次整体同步时,-d 和 -r参数经常会联合使用;
./sersync -mpluginName
-m参数:不进行同步,只运行插件 ./sersync -m pluginName例如:./sersync -m command,则在监控到事件后,不对远程目标服务器进行同步,而是直接运行command插件
组合命令使用说明:
-n 8 -o liubl.xml -r -d 多个参数可以配合使用,例如:./sersync -n 16 -o config.xml -r -d 表示设置线程池工作线程为16个,指定liubl.xml作为配置文件,在实时监控前 做一次整体同步,以守护进程方式在后台运行;
./sersync --help    很遗憾,它没有查看帮助(需要的话2条路,要么看源代码,要么自测求验证)

配置文件模块说明

filter文件过滤功能

对于sersync监控的文件,会默认过滤系统的临时文件(以“.”开头,以“~”结尾),除了这些文件外,可以自定义其他需要过滤的文件。

<filterstart="true"><excludeexpression="(.*)\.gz"></exclude><excludeexpression="^info/*"></exclude>
</filter>

将start设置为 true,在exclude标签中,填写正则表达式,默认给出两个例子分别是过滤以".gz"结尾的文件与过滤监控目录下的info路径(监控路径/info/*),可以根据需要添加,但开启的时候,自己测试一下,正则表达式如果出现错误,控制台会有提示。相比较使用rsync 的exclude功能,被过滤的路径,不会加入监控,大大减少rsync的通讯量。

inotify监控参数设定(优化)

对于inotify监控参数可以进行设置,根据您项目的特点优化srsync。

<inotify><deletestart="true"/><createFolderstart="true"/><createFilestart="true"/>
</inotify>

对于大多数应用,可以尝试把createFile(监控文件事件选项)设置为false来提高性能,减少 rsync通讯。因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的事 件close_write,同样可以实现文件完整同步。
注意:强将createFolder保持为true,如果将createFolder设为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控。所以除非特殊需要,请开启。
默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不需要删除远程目标服务器的文件(目录),则可以将delete 参数设置为false,则不对删除事件进行监控。

Debug开启

12 <debugstart=“false”/>
设置为true,开启debug模式,会在sersync正在运行的控制台,打印inotify事件与rsync同步命令。

XFS文件系统

对于xfs文件系统的用户,需要将这个选项开启,才能使sersync正常工作

文件监控与远程同步设置

3     <sersync>
14         <localpathwatch="/opt/tongbu1">
15             <remoteip="192.168.1.11"name="tongbu1"/>
16             <!--<remote ip="192.168.1.12" name="tongbu"/>-->
17             <!--<remote ip="192.168.1.13" name="tongbu"/>-->
18         </localpath>

Rsync参数配置

19         <rsync>
20            <commonParams params="-artuz"/>
20             <authstart="false"users="root"passwordfile="/etc/rsync.pas"/>
21             <userDefinedPortstart="false"port="874"/><!-- port=874 -->
22             <timeoutstart="false"time="100"/><!-- timeout=100 -->
23             <sshstart="false"/>
24         </rsync>

commonParams可以用户自定义rsync参数,默认是-artuz
authstart=“false” 设置为true的时候,使用rsync的认证模式传送,需要配置user与passwrodfile(–password-file=/etc/rsync.pas),来使用。userDefinedPort 当远程同步目标服务器的rsync端口不是默认端口的时候使用(–port=874)。timeout设置rsync的timeout时间(–timeout=100)。ssh使用rsync -e ssh的方式进行传输。

失败日志脚步配置

25 <failLogpath="/tmp/rsync_fail_log.sh"timeToExecute=“60”/><!–default every 60min
对于失败的传输,会进行重新传送,再次失败就会写入rsync_fail_log,然后每隔一段时间(timeToExecute进行设置)执行该脚本再次重新传送,然后清空该脚本。可以通过path来设置日志路径。

Crontab定期整体同步功能

26         <crontabstart="false"schedule="600"><!--600mins-->
27             <crontabfilterstart="false">
28                 <excludeexpression="*.gz"></exclude>
29                 <excludeexpression="info/*"></exclude>
30             </crontabfilter>
31         </crontab>

crontab可以对监控路径与远程目标主机每隔一段时间进行一次整体同步,可能由于一些原因两次失败重传都失败了,这个时候如果开启了crontab功能,还可以进一步保证各个服务器文件一致,如果文件量比较大,crontab的时间间隔要设的大一些,否则可能增加通讯开销。schedule这个参数是设置crontab的时间间隔,默认是600分钟
如果开启了filter文件过滤功能,那么crontab整体同步也需要设置过滤,否则虽然实时同步的时候文件被过滤了,但crontab整体同步的时候如果不单独设置crontabfilter,还会将需过滤的文件同步到远程,crontab的过滤正则与filter过滤的不同,也给出了两个实例分别对应与过滤文件与目录。总之如果同时开启了filter与crontab,则要开启crontab的crontabfilter,并按示例设置使其与filter的过滤一一对应。

插件设置

<pluginstart="false"name="command"/>
插件相关xml<sersync>
......
<pluginstart="false"name="command"/>
</sersync><pluginname="command">
<paramprefix="/bin/sh"suffix=""ignoreError="true"/>
<filterstart="false">
<includeexpression="(.*)\.php"/>
<includeexpression="(.*)\.sh"/>
</filter>
</plugin>
<pluginname="socket">
<localpathwatch="/opt/tongbu">
<deshostip="192.168.138.20"port="8009"/>
</localpath>
</plugin>
<pluginname="refreshCDN">
<localpathwatch="/data0/htdocs/cms.88181.com/site/">
<cdninfodomainname="ccms.chinacache.com"port="80"username="xxxx"passwd="xxxx"/>
<sendurlbase="http://pic.88181.com/cms"/>
<regexurlregex="false"match="cms.88181.com/site([/a-zA-Z0-9]*).88181.com/images"/>
</localpath>
</plugin>

如 上面的xml所示,其中plugin标签设置为true时候,在同步文件或路径到远程之后后,调用插件。通过name参数指定需要执行的插件。目前支持的有command refreshCDN socket http四种插件。http插件目前由于兼容性原因去除,以后会重新加入。
command插件当文件同步完成后,会调用command插件,如同步文件是test.php,则test.php文件在改动之后,调用rsync同步到远程服务器后,调用command插件,执行

sersync+rsync部署与使用相关推荐

  1. sersync+rsync 部署

    一.Rsync+sersync (1)sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字: (2)rsync在同步的时候,只同步发生变化的这个文件或 ...

  2. sersync+rsync原理及部署

    转载于http://blog.51cto.com/liubao0312/1677586 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotif ...

  3. sersync+rsync数据同步

    sersync+rsync可实现数据实时同步 rsync开启daemon模式 vim /etc/rsyncd.conf uid = rsync gid = rsync use chroot = no ...

  4. sersync + rsync 实现文件的实时同步

    这里有一点要特别注意了,就是在你完成备份之后,先不要把本地的文件都给删除了,先把服务停了之后再删除文件, 因为你已删除,检查到两边不一致,他又会把备份端给删除了.所以特别得注意了.这里吃过一次亏. 还 ...

  5. sersync+rsync+inotify-tools集中日志,实时同步

    2019独角兽企业重金招聘Python工程师标准>>> 用sersync+rsync+inotify-tools实时监控文件变化,实时同步,将多台业务主机日志集中到一台服务器,便于研 ...

  6. sersync+rsync实现数据文件实时同步

    目录 简述rsync+sersync 同步原理 同步原理 配置rsync服务 配置Sersync服务 简述rsync+sersync rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据 ...

  7. Sersync+rsync数据同步实践:快速解决数据同步问题

    前言 对于数据的实时同步,例如:某些配置文件或web文件在集群中的同步,通常我们有几种方式: 使用网络raid(例如:nfs/drbd)将某些目录由源服务器挂载到目标服务器(由于网络raid严重依赖网 ...

  8. sersync+rsync实现实时同步

    在分布式应用中会遇到一个问题,就是多个服务器间的文件如何能始终保持一致.一种经典的办法是将需要保持一致的文件存储在NFS上,这种方法虽然简单方便但却将本来多点的应用在文件存储上又变成了单点,这违背了分 ...

  9. sersync+rsync做实时同步

    (1).实验环境 源主机:youxi1 192.168.5.101 目的主机:youxi2 192.168.5.102 目的:实时同步数据 sersync默认端口874,rsync默认端口873 (2 ...

最新文章

  1. Nat. Genet. | 基于CRISPRi技术检测增强子与启动子相互作用
  2. 浅谈.NET(C#)与Windows用户账户信息的获取
  3. ACS AAA Tacacs+
  4. OA学习笔记-001-项目介绍
  5. php的类图怎么生成_PHP设计模式之简单工厂模式
  6. ArcGIS API for Python(一)开始准备环境
  7. centos7下kubernetes(18。kubernetes-健康检查)
  8. typescript继承和重写
  9. MIPS指令:常用R型、I型、J型指令编解码表
  10. 新练习作,实验室网站首页——未采用
  11. Android游戏开发–基本游戏架构
  12. HTML做成信纸格式,css实现一个写信的格式_html/css_WEB-ITnose
  13. hbase数据库详解
  14. 卡尔曼滤波-卡尔曼滤波全篇讲解
  15. 宝塔面板关键目录解析
  16. 图片制作、LOGO制作、ICO文件
  17. 笔记本计算机硬盘如何分盘,笔记本电脑硬盘怎么合理分区
  18. 微信小程序自定义yPicker组件分析及省市区三级联动实现
  19. 极速office(excel)如何查找出重复内容
  20. 【苏宁消费金融对接苏宁联盟链 打造金融区块链应用案例】

热门文章

  1. 通用文字识别API推荐
  2. Vector 类存储原理
  3. 使用Vector类编程
  4. 从零开始完整学习全基因组测序数据分析:第1节 测序技术
  5. AQUATOX模型 水环境与水生态应用
  6. 从CAD到BIM,是什么在改变?
  7. C语言 char*和char[]用法
  8. 性能测试:从奥运门票系统崩溃想到的
  9. C++中main函数的参数
  10. java elgamal_ElGamal算法进行加密和解密的基本原理及实现