sersync2 实时同步   不指定

jed , 2013-12-22 17:07 , 服务器技术 , 评论(0) , 阅读(207452) , Via 本站原创 | |
自动同步文件或者是目录

实现的方式:

在同步服务器上开启sersync,将监控路径中的文件同步到目标服务器,因此需要在同步服务器配置sersync,在同步目标服务器配置rsync

实验机器的地址分配:

Rsync 服务器:   192.168.1.112

Sersync2 服务器:192.168.1.110

系统环境

[root@liyao home]# uname -a
       Linux liyao 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux
       [root@liyao home]#

一、     rsync 服务器的配置

1.       先查看下是否安装了 rsync 软件包

[root@liyao ~]# rpm -qa | grep rsync

rsync-2.6.8-3.1

[root@liyao ~]#

2.     如果系统默认安装了 rsync 软件包,我们可以使用 yum 命令将其卸载

[root@liyao ~]# yum remove -y rsync

Loaded plugins: fastestmirror

Setting up Remove Process

Resolving Dependencies

--> Running transaction check

---> Package rsync.i386 0:2.6.8-3.1 set to be erased

--> Finished Dependency Resolution



Dependencies Resolved



================================================================================

Package         Arch           Version               Repository           Size

================================================================================

Removing:

rsync           i386           2.6.8-3.1             installed           392 k



Transaction Summary

================================================================================

Remove        1 Package(s)

Reinstall     0 Package(s)

Downgrade     0 Package(s)



Downloading Packages:

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Erasing        : rsync                                                    1/1



Removed:

  rsync.i386 0:2.6.8-3.1                                                      



Complete!

[root@liyao ~]#

3.     下载 rsync 3.0 的源码包


[root@liyao~]#wget-chttp://rsync.samba.org/ftp/rsync/rsync-3.0.8.tar.gz

--2011-08-20 08:05:05--  http://rsync.samba.org/ftp/rsync/rsync-3.0.8.tar.gz

Resolving rsync.samba.org... 216.83.154.106, 2001:470:1f05:1a07::1

Connecting to rsync.samba.org|216.83.154.106|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 790722 (772K) [application/x-gzip]

Saving to: `rsync-3.0.8.tar.gz'



100%[======================================>] 790,722      153K/s   in 5.7s  



2011-08-20 08:05:11 (135 KB/s) - `rsync-3.0.8.tar.gz' saved [790722/790722]


4.     将该软件包解压缩,并且进行编译安装

[root@liyao ~]# tar zxf rsync-3.0.8.tar.gz

[root@liyao ~]# cd rsync-3.0.8

[root@liyao rsync-3.0.8]# ./configure --prefix=/usr/ && make && make install

5.     建立 rsync 服务器的配置文件

uid = nobody

gid = nobody

use chroot = no

strict modes = yes

max connections = 200

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[test]

path = /home/

comment = test

read only = no

write only = no

ignore errors = yes

list = yes

uid = root

gid = root

6.     启动 rsync 的服务
[/code]
  [root@liyao ~]# rsync --daemon

[root@liyao ~]# netstat -npl | grep 873

tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      7731/rsync        

tcp        0      0 :::873                      :::*                        LISTEN      7731/rsync
[/code]


二、     配置Sersync2 服务器

二进制直接可运行

wget http://sersync.googlecode.com/files/sersync2.5_64bit_binary_stable_final.tar.gz

http://sersync.googlecode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz

1、将该软件包下载下来之后解压缩,并进行安装

[root@liyao ~]# tar zxf sersync2.5_32bit_binary_stable_final.tar.gz

[root@liyao ~]# ls

anaconda-ks.cfg  install.log.syslog

GNU-Linux-x86    sersync2.5_32bit_binary_stable_final.tar.gz

install.log

[root@liyao ~]# cd GNU-Linux-x86/

[root@liyao GNU-Linux-x86]# ls

confxml.xml  sersync2

[root@liyao GNU-Linux-x86]# mkdir /etc/sersync2

[root@liyao GNU-Linux-x86]# cp confxml.xml /etc/sersync2/

[root@liyao GNU-Linux-x86]# cp sersync2 /usr/bin/

# 安装该软件只要把软件中的文件拷贝到相应的目录即可

