Sersync二次编译与使用(二)

Linux系统 gongyj 873℃ 已收录 0评论

在上一片文章中,介绍了sersync特点和工作原理,以及源代码如何编译。在了解相关特性后,接下来开始介绍sersync的配置文件如何设置与使用。对于rsync配置,在google上可以找到很多资料,以下只是一些必要的配置和使用说明,仅供参考,请根据您的实际情况修改。

sersync2.jpg

目的:
要把同步服务器中的目录/opt/tongbu1实时同步到三个同步目标主服务器中的/opt/tongbu1目录中。以做到文件的实时备份!
如下图所示,需要在同步主服务器上配置sersync,在同步目标服务器配置rsync,并在目标服务器开启rsync守候进程,这样在主服务器产生的文 件,就会被sersync实时同步到多个目标服务器。在CentOS系统下默认已经安装了rsync,只需进行配置,并开启rsync守候进程即可。

sersync2.png

一、配置同步目标服务器rsync
在多台目标服务器上配置如下(11、12、13都是同样的配置):

vim /etc/rsyncd/rsyncd.conf
uid=root
gid=root
port=873
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
motd file = /etc/rsyncd/rsyncd.motd
####limit user conn######
hosts allow =  192.168.1.10/24
hosts deny = *
#transfer logging = yes
#log format = %t %a %m %f %b
#syslog facility = local3
#timeout = 300
[tongbu1]
path=/opt/tongbu1
list = yes
ignore errors
auth users = rsync
comment  = website files
ignore errors = yes
read only = no
exclude = a/ b/   #####a,b directory not backup

hosts allow与hosts deny,read only可以设置在局部,也可设置在全局。

上面配置文件,表明允许主服务器(假设ip为192.168.1.10)访问,rsync同步模块名为[tongbu1],将同步过来的文件放入path指定的目录/opt/tongbu1。如果有多台从服务器,则每一台都需要进行类似的rsync配置,上面的uid gid要换成您服务器的相应用户,主意rysnc要有对被同步目录的操作权限。
配置好之后,使用如下命令,开启rsync守护进程:

/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

将重新编译好的sersync的可执行文件包传输到远程服务器上,配置形式如下。

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

编译好的sersync只有2个文件

cd /usr/local/sersync
ls
confxml.xml  sersync2
修改同步主服务器的配置文件:
vi confxml.xml

只修改下面内容即可:

<sersync>
 <localpathwatch="/opt/tongbu1">
   <remoteip="192.168.1.11"name="tongbu1"/>
   <remoteip="192.168.1.12"name="tongbu1"/>
  <remoteip="192.168.1.13"name="tongbu1"/>
 </localpath>
 <crontabstart="true"schedule="30"/>
 <pluginname="refreshCDN"start="true"/>
 </sersync>

启动服务

./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参数将会无效。./sersync –help

指定配置文件

./sersync -o XXXX.xml

 查看启动参数帮助

./sersync -n num

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

./sersync -m pluginName

不进行同步,只运行插件

例如./sersync -m command,则在监控到文件事件后,不对远程目标服务器进行同步,而是直接运行command插件。
多个参数可以配合使用

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

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

./sersync -d

后台运行服务

二、启动参数举例

/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/config.xml
/usr/local/sersync/sersync2 -d -o  /usr/local/sersync/config.xml
/usr/local/sersync/sersync2 -r -o  /usr/local/sersync/config.xml
/usr/local/sersync/sersync2  -n 5 -d -o /usr/local/sersync/config.xml

指定默认的线程池的线程总数,如果不指定,默认启动线程池数量是10(适用于四核服务器),如果cpu使用过高,可以通过这个参数调低,如果机器配置较高,可以用-n跳高线程总数。

修改可监控的最大目录数量使用如下,命令:

echo 50000000 > /proc/sys/fs/inotify/max_user_watches

三、XML配置文件说明

vi config.xml

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

<?xml version="1.0" encoding="ISO-8859-1"?>
<headversion="2.5">
    <hosthostip="localhost"port="8008"></host>
    <filterstart="false">
    <excludeexpression="(.*)\.gz"></exclude>
    <excludeexpression="^info/*"></exclude>
    </filter>
    <inotify>
    <deletestart="true"/>
    <createFolderstart="true"/>
    <createFilestart="true"/>
    </inotify>

    <debugstart="false"/>
    <fileSystem xfs="false"/>

    <sersync>
    <localpathwatch="/opt/tongbu1">
        <remoteip="192.168.1.11" name="tongbu1"/>
        <!--<remote ip="192.168.1.12" name="tongbu"/>-->
        <!--<remote ip="192.168.1.13" name="tongbu"/>-->
    </localpath>
    <rsync>
        <commonParams params="-artuz"/>
        <authstart="false" users="root" passwordfile="/etc/rsync.pas"/>
        <userDefinedPortstart="false" port="874"/><!-- port=874 -->
        <timeoutstart="false" time="100"/><!-- timeout=100 -->
        <sshstart="false"/>
    </rsync>
    <failLogpath="/tmp/rsync_fail_log.sh"timeToExecute="60"/><!--default every 60min execute once-->
    <crontabstart="false"schedule="600"><!--600mins-->
        <crontabfilterstart="false">
        <excludeexpression="*.gz"></exclude>
        <excludeexpression="info/*"></exclude>
        </crontabfilter>
    </crontab>
    <pluginstart="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.1.20" port="8009"/>
    </localpath>
    </plugin>
    <plugin name="refreshCDN">
    <localpath watch="/data/site/">
        <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
        <sendurl base="http://file.example.com/file1"/>
        <regexurl regex="false" match="file.example.com/site([/a-zA-Z0-9]*).example.com/images"/>
    </localpath>
    </plugin>
