使用sersync完成远程触发式文件同步

在做网站或者文件服务集群时,通常会用rsync + inotify的方式实现各服务器间的文件同步,而使用脚本实现同步的效率较为低下,因此,这里我将使用sersync实现这一功能。

1.Inotify简介

Inotify 是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能,内核要求2.6.13以上,inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件,Inotify 可以监视的文件系统事件包括:

IN_ACCESS,即文件被访问

IN_MODIFY,文件被 write

IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等

IN_CLOSE_WRITE,可写文件被 close

IN_CLOSE_NOWRITE,不可写文件被 close

IN_OPEN,文件被 open

IN_MOVED_FROM,文件被移走,如 mv

IN_MOVED_TO,文件被移来,如 mv、cp

IN_CREATE,创建新文件

IN_DELETE,文件被删除,如 rm

IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己

IN_UNMOUNT,宿主文件系统被 umount

IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)

备注:上面的文件也包括目录。

2.rsync简介

rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

rsync 包括如下的一些特性:

能更新整个目录和树和文件系统;

有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;

对于安装来说,无任何特殊权限要求;

对于多个文件来说,内部流水线减少文件等待的延时;

能用rsh、ssh 或直接端口做为传输入端口;

支持匿名rsync 同步文件,是理想的镜像工具;

3.sersync简介

sersync利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。由金山的周洋开发完成,是目前使用较多的文件同步工具之一。该工具和其他的工具相比有如下优点:

sersync是使用c++编写,由于只同步发生更改的文件,因此比其他同步工具更节约时间、带宽;

安装方便、配置简单;

使用多线程进行同步,能够保证多个服务器实时保持同步状态;

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

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

自带socket与http协议扩展,你可以方便的进行二次开发;

4.使用sersync实现触发式文件同步实例:

实验环境:

主服务器:192.168.1.60

从服务器:192.168.1.66

操作系统版本:Redhat5.8-32bit

(1)从服务器配置:

(a)安装rsync服务

yum install rsync -y

(b)编辑/etc/rsyncd.conf文件,(配置文件通常需要手动创建)

# Rsync configuration file
uid = root
gid = root
port = 873
max connections = 20000
use chroot = yes
timeout = 200
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log format = %t %a %m %f %b
auth users = root
secrets file = /etc/rsyncd.secrets
[webfile] #设置模板
path = /web/test/ #同步文件的目录
comment = "test directory file"
list = yes #是否允许列出文件
read only = no
ignore errors = yes
hosts allow = 192.168.1.60/24 #访问权限
hosts deny = *

(c)rsync密码文件创建

echo "root:redhat" > /etc/rsync.secret
chmod 600 /etc/rsync.secret #更改密码文件的权限

(d)启动rsync服务

rsync --daemon --config=/etc/rsyncd.conf

(e)验证服务是否启动

[[email protected] test]# netstat -lntup | grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      7541/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      7541/rsync

(2)主服务器配置

(a)安装rsync

yum install -y rsync

(b)安装sersync

下载sersync http://www.jb51.net/softs/40308.html

解压并移动至相应目录

tar xf sersync_32bit_binary_stable_final.tar.gz 
mv GNU-Linux-x86/ /usr/local/sersync/

