SERSYNC实时同步

感谢金山,受益于开源,不忘奉献开源,以下是使用金山 sersync 在各分布式站点间进行实时同步的一例。
sersync使用 inotify 监控操作系统对磁盘的操作事件,通过接收到的事件生成带特定参数的rsync命令行并执行,从而达到实时增量同步的目的。
在使用pureftp做ftp服务器时,用flashfxp客户端向ftp服务器上传一个文件会依次触发以下几个主要事件:
createFile :pureftp生成临时文件pureftpd-rename.xxxx.xxxxxxxx
openFile:ftp服务器端以可写方式打开pureftpd-rename.xxxx.xxxxxxxx
Modify:向临时文件写入数据,在文件上传没有完成前会触发大量此事件
closeWrite:传输完毕,服务器关闭可写文件句柄触发该事件。
moveFrom:.pureftpd-rename.xxxx.xxxxxxxx,应该是从目录数据区删除文件相关信息
moveTo:<实际文件名>,应该是在目录数据区设置新的文件相关信息。

经过分析,在通常的应用中只需对 createFolder、closeWrite、moveFrom、moveTo四个事件进行监控。对于大多数可能对文件产生修改的操作,都要以可写的方式打开,在文件句柄关闭时,必然会产生可写文件关闭(closeWrite)事件,固不需要对其他文件操作事件进行处理,即可实现增量实时同步。

详细配置如下:

1.配置远端rsync(接收方)
编辑修改/etc/rsync.conf:
secrets file = /etc/rsyncd.secrets
#指定身份验证的用户密码文件
[pppei]
#同步模块名
uid = www
#rsync进程所属用户
gid = www
#rsync进程所属组
path = /var/www/
#模块所对应目录
comment = sync with www_root
#描述信息
list = no
#是否允许显示文件列表
auth users = pppei
#验证用户
read only = no
#是否为只读,因为要写数据所以改为否
hosts allow=xx.xx.xx.xx/32
#允许使用此模块的地址范围

创建用户密码文件:
touch /etc/rsyncd.secrets <    >pppei:123456
>EOF
chmod 600 /etc/rsyncd.secrets

在rc.local中加入如下内容使rsync开机可以自启动:
rsync –daemon –config /etc/rsyncd.conf

2.配置sersync(推送方)

解压sersync到/usr/sersync/。

修改sersync配置文件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=”false”/>
<filter start=”true”>
<exclude expression=”(.*)\.php”></exclude>
<exclude expression=”(.*)\.html”></exclude>
<exclude expression=”(.*)\.htm”></exclude>
<exclude expression=”^tmp/*”></exclude>
<!—监控事件的过程中过滤特定文件,和特定文件夹的文件 –>
</filter>
<inotify>
<delete start=”true”/>
<createFolder start=”true”/>
<createFile start=”true”/>
<closeWrite start=”true”/>
<moveFrom start=”true”/>
<moveTo start=”true”/>
<attrib start=”false”/>
<modify start=”true”/>
<!—设置要监控的事件 –>
</inotify>
 
<sersync>
<localpath watch=”/var/www”>
<!—设置要监控的目录 –>
<remote ip=”xx.xx.xx.xx” name=”pppei”/>
<!—指定远端rsync服务器的地址和模块名 –>
</localpath>
<rsync>
<commonParams params=”-artuz”/>
<auth start=”true” users=”pppei” passwordfile=”/usr/sersync/rsync.pas”/>
<!—是否启用验证,并指定密码存放文件 –>
<userDefinedPort start=”false” port=”874″/><!– port=874 –>
<timeout start=”false” time=”100″/><!– timeout=100 –>
<ssh start=”false”/>
</rsync>
<failLog path=”/tmp/rsync_fail_log.sh” timeToExecute=”60″/><!–default every 60mins execute once–>
<crontab start=”true” schedule=”1440″><!–600mins–>
<!—是否启用执行完整rsync,并指定执行周期 –>
<crontabfilter start=”true”>
<!—设置完整执行rsync时的过滤条件 –>
<exclude expression=”*.php”></exclude>
<exclude expression=”*.html”></exclude>
<exclude expression=”*.htm”></exclude>
<exclude expression=”tmp/*”></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>

创建密码文件:
touch /usr/sersync/rsync.pas <    >123456
>EOF
chmod 600 /usr/sersync/rsync.pas

在rc.local中加入如下内容使sersync开机可以自启动:
/usr/sersync/sersync2 -d -o /usr/sersync/confxml.xml


你可能感兴趣的:(sersync)