rsync服务端:54.172.72.40

rsync+sersync2:120.26.68.152

首先安装rsync服务端:

wKiom1e0_wvBh9LSAAAUv7ondt8663.jpg

表示已经有安装,于是编辑配置文件vim /etc/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 2000

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

port = 873 

read only = false

list = false

hosts allow = 120.26.68.152             允许120.26.68.152的客户端

hosts deny = *

auth user = rsyncd_backup

secrets file = /etc/rsync.password

motd file = /etc/rsyncd.Motd



[data]

comment = data

path = /data/120.26.68.152      接收从120.26.68.152同步过来的数据,放在本地54.172.72.40目录


根据rsyncd.conf 文件的配置,在/etc 目录下创建同步的验证文件rsync.password

rsyncd_backup:redhat------>前者为用户名,后者为密码

chmod 600 /etc/rsync.password


mkdir -p /data/120.26.68.152

启动rsync服务:

rsync --daemon

查看服务是否启动:

wKiom1e1AGPAkOWFAAAyENRt7UQ571.jpg

由于我这一台是aws服务器,所以要修改安全组进站出口,打开tcp的873端口


接下来

在120.26.68.152主机上配置rsync.password,只需要添加如下内容

[root@aliyun_test sersync]# cat /etc/rsync.password 

redhat      该值为同步用户的密码

chmod 600 /etc/rsync.password

至此rsync的简单配置同步完成,尝试用手动命令同步数据

rsync -avzP /var/log/* rsyncd_backup@10.211.55.8::data --password-file=/etc/rsync.password

提示:data为定义的模块名

然后在我的aws上/data/120.26.68.152目录下观察可以发现日志文件目录都同步过来了

[root@ip-172-31-63-27 ~]# cd /data/120.26.68.152/

[root@ip-172-31-63-27 120.26.68.152]# ll

total 1156

drwxr-x---. 2 root root      6 May 28  2014 audit

-rw-r--r--. 1 root root   2036 Aug  5 02:22 boot.log

-rw-------. 1 root utmp   3072 Aug 12 06:31 btmp

drwxr-xr-x. 2 root root      6 Nov 10  2010 ConsoleKit

于是在此基础上安装sersync2软件


wget https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz

tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/

cd /usr/local/

ln -sv GNU-Linux-x86/ /usr/local/sersync

cp /usr/local/sersync/confxml.xml /usr/local/sersync/confxml.xml.bak

cp /usr/local/sersync/sersync2 /usr/sbin/

vim /usr/local/sersync/confxml.xml

修改如下几行

<debug start="true"/>   将debug信息打开

<localpath watch="/sersync">    修改120.26.68.152本地需要同步的目录

<remote ip="54.172.72.40" name="data"/>   修改远端服务器的ip和模块名

<auth start="false" users="rsyncd_backup" passwordfile="/etc/rsync.password"/>   修改同步用户验证信息

创建本地数据目录文件:mkdir /sersync -p


然后启动sersync

sersync2 -d -n 3 -o /usr/local/sersync/confxml.xml >> /var/log/sersync2.log 2>&1

参数-d:启用守护进程模式

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

参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍


然后进行同步验证:

cd /sersync/

[root@aliyun_test sersync]# mkdir {a,b,c}


在aws54.172.72.40上观察如下结果

[root@ip-172-31-63-27 120.26.68.152]# ll

total 0

drwxr-xr-x. 2 root root 6 Aug 16 22:15 a

drwxr-xr-x. 2 root root 6 Aug 16 22:15 b

drwxr-xr-x. 2 root root 6 Aug 16 22:15 c

至此同步成功


记:

一、为什么要用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。

参考文章:http://www.linuser.com/thread-1318-1-1.html