(c)配置sersync

  1 <?xml version="1.0" encoding="ISO-8859-1"?>
  2 <head version="2.5">
      <!—服务器地址及端口 –>
  3     <host hostip="192.168.1.60" port="8008"></host>
  4     <debug start="false"/>
  5     <fileSystem xfs="false"/>
  6     <filter start="false">
  7         <exclude expression="(.*)\.svn"></exclude>
  8         <exclude expression="(.*)\.gz"></exclude>
  9         <exclude expression="^info/*"></exclude>
 10         <exclude expression="^static/*"></exclude>
    <!—监控事件的过程中过滤特定文件,和特定文件夹的文件 –>
 11     </filter>
 12     <inotify>
 13         <delete start="true"/>
 14         <createFolder start="true"/>
 15         <createFile start="false"/>
 16         <closeWrite start="true"/>
 17         <moveFrom start="true"/>
 18         <moveTo start="true"/>
 19         <attrib start="false"/>
 20         <modify start="alse"/>
 21     </inotify>
 22 
 23     <sersync>
 24         <localpath watch="/data/test">
     <!—设置从服务器的地址和模块 –>
 25             <remote ip="192.168.1.66" name="webfile"/>
 26         </localpath>
 27         <rsync>
 28             <commonParams params="-artuz"/>
      <!—启用认证以及密码文件 –>
 29             <auth start="true" users="root" passwordfile="/etc/rsync.secret"/>
 30             <userDefinedPort start="false" port="873"/><!-- port=874 -->
      <!—定义超时时间 –>
 31             <timeout start="true" time="100"/><!-- timeout=100 -->
 32             <ssh start="false"/>
 33         </rsync>
 34         <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
      <!—设置是否启动完全同步,每多少分钟同步一次 –>
 35         <crontab start="true" schedule="600"><!--600mins-->
      <!—完全同步时的过滤条件 –>
 36             <crontabfilter start="false">
 37                 <exclude expression="*.php"></exclude>
 38                 <exclude expression="info/*"></exclude>
 39             </crontabfilter>
 40         </crontab>
 41         <plugin start="false" name="command"/>
 42     </sersync>
 43 
 44     <plugin name="command">
 45         <param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
 46         <filter start="false">
 47             <include expression="(.*)\.php"/>
 48             <include expression="(.*)\.sh"/>
 49         </filter>
 50     </plugin>
 51 
 52     <plugin name="socket">
 53         <localpath watch="/opt/tongbu">
 54             <deshost ip="192.168.138.20" port="8009"/>
 55         </localpath>
 56     </plugin>
 57     <plugin name="refreshCDN">
 58         <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
 59             <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
 60             <sendurl base="http://pic.xoyo.com/cms"/>
 61             <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
 62         </localpath>
 63     </plugin>
 64 </head>

(d)创建密码文件

echo "redhat" > /etc/rsync.secret

只需要密码即可,否则会报错

(e)启动sersync

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

在主服务器上进行文件更新,检测从服务器是否能够同步成功。

至此,基于sersync实现触发式文件同步的实验完成。

附:

为防止sersync意外关闭,可使用如下脚本

#!/bin/bash
#Purpose: Check sersync whether it is alive
SERSYNC="/usr/local/sersync/sersync2"
CONF_FILE="/usr/local/sersync/confxml.xml"
STATUS=$(ps aux |grep ‘sersync2‘|grep -v ‘grep‘|wc -l)
if [ $STATUS -eq 0 ]; then
        $SERSYNC -d -r -o $CONF_FILE &
fi

添加至任务计划中

*/5 * * * * /root/script/check_sersync.sh &> /dev/null
时间: 2024-11-25 05:34:11

使用sersync完成远程触发式文件同步的相关文章

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.

Sersync实现触发式文件同步 替代inotify和rsync

参考文章 http://blog.chinaunix.net/uid-20639775-id-3011124.html http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10738&page=1&extra=#pid113148 http://zyan.cc/sersync/ mrsync https://sourceforge.net/projects/mrsync/ 服务器端1.安装rsync  两边都要做yum

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

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

一.概述 1.Rsync+Sersync 是什么? 1)Sersync使用c++编写基于inotify开发的触发机制: 2)Sersync可以监控所监听的目录发生的变化(包括新建.修改.删除),具体到一个文件名或目录名,然后触发rsync同步,只同步发生改变的文件或目录.如果只是目录下的文件发生变化,则只会同步变化的文件而不会同步目录.只有目录本身发生变化的时候才会同步目录. 3)自带crontab功能,只需在 xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次.无需再额外配置cron

使用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实现触发式同步

金山的一个居于inotify+rsync进行二次开发实现文件同步的小工具sersync,能够很方便的实现文件触发式同步 Inotify 是基于inode级别的文件系统监控技术,是一种强大的.细粒度的.异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能,内核要求2.6.13以上,inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件 rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软

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

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

烂泥:linux文件同步之rsync学习(一)

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天刚好有空就打算开始学习linux下的文件同步软件rsync,在学习rsync时,我们可以分以下几个步骤进行: 1. rsync是什么 2. rsync的工作原理 3. rsync优点 4. rsync认证方式 5. 安装rsync 6. rsync命令参数详解 7. 配置rsync 8. rsync的启动与关闭 9. rsync同步实例 说明:rsync服务器与客户端使用的OS均为:centos 6.5 64bit. 一.rsync是什么 在

linux系统中Rsync文件同步方案

linux服务器下Rsync文件同步配置 Rsync(remote synchronize) 远程数据同步工具,可以使用"Rsync算法"同步本地和远程主机之间的文件.Rsync的好处是只同步两个文件不同的部分,相同的部分不在传递.类似于增量备份,这使的在服务器传递备份文件或者同步文件. crontab配合rsync 使用可达到定时备份同步任务. Rsync部署环境1.服务器准备| Host | IP | ----------|| Server | 192.168.60.110 | -