文件触发式实时同步 Rsync+Sersync Rsync+Inotify-tools

一、概述

1、Rsync+Sersync 是什么?

1)Sersync使用c++编写基于inotify开发的触发机制;

2)Sersync可以监控所监听的目录发生的变化(包括新建、修改、删除),具体到一个文件名或目录名,然后触发rsync同步,只同步发生改变的文件或目录。如果只是目录下的文件发生变化,则只会同步变化的文件而不会同步目录。只有目录本身发生变化的时候才会同步目录。

3)自带crontab功能,只需在 xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能。

4)使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状 态。

5)有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则 每10个小时对同步失败的文件重新同步。

2、Rsync+Inotify-tools  与 Rsync+Sersync 区别

1)Inotify-tools只能记录被监控的目录发生的变化(包括新建、修改、删除),并不能监控是哪个文件或目录发生了改变;

rsync同步的时候会把整个监控的目录整个同步过去,但数据量很大的时候,同步的时间就会很久(rsync同步要遍历整个目录进行文件对比)

2)Sersync可以监控所监听的目录发生的变化(包括新建、修改、删除),具体到一个文件名或目录名,然后触发rsync同步,只同步发生改变的文件或目录。如果只是目录下的文件发生变化,则只会同步变化的文件而不会同步目录。只有目录本身发生变化的时候才会同步目录。

rsync同步的时候之同步发生改变的文件或目录(因为每次发生变化的数据很小,所以速度很快)效率很高。

3、小结

当同步的目录下的数据量很小时,可以使用Rsync+Inotify;当数据很大(几个G甚至更大的时候)、文件数很多时使用Rsync+Sersync。

二、服务部署

1、环境介绍

系统:centos7.2  默认支持了inotify  内核:3.10.0-514.el7.x86_64   版本: jdk-8u111-linux-x64.tar、sersync2.5.4_64bit_binary_stable_final.tar.gz、rsync-3.0.9-17.el7.x86_64

linux内核从2.6.13开始支持inotify。

2、安装

#yum -y install rsync

配置文件

#cat /etc/rsyncd.conf

uid = root
gid = root
use chroot = yes
address = 192.168.1.202
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid

lock file = /var/log/rsync.lock
max connections = 5
motd file = /etc/rsyncd.motd
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[config]
        path = /data/mongodb/conf
        comment = copy  config for cluster every node
        read only = no
        dont compress = *.gz *.bz2 *.tgz *.xz *.zip *.rar *.z
        auth users = root            #用户必须为系统用户
        secrets file = /etc/rsyncd.pas
        list = no
        ignore errors

hosts allow = 192.168.1.201

host deny = *

保存退出;

创建密码文件

#echo "root:666666"  > /etc/rsyncd.pas

root是用户名,666666是密码,用户名与密码之间使用冒号分割,每个用户单独一行。

#chmod 600  /etc/rsyncd.pas

欢迎输出的提示信息:

# cat /etc/rsyncd.motd
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
It‘s  config  copy!
amazing man!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3、启动服务

#rsync --daemon

4、客户端

#yum  -y  install  rsync

rsync同步源的资源表示方式:
用户名@主机地址::共享模块名

rsync://用户名@主机地址/共享模块名

需要创建密码文件:

#echo "666666" >/root/rsyncd.pas

#chmod  600  /root/rsyncd.pas

注意这个密码文件rsync服务的密码文件不一样,这个密码文件只有同步用户的密码!!

#rsync -avzH --delete --password-file=/root/rsyncd.pas [email protected]::config /myweb

#rsync -avzH --delete --password-file=/root/rsyncd.pas rsync://[email protected]/config  /myweb

rsync常用参数:

基本格式: rsync [选项] 原始位置 目标位置
-r:递归模式,包含目录及子目录中的所有文件
-l:对于符号链接文件仍然复制为链接文件
-v:显示同步过程的详细信息
-a:递归模式,保留文件的权限、属性信息
-z:在传输文件时进行压缩
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户)
-o:保留文件的属主标记(仅超级用户)
-H:保留硬连接
-A:保留ACL属性信息
-D:保留设备文件及其他特殊文件
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据校验和来决定是否跳过文件

在需要同步的服务器上面执行相同的操作,将ip换成对应的即可。

三、部署sersync

1、 首先要确定服务器已经部署好了rsync,并且测试能成功同步文件,因为sersync依赖于rsync。

去官网下载包,下载需要FQ。

https://code.google.com/archive/p/sersync/downloads

解压后的目录为GNU-Linux-x86。

#tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

#mv GNU-Linux-x86/ sersync

#cd sersync;ls

confxml.xml  sersync2

confxml.xml是他的配置文件,sersync2是可执行的bin文件。

2、复制一份配置文件,做个备份再修改。

#cp confxml.xml confxml.xml.bak

#cat confxml.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="true"/>
    <filter start="false">
 <exclude expression="(.*)\.svn"></exclude>
 <exclude expression="(.*)\.gz"></exclude>
 <exclude expression="^info/*"></exclude>
 <exclude expression="^static/*"></exclude>
    </filter>
    <inotify>
 <delete start="true"/>
 <createFolder start="true"/>
 <createFile start="true"/>
 <closeWrite start="true"/>
 <moveFrom start="true"/>
 <moveTo start="true"/>
 <attrib start="true"/>
 <modify start="true"/>
    </inotify>

<sersync>
 <localpath watch="/data/mongodata">
     <remote ip="192.168.1.202" name="config"/>
     <!--<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="root" passwordfile="/root/rsyncd.pas"/>
     <userDefinedPort start="true" port="873"/><!-- port=874 -->
     <timeout start="true" time="300"/><!-- timeout=100 -->
     <ssh start="false"/>
 </rsync>
 <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
 <crontab start="true" 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>

红色字体为修改项,参数解释:

1)fileSystem xfs="true" :开启xfs文件系统支持

2)<inotify>
 <delete start="true"/>
 <createFolder start="true"/>
 <createFile start="true"/>
 <closeWrite start="true"/>
 <moveFrom start="true"/>
 <moveTo start="true"/>
 <attrib start="true"/>
 <modify start="true"/>
    </inotify>

这段配置是监控的操作,根据需要定制即可。我这里选择全部行为。

3)<localpath watch="/data/mongodata">             本地监控的目录
     <remote ip="192.168.1.202" name="config"/>   需要同步数据的服务器ip(文件发生变化的服务器)、name是rsync里面配置的module。

4)<auth start="true" users="root" passwordfile="/root/rsyncd.pas"/>      同步的用户和密码文件,这个文件内容只有密码。部署rsync时就创建好了
     <userDefinedPort start="true" port="873"/><!-- port=874 -->               rsync服务监听的端口。

3、启动服务

首先要修改linux内核参数:

#sysctl -p

fs.inotify.max_queued_events = 66666666
fs.inotify.max_user_instances = 65535
fs.inotify.max_user_watches = 66666666

queued_events:如果设置的值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确

user_watches:必须保证这个值要远大于所监控目录下的文件数。

#cd  /data/sersync

#./sersync2 -d -r -o ./confxml.xml

另外一台服务器,只需要修改localpath  watch、remote ip、name根据rsync的配置修改即可。必须要与rsync里面的path、address、modulename[config]一致。

重启服务:

#killall sersync2 && rm  -rf  /var/run/rsyncd.pid && /data/sersync/sersync2 -d -o /data/sersync/confxml.xml 2>&1 >>/dev/null

参数解释:

-d 实时同步

-r 一次全量同步

-o 指定配置文件

4、将服务做成开机启动

#echo "/data/sersync/sersync2 -d -o /data/sersync/confxml.xml  2>& 1 >>/dev/null"  >>/root/.bashrc

#source  /root/.bashrc

当然可以写一个启动脚本:

# cat /etc/init.d/sersync
#!/bin/bash
# chkconfig: 90 89 70
# description:it‘s create by cuishuai useed to start or stop sersync
sersync="/data/sersync/sersync2"
conf="/data/sersync/confxml.xml"

case $1 in

start)
/data/sersync/sersync2 -d -o /data/sersync/confxml.xml 2>&1 >>/dev/null
num=`ps -ef | grep sersync2 | grep -v grep | wc -l`
if [ $num -ne 0 ];then
echo "sersync start  success!"
fi
;;

stop)
killall sersync2 && rm -rf /var/run/rsyncd.pid
;;

restart)
killall sersync2 && rm -rf /var/run/rsyncd.pid && /data/sersync/sersync2 -d -o /data/sersync/confxml.xml 2>&1 >>/dev/null
;;

*)
echo "Usage $0 start|stop|restart"

esac

至此,整个的rsync+sersync同步机制就完成了。

附上rsync+inotify搭建:

rsync远程同步:

可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,传输前进行压缩因此非常适用于异地备份、镜像服务器等。官网:http://rsync.samba.org/

1、在远程同步任务中,负责发起rsync同步操作的客户机称为发起端。
2、负责相应来自客户机的rsync同步操作的服务器称为同步源
3、在同步过程中,同步源负责提供文档的原始位置,发起端应对该位置具有读取权限

下行同步案例:

