10.0.1.61(分发)10.10.240.113(deam1)10.0.1.49(deam2)当10.0.1.49的/data/wwwroot目录下文件发生改变,sersync2就会同步到10.0.1.61和10.10.240.113上面,首先需要配置rsync同步配置完成,如下:
deam安装
分别在两台机器上部署rsync,以deam守护启动
[root@linuxea ]# yum install rsync -y
[root@linuxea ]# echo "rsync_backup:linuxea" >/etc/rsync.password
[root@linuxea ]# chmod 600 /etc/rsync.password
防火墙放行
临时添加如下
iptables -I INPUT 4 -p tcp -m state --state NEW,ESTABLISHED -m tcp -m multiport --dports 873 -m comment --comment "rsyncd" -j ACCEPT
配置文件如下
[root@linuxea ]# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
lof file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 10.0.1.61,10.10.240.113,10.0.1.49 #允许的ip
hosts deny = *
auth users = rsync_backup #认证用户
secrets file = /etc/rsync.password
###################################################
[linuxea]
path=/data/wwwroot/
创建目录后启动
[root@linuxea ]# mkdir -p /data/wwwroot
[root@linuxea ]# systecmctl start rsyncd
同步机器-10.0.1.49
在49机器上将本地的文件同步到两台deam中
确保可以进行同步,测试安装rsync
[root@linuxea ]# yum install rsync -y
[root@linuxea ]# echo "rsync_backup:linuxea" >/etc/rsync.password
[root@linuxea ]# chmod 600 /etc/rsync.password
测试
[root@linuxea ]# rsync -avz /data/wwwroot/ rsync_backup@10.10.240.113::linuxea --password-file=/etc/rsync.password
sending incremental file list
sent 40 bytes received 9 bytes 98.00 bytes/sec
total size is 0 speedup is 0.00
[root@linuxea ]# rsync -avz /data/wwwroot/ rsync_backup@10.0.1.61::linuxea --password-file=/etc/rsync.password
sending incremental file list
sent 40 bytes received 9 bytes 98.00 bytes/sec
total size is 0 speedup is 0.00
安装sersync2
在49的机器安装sersync2,如果49机器的/data/wwwroot下文件发生改变则同步到两台deam机器上
我们在这里download : http://code.google.com/p/sersync/downloads/list
[root@linuxea ]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@linuxea ]# mkdir /usr/local/sersync/
[root@linuxea ]# mv GNU-Linux-x86/ /usr/local/sersync/
sersyncd启动脚本:
[root@linuxea ]# cat /etc/init.d/sersyncd
#!/bin/bash
. /etc/rc.d/init.d/functions
case "$1" in
start)
cd /usr/local/sersync/GNU-Linux-x86/
./sersync2 -r -d -o /usr/local/sersync/GNU-Linux-x86/confxml.xml
if [ $? -eq 0 ]
then
echo -e "Staring sersyncd [ OK ]"
exit 0
fi
;;
stop)
kill `ps -ef|awk '/[s]ersync2/{print $2}'`
if [ $? -eq 0 ]
then
echo -e "Stopping sersyncd [ OK ]"
exit 0
fi
;;
status)
ps -ef|awk '/[s]ersync2/{print $0}'
;;
esac
confxml.xml配置
1,修改sersync同步的目录
<sersync>
<localpath watch="/data/wwwroot">
<remote ip="10.0.1.61" name="linuxea"/>
<remote ip="10.10.240.113" name="linuxea"/>
</localpath>
<rsync>
如下:
<sersync>
<localpath watch="/data/wwwroot"> 本地目录,/data/wwwroot
<remote ip="10.0.1.61" name="linuxea"/> 同步到rsync的ip和rsync模块名称,我这里的是linuxea,可参考上rsyncd.conf中的配置
<remote ip="10.10.240.113" name="linuxea"/>
</localpath>
<rsync>
2,修改rsync同步配置
| <rsync>
| <commonParams params="-artuz"/>
| <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
| <userDefinedPort start="false" port="874"/><!-- port=874 -->
| <timeout start="false" time="100"/><!-- timeout=100 -->
| <ssh start="false"/>
| </rsync>
如下:
| <rsync>
| <commonParams params="-artuz"/> 同步参数
| <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/> 同步的用户名和密码,这里需要改成true才能生效
| <userDefinedPort start="false" port="874"/><!-- port=874 --> 端口默认
| <timeout start="false" time="100"/><!-- timeout=100 --> timeout设置rsync的timeout时间(-timeout=100)。
| <ssh start="false"/> 如果true时表示ssh使用rsync –e ssh的方式进行传输
| </rsync>
3,rsync_fail_log位置修改
<failLog path="/usr/local/sersync/GNU-Linux-x86/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
创建目录/usr/local/sersync/GNU-Linux-x86/logs/
4,多实例的同步情况(针对多个模块同步的情况)
sersync -r –d –o /usr/local/sersync/GNU-Linux-x86/confxml1.xml
sersync -r –d –o /usr/local/sersync/GNU-Linux-x86/confxml2.xml
-r :-r参数作用是在开启实时监控之前对主服务器目录与远程目标机目录进行一次整体同步,如果需要将sersync运行前,主服务器目录下已经存在的所有文件或目录全部同步到远端,则需要指定-r参数运行sersync,将本地与远程整体同步一次。说明:如果设置了过滤器,即在xml配置文件中,filter为true,则暂时不能使用-r参数进行整体同步。–o : 不指定-o参数时,sersync可执行文件目录下的默认配置文件confxml.xml,如果需要使用其他的配置文件,可以使用-o参数指定其他配置文件,通过-o参数,我们可以指定多个不同的配置文件,从而实现sersync多进行多实例的数据同步。–n : -n参数为指定默认的线程池的现充总数。-d :后台运行-m :不同步,只允许插件
5,调试模式:
<debug start="false"/>
设置为true值时,开启debug模式,会在sersync正在运行的控制台,打印inotify时间与rsync的同步命令。
6,filter文件过滤:
<filter start="false">
| <exclude expression="(.*).svn"></exclude>
| <exclude expression="(.*).gz"></exclude>
| <exclude expression="^info/*"></exclude>
| <exclude expression="^static/*"></exclude>
</filter>
如下:
系统默认提供了以*.gz和.svn以及info,static这些过滤的文件不会被监控,也就意味着不会被同步
7,inotify文件监控:
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
如下:
<inotify>
<delete start="true"/> 差异同步
<createFolder start="true"/> 目录监控,包括文件,目录,子目录
<createFile start="true"/> 关闭createFile为false可提供性能,减少rsync通讯,因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的事件close_write,同样可以实现文件的完整同步。
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
8,定期同步:
| <crontab start="false" schedule="600"><!--600mins-->
| <crontabfilter start="false">
| | <exclude expression="*.php"></exclude>
| | <exclude expression="info/*"></exclude>
| </crontabfilter>
| </crontab>
如下:默认600分钟定期同步一次,这里需要说明,如果开启了文件过滤,那么这里也需要同样的文件过滤配置
9,文件系统
<fileSystem xfs="true"/>
<filter start="false">
<exclude expression="(.*).svn"></exclude>
<exclude expression="(.*).gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
如下: 对于XFS文件系统的用户,需要将这个选项开启,才能使sersync正常工作对于sersync监控的文件,会默认过滤系统的临时文件(以“.”开头,以“~”结尾),除了这些文件外,在6-11行中,我们还可以自定义其它需要过滤的文件。通过将 start 设置为 true 后可开启过滤功能,在exclude标签中可使用正则表达式。默认给出的两个例子分别是过滤以“.gz”结尾的文件与过滤监控目录下的info路径(监控路径/info/*),可以根据需求自己添加。但在开启的时候,自己一定要测试下,如果正则表达式出现错误,控制台会有相应提示。相比较使用 Rsync 的 exclude 功能,被过滤的路径,不会加入监控,大大减少 Rsync 同步的通讯量配置文件如下: