一、为什么要用Rsync+sersync架构?

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

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

创建密码文件

# vim /etc/rsyncd.password

654321

# chmod 600 /etc/rsyncd.password

先在服务器主上同步测试

# 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 主先与客户机同步一次,再有新数据就会时时同步

在同步测试后发现只有第一个模块成功同步了,说明一个配置文件只能执行一个rsync模块,多个模块同步只能配置多个相对应的配置文件,分开启动

修改配置,配置多个配置文件对应多个模块分开启动,就可实现多个目录时时同步、备份

# 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/logs/www_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->


# vim rsync_confxml.xml

去掉其他模块内容并修改日志:

<failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->


# vim mysql_confxml.xml

去掉其他模块内容并修改日志:

<failLog path="/usr/local/sersync/logs/mysql_fail_log.sh" timeToExecute="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

主上创建文件 测试:

从 端的 rsync 服务要在运行状态

# touch /rsync/ggg /data/www/ggg /data/mysql/ggg

在从上观察有没有新的文件ggg

写入10000个文件批量同步测试:

# for n in `seq 10000`;do echo aaa > /data/mysql/$n.tst;done