配置rsync源服务器
ip:10.0.0.200
1、以源目录/var/www/html、备份账号backuper为例
   [[email protected] ~]# yum -y install rsync
   [[email protected] ~]# yum -y install httpd
   [[email protected] ~]# ls /var/www/html/
  
2、建立/etc/rsync.conf配置文件
  uid = nobody
gid = nobody
use chroot = yes
address = 10.0.0.200
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
max connections = 5
motd file = /etc/rsyncd.motd
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[wwwroot]
        path = /var/www/html
        comment = document root of www.azui.com
        read only = yes
        dont compress = *.gz *.bz2 *.tgz *.xz *.zip *.rar *.z
        auth users = backuper            #用户必须为系统用户
        secrets file = /etc/rsyncd.secrets
        list = no

hosts allow = 10.0.0.250

hosts deny = *
        ignore errors

3、为备份账户创建数据文件
  [[email protected] ~]# useradd backuper
  [[email protected] ~]# echo ‘123‘ | passwd --stdin backuper >/dev/null
  [[email protected] ~]# vim /etc/rsyncd.secrets
  baackuper:123
  [[email protected] ~]# chmod 600 /etc/rsyncd.secrets   #必须改否则客户端同步时会报错
  [[email protected] ~]# vim /etc/rsyncd.motd
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       wellcom to www.azui.com
      2016-09-12  15:32
      2017-09-18
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

4、启动与关闭rsync服务
  [[email protected] ~]# rsync --daemon  
5、rsync命令的使用

基本格式: rsync [选项] 原始位置 目标位置
-r:递归模式,包含目录及子目录中的所有文件
-l:对于符号链接文件仍然复制为链接文件
-v:显示同步过程的详细信息
-a:递归模式,保留文件的权限、属性信息
-z:在传输文件时进行压缩
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户)
-o:保留文件的属主标记(仅超级用户)
-H:保留硬连接
-A:保留ACL属性信息
-D:保留设备文件及其他特殊文件
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据校验和来决定是否跳过文件

!!!客户端使用rsync服务
ip:10.0.0.250

rsync同步源的资源表示方式:
用户名@主机地址::共享模块名

rsync://用户名@主机地址/共享模块名

执行以下操作访问rsync同步源,下载到本地/tmp目录下进行备份
rsync -avz ba[email protected]::/wwwroot  /tmp

rsync -avz rsync://[email protected]/wwwroot  /tmp

--delete的使用:
[[email protected] myweb]# rsync -avz --delete --password-file=/tmp/rsyncd.secrets [email protected]::wwwroot /myweb

由于在客户端需要设置crontab周期计划任务,所以也要建立密码文件
[[email protected] tmp]# vim /tmp/rsyncd.secrets
123  #服务器上设置的密码。只写密码前面什么都不能有
[[email protected] tmp]# chmod 600 /tmp/rsyncd.secrets
[[email protected] myweb]# crontab -e
0 22 * * * /usr/bin/rsync -avz --password-file=/tmp/rsyncd.secrets [email protected]::wwwroot /myweb.$(date +%F/%R)
[[email protected] myweb]# chkconfig crond on

配置rsync+inotify实时同步:上行同步

Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便的实现文件异动警告、增量备份
rsync工具与inotify机制组合相结合,实现实时同步-只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静默等待状态。这样就避免了按固定周期备份是存在的延迟性、周期过密等问题。

发起端:配置
10.0.0.250

1、调整inotify内核参数
 [[email protected] ~]# vim /etc/sysctl.conf
  fs.inotify.max_queued_events = 16384
  fs.inotify.max_user_instances = 1024
  fs.inotify.max_user_watches = 1048576
[[email protected] ~]# sysctl -p
2、安装inotify-tools
 [[email protected] ~]# tar xf inotify-tools-3.14.tar.gz
 [[email protected] ~]# cd inotify-tools-3.14
 [[email protected] ~]# ./configure && make && make install
