1、sersync是基于Inotify开发的,类似于Inotify-tools的工具
2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。
二、Rsync+Inotify-tools与Rsync+sersync两种架构有什么区别?
1、 Rsync+Inotify-tools
(1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
(2):rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。
2、 Rsync+sersync
(1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
(2):rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。
小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。
三、服务器准备
sersync服务器主: 192.168.230.99
客户机从1:192.168.230.134
客户机从2:192.168.230.129
四、搭建sersync服务
1、服务器从1、从2都进行操作步骤相同 :
# yum install -y rsync
# vim /etc/rsyncd.conf
#port=873
uid=root
gid=root
use chroot=no
max connections=2000
timeout = 600
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
ignore errors
read only = false
list = false
hosts allow = 192.168.230.0/24
hosts deny = 0.0.0.0/32
auth users=user
secrets file=/etc/rsyncd.passwd
[rsync]
path=/rsync
[www]
path=/data
[mysql]
path=/data/mysql
# vim /etc/rsyncd.passwd
user:654321
# chmod 600 /etc/rsyncd.passwd
# mkdir -p /rsync /data/mysql /data/www/
启动rsync服务
# rsync --daemon
2、服务器主:
创建需要同步的目录,也就是模块中path指向的
# yum install -y rsync
# mkdir -p /rsync /data/mysql /data/www/
先在服务器主上同步测试
# rsync -avzP /rsync/ user@192.168.230.134::rsync/ --password-file=/etc/rsyncd.password
# rsync -avzP /rsync/ user@192.168.230.129::rsync/ --password-file=/etc/rsyncd.password
# rsync -avzP /rsync/ user@192.168.230.134::www/ --password-file=/etc/rsyncd.password
# rsync -avzP /rsync/ user@192.168.230.129::www/ --password-file=/etc/rsyncd.password
# rsync -avzP /rsync/ user@192.168.230.134::mysql/ --password-file=/etc/rsyncd.password
# rsync -avzP /rsync/ user@192.168.230.129::mysql/ --password-file=/etc/rsyncd.password
3、主 下载sersync
# cd /usr/local/src/
64位下载地址:https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
32位下载地址:https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5_32bit_binary_stable_final.tar.gz
# wget --no-check-certificate https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5_32bit_binary_stable_final.tar.gz
# tar -zxvf sersync2.5_32bit_binary_stable_final.tar.gz -C /usr/local/
# cd /usr/local/
# mv GNU-Linux-x86 sersync
# cd sersync/
# mkdir conf bin logs
# mv confxml.xml conf
# mv sersync2 bin/sersync
4、主 配置sersync
先进行备份
# cp conf/confxml.xml /root/sersync.confxml.log$(date +%F)
# vim conf/confxml.xml
找到第24行并修改:
<localpath watch="/rsync">
<remote ip="192.168.230.134" name="rsync"/>
<remote ip="192.168.230.129" name="rsync"/>
</localpath>
<!-- ############################# -->
<localpath watch="/data/mysql">
<remote ip="192.168.230.134" name="mysql"/>
<remote ip="192.168.230.129" name="mysql"/>
</localpath>
<!-- ############################# -->
<localpath watch="/data/www">
<remote ip="192.168.230.134" name="www"/>
<remote ip="192.168.230.129" name="www"/>
</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>
修改为:
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="user" passwordfile="/etc/rsyncd.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
##上面配置就是在拼接rsync -avzP /rsync/ user@192.168.230.134::rsync/ --password-file=/etc/rsyncd.password 这个同步命令而已
找到:
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 6
0mins execute once-->
修改为:
<failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/>
<!--default every 60mins execute once-->
##日志位置就是刚才创建的/usr/local/sersync/logs/
保存退出
加入环境变量
# echo 'export PATH=$PATH:/usr/local/sersync/bin' >> /etc/profile
# source /etc/profile
创建同步的测试文件
# touch /rsync/ddd /data/www/ddd /data/mysql/ddd
启动sersync
# sersync -r -d -o /usr/local/sersync/conf/confxml.xml
## -o 指定配置文件 -d 后台启动守护进程 -r 主先与客户机同步一次,再有新数据就会时时同步
在同步测试后发现只有第一个模块成功同步了
修改配置
# cp conf/confxml.xml /root/sersync.confxml2.log$(date +%F)
# cd /usr/local/sersync/conf/
# cp confxml.xml rsync_confxml.xml
# cp confxml.xml mysql_confxml.xml
# cp confxml.xml www_confxml.xml
# vim www_confxml.xml
去掉其他模块内容并修改日志:
<failLog path="/usr/local/sersync/www_logs/rsync_fail_log.sh" timeToExec
ute="60"/><!--default every 60mins execute once-->
# vim rsync_confxml.xml
去掉其他模块内容并修改日志:
<failLog path="/usr/local/sersync/rsync_logs/rsync_fail_log.sh" timeToExec
ute="60"/><!--default every 60mins execute once-->
# vim mysql_confxml.xml
去掉其他模块内容并修改日志:
<failLog path="/usr/local/sersync/mysql_logs/rsync_fail_log.sh" timeToExec
ute="60"/><!--default every 60mins execute once-->
杀死之前的sersync 进程,并启动3个新的模块的配置
# sersync -r -d -o /usr/local/sersync/conf/www_confxml.xml
# sersync -r -d -o /usr/local/sersync/conf/mysql_confxml.xml
# sersync -r -d -o /usr/local/sersync/conf/rsync_confxml.xml
主上创建文件 测试:
# touch /rsync/ggg /data/www/ggg /data/mysql/ggg
在从上观察有没有新的文件ggg
写入10000个文件批量同步测试:
# for n in `seq 10000`;do echo aaa > /data/mysql/$n.tst;done
原文地址:http://blog.51cto.com/13673885/2103325