</head>

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

1、保留字段

3    <hosthostip="localhost"port="8008"></host>

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

2、filter文件过滤功能

4    <filterstart="true">5    <excludeexpression="(.*)\.gz"></exclude>
6    <excludeexpression="^info/*"></exclude>7    </filter>

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

3、inotify监控参数设定(优化)

8     <inotify>
9     <deletestart="true"/>
10    <createFolderstart="true"/>
11    <createFilestart="true"/>
12    </inotify>

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

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

4、开启debug调试

14    <debugstart="false"/>

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

5、XFS文件系统

15    <fileSystem xfs="false"/>

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

6、文件监控与远程同步目录设置

18    <localpath watch="/opt/tongbu">
19        <remote ip="127.0.0.1" name="tongbu1"/>
20        <!--<remote ip="192.168.8.39" name="tongbu"/>-->
21        <!--<remote ip="192.168.8.40" name="tongbu"/>-->
22    </localpath>

详见文章:Sersync二次编译与使用(一)

7、Rsync参数配置

23    <rsync>
24        <commonParams params="-artuz"/>
25        <auth start="false" users="root" passwordfile="/etc/rsyncd/rsync.passsword"/>
26        <userDefinedPort start="false" port="874"/><!-- port=874 -->
27        <timeout start="false" time="100"/><!-- timeout=100 -->
28        <ssh start="false"/>
29    </rsync>

authstart="false" 设置为true的时候,使用rsync的认证模式传送,需要配置user与passwrodfile(–password-file=/etc/rsyncd/password),来使用。userDefinedPort 当远程同步目标服务器的rsync端口不是默认端口的时候使用(–port=874)。timeout设置rsync的timeout时间(–timeout=100)。ssh使用rsync -e ssh的方式进行传输。

ssh模式默认只支持22端口,源代码已经修改过了,配置文件只需改动一下就可以支持非22端口传输了。

19        <remoteip="bakuper@192.168.1.11" name="/opt/tongbu1"/>
28    <ssh start="false" port="22"/>

19行业需要改一下,将远程ip改成”用户名+IP“,name改成远程目录名字,自己的机器端口是多少,改成多少就可以了。

8、失败日志脚步配置

30    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

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

9、Crontab定时整体同步功能

31    <crontab start="false" schedule="600"><!--600mins-->
32        <crontabfilter start="false">
33        <exclude expression="*.php"></exclude>
34        <exclude expression="info/*"></exclude>
35        </crontabfilter>
36    </crontab>
37    <plugin start="false" name="command"/>

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

10、插件功能设置:

37    <pluginstart="false"name="command"/>

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

40    <plugin name="command">
41    <param prefix="/bin/sh" suffix="" ignoreError="true"/>    <!--prefix /opt/tongbu/mmm.sh suffix-->
42    <filter start="false">
43        <include expression="(.*)\.php"/>
44        <include expression="(.*)\.sh"/>
45    </filter>

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

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

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

(1)socket插件

46    </plugin>
47    <plugin name="socket">
48    <localpath watch="/opt/tongbu">
49        <deshost ip="192.168.1.20" port="8009"/>
50    </localpath>
51    </plugin>

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

(2)刷新CDN插件

52    <plugin name="refreshCDN">
53    <localpath watch="/data/website/cms.example.com/site/">
54        <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
55        <sendurl base="http://img.example.com/cms"/>
56        <regexurl regex="false" match="cms.example.com/site([/a-zA-Z0-9]*).example.com/images"/>
57    </localpath>
58    </plugin>

“refreshCDN”,就在同步过程中将文件发送到目 的服务器后刷新cdn接口。如果不想使用,则将start属性设为false即可。如果需要使用其他插件,则查看其他plugin标签,将插件名称改为 xml中其它插件的名称即可。

该模块根据chinaCDN的协议,进行设计,当有文件产生的时候,就向cdn接口发送需要刷新的路径位置。

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

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

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

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

举例:

如果产生文件事件为:/data/website/cms.example.com/site/file.example.com/images/a/123.png

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

http://img.example.com/cms/file/a/123.png;

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

http://img.example.com/cms/file.example.com/images/a/123.png;

(3)Http插件

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

其中mask是事件掩膜,8为修改保存,其它inotify事件掩码,见google。

(4)单独运行插件

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

只调用command插件:

./sersync -d -m command

只调用refreshCDN插件:

./sersync -d -m refreshCDN

只调用socket插件:

./sersync -d -m socket

只调用http插件:

./sersync -d -m http
本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/210.html
喜欢 (0)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……