[[email protected] ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/   监控
3、编写触发式同步脚本
  [[email protected] ~]# vim /opt/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /var/www/html"
RSYNC_CMD="rsync -azH --delete  /var/www/html/ [email protected]:/var/www/html"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
        do
          if [ $(pgrep rsync |wc -l) -le 0 ] ;then
                $RSYNC_CMD
          fi
       done
[[email protected] ~]# chmod +x /opt/inotify_rsync.sh
[[email protected] ~]# yum -y install openssh-clients
[[email protected] ~]# ssh-keygen
[[email protected] ~]# ssh-copy-id [email protected]

另外一端服务器:10.0.0.200
[[email protected] ~]# vim /etc/rsyncd.conf
 把read only = yes 注释掉。
[[email protected] ~]# rm -rf /var/run/rsyncd.pid
[[email protected] ~]# rsync --daemon --config=/etc/rsyncd.conf
[[email protected] ~]# chown -R backuper:backuper /var/www/html/

4、验证

在发起端的/var/www/html下新建文件,然后去10.0.0.200服务器上的/var/www/html下查看。

时间: 2024-08-29 00:03:14

文件触发式实时同步 Rsync+Sersync Rsync+Inotify-tools的相关文章

采用 unison + inotify + rsync 实现文件触发式实时单向/双向/多向文件同步

项目有个新的需求,在多台APP服务器随机上传图片/资源文件,其中一台APP需要读取上传的图片,这样之前做的rsync+inotify的设置就无法应对了. 所以研究了下多向触发式实时同步机制,大家可以实验一下,如果有不妥的地方,请联系我修正,多谢了. 以下开始正题 一.     简介 Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致.Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:

Rsync+lsync实现触发式实时同步

使用rsync+lsync实现触发式实时同步 服务器信息 centos6.5 主:192.168.5.4 搭建lsync 从:192.168.5.3 搭建rsync 1.1 从服务器设置 # yum -y install rsync xinetd # cp /etc/xinetd.d/rsync /etc/xinetd.d/rsync.blk # vim /etc/xinetd.d/rsync # default: off # description: The rsync server is a

企业实时同步方案----Sersync介绍

Sersync 项目利用 Inotify 和 Rsync 技术实现对服务器数据实时同步的解决方案,其中 Inotify 用于监控 Sersync 所在服务器上文件系统的事件变化,而 Rsync 是目前广泛使用的本地以及异地数据同步工具,其优点是只对变化的目录数据操作,甚至是一个文件不同的部分进行同步,所以其优势大大超过使用挂接文件系统或 scp 等方式进行镜像同步. 目前使用比较多的同步工具为 Inotify-tools 和 Openduckbill.Inotify-tools 在前面的博文介绍

使用rsync服务通过inotify实现触发式自动同步数据

  实验拓扑:HK36(Server 192.168.2.102)====HK46(Client 192.168.2.190)   实验要求:对HK46 /data/目录备份到HK36的/backup/下 (1)      rsync服务依赖于xinetd超级服务管理,首先安装xinetd服务 [[email protected] ~]# yum -y install xinetd (2)      进入rsync修改配置文件信息,将disable = yes改为no,重启服务,查看873端口是

Sersync实现触发式文件同步

目录 1:序言 1 2:inotify 1 2.1:inotify简介 1 2.2:inotify可以监视的文件系统事件 1 3:rsync 1 3.1:rsync简介 1 3.2:Rsync特性 2 4:sersync 2 4-1:sersync简介 2 4-2:sersync优点 2 5:两种架构 2 5.1:inotify-tools + rsync 2 5.2:sersync + rsync 2 6:为什么要用rsync+sersync 2 7:具体操作: 3 7.1:实验环境 3 7.

linux主从实时同步

linux主从同步,目前广泛采用的方案是使用rsync+inotify的方式来实现文件的触发更新.原理是采用inotify来对文件进行监控,当监控到文件有文件发生改变的时候,就会调用rsync实现触发式实时同步.我采用的是金山的一个居于inotify+rsync进行二次开发实现文件同步的小工具sersync,能够很方便的实现文件触发式同步,所以本文采用的rsync+sersync. 下面的对于inotify的简介都引自 http://blog.chinaunix.net/uid-20639775

实时同步服务知识梳理

01.为什么要使用实时同步服务 a-因为定时任务有缺陷,-一分钟以内的数据无法进行同步,容易造成数据丢失; b-用户上传数据信息需要实时备份保存. 实时同步实现及工作原理. 01. 实时监控同步数据目录信息变化; 02. 监控目录发生变化进行数据推送. 实时同步监控服务器部署过程,(inotify服务); 实时同步备份服务器部署过程(rsync服务) a.创建要存储数据的目录; b.利用实时同步的软件监控我们进行备份的数据目录 c利用rsync服务进行数据推送传输备份(一般是监控存储服务器上的目

三、sersync+rsync实现服务器文件实时同步

一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录 二.rsync+inotify-tools与rsync+sersync架构的区别? 1.rsync+inotify-tools a.inotify只能记录下被监听的目录发生了变化(增,删,改)并没

配置rsync+inotify实现站点文件实时同步

一.rsync简介 rsync是linux系统下的数据镜像备份工具.可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份.镜像服务器等应用. rsync的官方站点为http:rsync.samba.org/ 二.使用rsync备份工具 2.1.rsync命令的基本用法 用法类似于cp命令,例如将文件/etc/fstab 和目录/boot/grub同步备份到.opt目录下,其中-r表示递归整个目录,-l选项用来备份链接文