2. 修改 Sersync2 的配置文件

[root@liyao ~]# cat /etc/sersync2/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="false">

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

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

        <exclude expression="^info/*"></exclude>

        <exclude expression="^static/*"></exclude>

    </filter>

    <inotify>

        <delete start="true"/>

        <createFolder start="true"/>

        <createFile start="false"/>

        <closeWrite start="true"/>

        <moveFrom start="true"/>

        <moveTo start="true"/>

        <attrib start="false"/>

        <modify start="false"/>

    </inotify>



    <sersync>

        <localpath watch="/home">

            <remote ip="192.168.1.112" name="test"/>

            # 指定 rsyncd 服务器的地址和备份的模块名称

            <!--<remote ip="192.168.8.39" name="tongbu"/>-->

            <!--<remote ip="192.168.8.40" name="tongbu"/>-->

        </localpath>

        <rsync>

            <commonParams params="-artuz"/>

            <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>

            <userDefinedPort start="false" port="874"/><!-- port=874 -->

            <timeout start="false" time="100"/><!-- timeout=100 -->

            <ssh start="false"/>

        </rsync>

        <failLog path="/var/log/rsync_fail.log" 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@liyao ~]#


3. 我们来运行如下的备份命令

在运行备份命令之前我们先看下 /home 这个目录下面有文件或者是目录

[root@liyao home]# ls -l

total 4

drwxr-xr-x 2 root root 4096 Aug 20 08:51 liyao

[root@liyao home]#

[root@liyao ~]# sersync2 -r -d -o /etc/sersync2/confxml.xml

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

option: -d      run as a daemon

option: -o      config xml name:  /etc/sersync2/confxml.xml

daemon thread num: 10

parse xml config file

host ip : localhost     host port: 8008

daemon start,sersync run behind the console

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 /home && rsync -artuz -R --delete ./ 192.168.1.112::test >/dev/null 2>&1

run the sersync:

watch path is: /home

4. 我们到 rsyncd 服务器(1.112)的 /home 目录下看看是否有我在 1.110 /home/liyao 这个目录

[root@liyao home]# ls

liyao

[root@liyao home]#



那我们在从 1.110 的 /home 目录下创建 abc 目录,不用执行任何命令他会自动同步到 1.112 上

[root@liyao home]# mkdir abc

[root@liyao home]# ls

abc  liyao

[root@liyao home]#



我们在去 1.112 上去看下,abc 目录已经同步过来了
[/code]
[root@liyao home]# ll

total 8

drwxr-xr-x 2 root root 4096 Aug 21 04:12 abc

drwxr-xr-x 2 root root 4096 Aug 21 04:05 liyao

[root@liyao home]#

[/code]

OK ,这样我们就大功告成了。

=============================================

在主服务器上安装配置sresync
在google code下载sersync的可执行文件版本,里面有配置文件与可执行文件,这里用sersync2.5进行说明,新版本配置形式类似。

1.在主服务器上开启sersync守护进程,使sersync在后台运行,开启实时同步。

./sersync -d

过程如下:

[root@localhost GNU-Linux-x86]# ls
confxml.xml  sersync2
[root@localhost GNU-Linux-x86]# ./sersync2 -d
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
daemon thread num: 10
parse xml config file
host ip : localhost     host port: 8008
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)
please according your cpu ,use -n param to adjust the cpu rate
run the sersync:
watch path is: /opt/tongbu


表明,sersync已经开启,可以在本地监控路径下建立文件,查看远程是否同步成功。

2.在开启实时监控的之前对主服务器目录与远程目标机目录进行一次整体同步

./sersync -r

如果需要将sersync运行前,已经存在的所有文件或目录全部同步到远程,要以-r参数运行sersync,将本地与远程整体同步一次。
如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步。-r参数将会无效。

3.查看启动参数帮助

./sersync --help

4.指定配置文件

./sersync -o XXXX.xml

对于sersync使用可执行文件目录下的默认配置文件confxml.xml,如果需要使用另一个配置文件,可以使用-o参数指定其它配置文件。

5.指定默认的线程池的线程总数

./sersync -n num

