基于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上传文件,测试

posted @ 2020-01-20 11:33  大葱丁  阅读(185)  评论(0编辑  收藏  举报