基于sersync实现实时同步
sersync是国人二次开发的一块同步软件。整合了rsync和inotify模块,可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;并使用rsync进行同步,在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。
#下载包
git clone https://github.com/wsgzao/sersync.git
配置rsync
//安装nfs
[root@nfs ~]# yum install nfs-utils -y
//配置nfs
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
//创建目录
[root@nfs ~]# mkdir -p /data
//创建用户
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u666 -g666 -M -s /sbin/nologin www
//授权
[root@nfs ~]# chown -R www.www /data
//重启nfs(restart) 下次开机自启 (enable)
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enable nfs
配置sersync
//将下载好的二进制包直接解压
[root@clientb sersync]# ll
总用量 1772
-rwxr-xr-x 1 root root 2214 10月 26 2011 confxml.xml
-rwxr-xr-x 1 root root 1810128 10月 26 2011 sersync2
//编辑sersync配置文件
[root@clientb sersync]# vim confxml.xml
[root@clientb data]# cat /usr/local/sersync/confxml.xml
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
//设置文件系统为xfs
<fileSystem xfs="true"/>
<filter start="false">
<exclude expression="(.*).svn"></exclude>
<exclude expression="(.*).gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
//监视动作,全部选true,监控全部动作
<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>
//监控本地/data目录
<localpath watch="/data">
//同步至172.16.1.202的data模块
<remote ip="172.16.1.202" name="data"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
//选择参数 avz
<commonParams params="-avz"/>
//认证开启,虚拟用户dhc,存放密码文件/etc/rsync.pass
<auth start="true" users="dhc" passwordfile="/etc/rsync.pass"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
//重传时间
<timeout start="true" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<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>
//根据上面配置创建密码文件
[root@clientb data]# echo "123456" > /etc/rsync.pass
[root@clientb data]# chmod 600 /etc/rsync.pass
配置备份服务器
//安装rsync服务,和sersync配置保持一致性
[root@clientc ~]# yum install rsync -y
//配置rsync服务,要和sersync上的要求同步
[root@clientc ~]# vim /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = dhc
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
[data]
path = /data
//创建www用户--》
[root@clientc ~]# id www
uid=666(www) gid=666(www) groups=666(www)
[root@clientc ~]# mkdir /data
[root@clientc ~]# chown -R www.www /data
[root@clientc ~]# echo "dhc:123456" > /etc/rsync.passwd
[root@clientc ~]# chmod 600 /etc/rsync.passwd
运行sersync
[root@clientb data]# /usr/local/sersync/sersync2 -h #查看帮助文档
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
选择使用sersync命令
## 运行sersync程序,指定配置文件/usr/local/sersync/confxml.xml
[root@clientb data]# /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
##可以在下面的提示中选择实际运行的命令进行测试
测试:在web服务器上挂载
// 挂载nfs目录
[root@servera ~]# mount.nfs 172.16.1.201:/data /var/www/html/
[root@servera html]# df -h
Filesystem Size Used Avail Use% Mounted on
。
。
。
172.16.1.201:/data 17G 2.5G 15G 15% /var/www/html
//使用httpd上传文件,测试