例如 ./sersync -n 5 则指定线程总数为5,如果不指定,默认启动线程池数量是10,如果cpu使用过高,可以通过这个参数调低,如果机器配置较高,可以用-n跳高线程总数。

6.不进行同步,只运行插件

./sersync -m pluginName

例如./sersync -m command,则在监控到文件事件后,不对远程目标服务器进行同步,而是直接运行command插件。

7.多个参数可以配合使用

./sersync -n 8 -o abc.xml -r -d

表示,设置线程池工作线程为8个,指定abc.xml作为配置文件,在实时监控前作一次整体同步,以守护进程方式在后台运行。

8.通常情况下,对本地到远程整体同步一遍后,在后台运行实时同步。

./sersync -d


sersync2 完全安装配置说明(二) —-可选功能与xml高级配置

XML文件说明
sersync可选功能是通过xml配置文件来实现的,基本配置文件如下:


<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
     <host hostip="localhost" port="8008"></host>
     <filter start="false">
         <exclude expression="(.*)\.gz"></exclude>
         <exclude expression="^info/*"></exclude>
     </filter>
     <inotify>
         <delete start="true"/>
         <createFolder start="true"/>
<createFile start="true"/>
     </inotify>
     <debug start="false"/>
     <sersync>
         <localpath watch="/opt/tongbu">
             <remote ip="192.168.0.104" name="tongbu1"/>
             <!--<remote ip="192.168.8.39" name="tongbu"/>-->
             <!--<remote ip="192.168.8.40" name="tongbu"/>-->
         </localpath>
         <rsync>
            <commonParams params="-artuz"/>
             <auth start="false" users="root" passwordfile="/etc/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 60min execute once-->
         <crontab start="false" schedule="600"><!--600mins-->
             <crontabfilter start="false">
                 <exclude expression="*.gz"></exclude>
                 <exclude expression="info/*"></exclude>
             </crontabfilter>
         </crontab>
         <plugin start="false" name="command"/>
     </sersync>

下面做逐行的进行解释说明:

<host hostip="localhost" port="8008"></host>

hostip与port是针对插件的保留字段,对于同步功能没有任何作用,保留默认即可。

filter文件过滤功能
对于sersync监控的文件,会默认过滤系统的临时文件(以“.”开头,以“~”结尾),除了这些文件外,可以自定义其他需要过滤的文件。

<filter start="true">
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
</filter>

