Linux服务器下文件目录实时同步(2)

二、Rsync client端配置:

1、首先需要下载sersync最新版本2.5

[root@localhost ~]# wget http://sersync.googlecode.com/files/sersync2.5_64bit_binary_stable_final.tar.gz

2、解压移动到/usr/local下,并编辑confxml.conf文件,confxml.conf是sersync的配置文件,用于指定需要同步的目录及是否刷新cdn接口等,(我只是测试cdn这个没有用到,这个你要是用在生产环境中,可以根据自己的需要来定)

[cce]
[root@localhost ~]# tar zxvf sersync2.5_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/confxml.xml
GNU-Linux-x86/sersync2
[root@localhost ~]# mv GNU-Linux-x86/ /usr/local/
[root@localhost ~]# cd /usr/local/GNU-Linux-x86/
[root@localhost GNU-Linux-x86]# vim 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="/usr/local/webserver/nginx/html/" debug="false" >
<remote ip="192.168.18.210" name="web_bak"/>
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="false" users="test" passwordfile="/etc/rsync.password"/>
<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-->
<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="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>
[/cce]
当前最新版中已经增加了同步过滤,密码验证以及--delete功能,但仍然不支持多目录同步到多目录的操作。

这是confxml.conf文件的内容,解释一下:我使用的用户名是test,密码存放在/etc/rsync.password里。将本机的/usr/local/webserver/nginx/html/实时目录同步到局域网内IP为192.168.15.210端,定义的模块为”web_bak”,并且开启了–delete功能。

4、密码文件的格式介绍

[root@hxqm-tomcat ~]# cat /etc/rsync.password

test#

解释:”test”代表的是Rsync server端的密码,并且要以”#”做结尾。如果有多个密码,增加多行就行。

5、首先要确定同步目录下有文件

cd /usr/local/webserver/nginx/html/

ls

6、启动实时同步功能(完整同步一次并开启驻留进程)

[root@hxqm-tomcat sersysnc2]# ./sersync2 -d -r

如果想要了解更多的参数 请使用sersync –help获取帮助信息

同步是把Rsync client端的文件同步到Rsync Remote端,所以你要是测试的话就在Rsync client 端建立或修改文件,在Rsync server端看效果。

# ./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命令推送一遍

参数-n:指定开启守护线程的数量,默认为10个

参数-o:指定配置文件,默认使用 confxml.xml文件

参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块

参数-m:单独启用其他模块,使用 -m socket 开启socket模块

参数-m:单独启用其他模块,使用 -m http 开启http模块

不加-m 参数,则默认执行同步程序

 

示例:

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

# ./sersync2 –d

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

# ./sersync2 –r

如果需要将sersync运行前,已经存在的所有文件或目录全部同步到远程,要以-r参数运行sersync,将本地与远程整体同步一次。

如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步。-r参数将会无效。

(3) 指定配置文件

./sersync2 -o confxml.xml

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

(4) 指定默认的线程池的线程总数

./sersync2 -n num

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

(5) 多个参数可以配合使用

./sersync2 -n 8 -o abc.xml -r –d

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

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

./sersync2 -r –d

说明:需要根据情况调整线程数,否则负载比较高。 启动服务要么进入程序目录直接启动,否则要指定全路径与配置文件才行。

7、如果是多个客户端和服务器端目录同步的话

需要做一下操作:

客户端创建/etc/rsyncd.conf,文件下,如下设置,其他设置都和上面的举例一样,启动rsync,加入系统自动启动服务:

uid=root

gid=root      #此处只限定root做同步

max connections=2

use chroot=no     #这里都不要使用chroot

log file=/var/log/rsyncd.log

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsyncd.lock

[second]      #这里要和服务器端得配置文件保持一致

path=/data/www/

comment =lonlife.net web

ignore errors = yes

read only = no

hosts allow = 192.168.15.211/32

hosts deny = *

auth users test

secrets file = /etc/rsyncd.secrets

 

服务器端confxml.xml

<sersync>

<localpath watch=”/usr/local/webserver/nginx/html/” debug=”false” >

<remote ip=”192.168.18.210″ name=”web_bak”/>

<remote ip=”192.168.18.7″ name=”second”/>  #加此行,ip是新加客户端ip

</localpath>

<rsync>

其他的更多的客户端同例。

8、如果是一个客户端得多个目录进行同步

则需要在客户端文件/etc/rsyncd.conf下面再加一个目录

+++++++++++++++++++++++++++++

[third]      #这里要和服务器端得配置文件保持一致

path=/var/www/

comment =lonlife.net web

ignore errors = yes

read only = no

hosts allow = 192.168.15.211/32

hosts deny = *

auth users test

secrets file = /etc/rsyncd.secrets

服务器端设置confxml.xml

[cce]
<sersync>

<localpath watch="/usr/local/webserver/nginx/html/" debug="false" >

<remote ip="192.168.18.210" name="web_bak"/>

</localpath>

<localpath watch="/var/www/" debug="false" >

<remote ip="192.168.18.210" name="third"/>

</localpath>

<rsync>

 
[/cce]

 

1条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注