现在的位置: 首页 > Linux > Linux管理 > 正文
rsync+sersync+inotify实现服务器间文件同步之二:sersync+inotify实现
2013年12月17日 Linux管理, 服务器集群技术 ⁄ 共 5108字 暂无评论 ⁄ 被围观 5,897 views+

前提条件:rsync

在使用sersync之前,我们必须安装配置好rsync服务器。这里我们需要注意的是,纯粹的使用rsync做单向同步时,rsync的守护进程是运行在文件推送的服务器上,而接收的服务器是运行rsync客户端。使用sersync做文件实时同步刚好相反,用于接收文件的服务器运行rsync守护进程。

一、安装sersync:

下载地址:https://code.google.com/p/sersync/downloads/list

但须注意,由于我们天朝伟大的防火墙,这个地址可能是打不开的,可能需要翻墙后才能打开。

可选下载包有免编译二进制包和编译安装源码。我这里以二进制为例,下载后包含一个配置文件和一个可执行文件。

[root@web1 GNU-Linux-x86]# 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

为了方便使用,我们将其拷贝到如下目录:

[root@web1 GNU-Linux-x86]# mkdir /usr/local/sersync
[root@web1 GNU-Linux-x86]# mv * /usr/local/sersync

二、基本配置:

2.1 创建密码文件:

[root@web1 sersync]# pwd
/usr/local/sersync

[root@web1 sersync]# echo "password@123" > rsync.passwd
[root@web1 sersync]# chmod 600 rsync.passwd

2.2 编辑主配置文件:

以下红色部分为我修改的:

[root@web1 sersync]# vi 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="(.*)\.html"></exclude>
        <exclude expression="(.*)\.php"></exclude>

        <exclude expression="(.*)\.jpg"></exclude>

        <exclude expression="(.*)\.gif"></exclude>

        <exclude expression="(.*)\.png"></exclude>

        <exclude expression="(.*)\.css"></exclude>

        <exclude expression="(.*)\.js"></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/html">

            <!--指定远端rsync的地址和模块名-->

            <remote ip="192.168.204.129" name="webhome"/>
            <!--<remote ip="192.168.204.128" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>

    <rsync>
        <commonParams params="-artuz"/>

       <!--是否启用验证,并指定密码存放文件 -->
        <auth start="true" users="apache" passwordfile="/usr/local/sersync/rsync.passwd" />
        <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—>

    <!--是否启用执行完整rsync,并指定执行周期 -->    
    <crontab start="true" schedule="1200"><!--600mins-->
        <crontabfilter start="true">

        <exclude expression="(.*)\.html"></exclude>
        <exclude expression="(.*)\.php"></exclude>

        <exclude expression="(.*)\.jpg"></exclude>

        <exclude expression="(.*)\.gif"></exclude>

        <exclude expression="(.*)\.png"></exclude>

        <exclude expression="(.*)\.css"></exclude>

        <exclude expression="(.*)\.js"></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>

三、启用同步功能:

再次强调,所有sersync客户端都需要安装rsync,并启动为服务。在上述配置文件中须将所有需要同步的客户端IP(即rsync服务器端)加入。

使用如下命令进行初始化同步,并监视指定目录变化情况:

[root@web2 sersync2]# ./sersync2 -r
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
option: -r     rsync all the local files to the remote servers before the sersync work
daemon thread num: 10
parse xml config file
host ip : localhost    host port: 8008
use rsync password-file :
user is    apache
passwordfile is     /etc/rsyncd/rsyncd.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /var/www/html && rsync -artuz -R --delete ./  --port=873 apache@192.168.204.129::webhome --password-file=/etc/rsyncd/rsyncd.password >/dev/null 2>&1
run the sersync:
watch path is: /var/www/html

可以用如下参数指定线程数,使其并发执行:

./sersync -n num

其他参数:

参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

加入开机启动:

[root@web2 sersync2]# echo "/usr/local/sersync2/sersync2 -d -o /usr/local/sersync2/confxml.xml" >>/etc/rc.d/rc.local

【上篇】
【下篇】

给我留言

留言无头像?


×