将start设置为 true,在exclude标签中,填写正则表达式,默认给出两个例子分别是过滤以”.gz”结尾的文件与过滤监控目录下的info路径(监控路径/info /*),可以根据需要添加,但开启的时候,自己测试一下,正则表达式如果出现错误,控制台会有提示。相比较使用rsync 的exclude功能,被过滤的路径,不会加入监控,大大减少rsync的通讯量。

inotify监控参数设定(优化)
对于inotify监控参数可以进行设置,根据您项目的特点优化srsync。

<inotify>
<delete start="true"/>
<createFolder  start="true"/>
<createFile start="true"/>
</inotify>

对于大多数应用,可以尝试把createFile(监控文件事件选项)设置为false来提高性能,减少 rsync通讯。因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的事 件close_write,同样可以实现文件完整同步。
注意:强将createFolder保持为true,如果将createFolder设为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控。所以除非特殊需要,请开启。默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不需要删除远程目标服务器的文件(目录),则可以将delete 参数设置为false,则不对删除事件进行监控。

Debug开启

<debug start="false"/>

设置为true,开启debug模式,会在sersync正在运行的控制台,打印inotify事件与rsync同步命令。

XFS文件系统

<fileSystem xfs="false"/>

对于xfs文件系统的用户,需要将这个选项开启,才能使sersync正常工作.

文件监控与远程同步设置

<localpath watch="/opt/tongbu">
<remote ip="192.168.0.104" name="tongbu1"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>

详见sersync2 完全安装配置说明(一) —-基本功能使用

Rsync参数配置

<rsync>
<commonParams params="-artuz"/>
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>

commonParams可以用户自定义rsync参数,默认是-artuz
auth start=”false” 设置为true的时候,使用rsync的认证模式传送,需要配置user与passwrodfile(–password-file=/etc/rsync.pas),来使用。userDefinedPort  当远程同步目标服务器的rsync端口不是默认端口的时候使用(–port=874)。timeout设置rsync的timeout时间(–timeout=100)。ssh 使用rsync -e ssh的方式进行传输。
失败日志脚步配置

<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>

对于失败的传输,会进行重新传送,再次失败就会写入rsync_fail_log,然后每隔一段时间(timeToExecute进行设置)执行该脚本再次重新传送,然后清空该脚本。可以通过path来设置日志路径。

Crontab定期整体同步功能

<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.gz"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>

crontab可以对监控路径与远程目标主机每隔一段时间进行一次整体同步,可能由于一些原因两次失败重传都失败了,这个时候如果开启了crontab功 能,还可以进一步保证各个服务器文件一致,如果文件量比较大,crontab的时间间隔要设的大一些,否则可能增加通讯开销。schedule这个参数是设置crontab的时间间隔,默认是600分钟
如果开启了filter文件过滤功能,那么crontab整体同步也需要设置过滤,否则虽然实时同步的时候文件被过滤了,但crontab整体同步的时候 如果不单独设置crontabfilter,还会将需过滤的文件同步到远程,crontab的过滤正则与filter过滤的不同,也给出了两个实例分别对 应与过滤文件与目录。总之如果同时开启了filter与crontab,则要开启crontab的crontabfilter,并按示例设置使其与filter的过滤一一对应。

插件设置

<plugin start="false" name="command"/>

当设置为true的时候,将文件同步到远程服务器后会调用name参数指定的插件。详见请看插件设置。


sersync2 完全安装配置说明(三) —-插件基本配置和使用

插件相关xml


<sersync>
......
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/>
<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>

如上面的xml所示,其中plugin标签设置为true时候,在同步文件或路径到远程之后后,调用插件。通过name参数指定需要执行的插件。目前支持的有command refreshCDN socket http四种插件。http插件目前由于兼容性原因去除,以后会重新加入。

以下模块(command refreshCDN http socket)可以单独使用(发生文件改变不同步只调用插件),只需在命令行下使用-m 参数即可。如果需要作为插件与同步程序一起使用,见同步程序说明的插件配置。

command插件
当文件同步完成后,会调用command插件,如同步文件是test.php,则test.php文件在改动之后,调用rsync同步到远程服务器后,调用command插件,执行

/bin/sh test.php  suffix >/dev/null 2>&1

如果suffix 设置了,则会放在inotify事件test.php之后
如果ignoreError为true,则会添加>/dev/null 2>&1
当然还可以设置command的filter,当filter为ture,include可以只对正则匹配到的文件,调用command。

“refreshCDN”,就在同步过程中将文件发送到目 的服务器后刷新cdn接口。如果不想使用,则将start属性设为false即可。如果需要使用其他插件,则查看其他plugin标签,将插件名称改为 xml中其它插件的名称即可。该模块根据chinaCDN的协议,进行设计,当有文件产生的时候,就向cdn接口发送需要刷新的路径位置。刷新CDN模块需要配置的xml文件如下。

<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>

其中 localpath watch 是需要监控的目录。

cdnifo标签制定了cdn接口的域名,端口号,以及用户名与密码。

sendurl标签是需要刷新的url的前缀。

regexurl标签中的,regex属性为true时候,使用match属性的正则语句匹配inotify返回的路径信息,并将正则匹配到的部分作为url一部分,

举例:

如果产生文件事件为:/data0/htdoc/cms.xoyo.com/site/jx3.xoyo.com/image/a/123.txt

经过上面的match正则匹配后,最后刷新的路径是:

http://pic.xoyo.com/cms/jx3/a/123.txt;

如果regex属性为false,最后刷新的路径是

http://pic.xoyo.com/cms/jx3.xoyo.com/images/a/123.txt;

socket插件
socket插件,开启该模块,则向指定ip与端口发送inotify所产生的文件路径信息。

Http插件
http插件,可以向指定域名的主机post,inotify监控的事件。



单独运行插件

插件也可以单独使用,即不对远程目标机进行同步,直接调用插件:

只调用command插件

./sersync -d -m command

只调用refreshCDN插件

./sersync -d -m refreshCDN

只调用socket插件

./sersync -d -m socket

只调用http插件

./sersync -d -m http

Tags: ,
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]