博客是我工作的好帮手,遇到困难就来博客找资料
分类: 系统运维
2017-12-27 18:55:44
前言:
一、为什么要用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。
操作系统:CentOS 5.X
源服务器:192.168.21.129
目标服务器:192.168.21.127,192.168.21.128
目的:把源服务器上/home/目录实时同步到目标服务器的/home/下
具体操作:
第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作
一、分别在两台在目标服务器安装Rsync服务端
1、关闭SELINUX
vi /etc/selinux/config #编辑防火墙配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存,退出
setenforce 0 #立即生效
2、开启防火墙tcp 873端口(Rsync默认端口)
vi /etc/sysconfig/iptables #编辑防火墙配置文件
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
:wq! #保存退出
/etc/init.d/iptables restart #最后重启防火墙使配置生效
3、安装Rsync服务端软件
yum install rsync xinetd #安装
vi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsync
disable = no #修改为no
:wq! #保存退出
/etc/init.d/xinetd start #启动(CentOS中是以xinetd来管理Rsync服务的)
4、创建rsyncd.conf配置文件
vi /etc/rsyncd.conf #创建配置文件,添加以下代码
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid #pid文件的存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motd file = /etc/rsyncd.Motd #rsync启动时欢迎信息页面文件位置(文件内容自定义)
[home_] #自定义名称
path = /home// #rsync服务端数据目录路径
comment = home_ #模块名称与[home_]自定义名称相同
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
port=873 #默认端口
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600 #设置超时时间
auth users = home__user #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 192.168.21.129 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
:wq! #保存,退出
5、创建用户认证文件
vi /etc/rsync.pass #配置文件,添加以下内容
home__user:123456 #格式,用户名:密码,可以设置多个,每行一个用户名:密码
:wq! #保存退出
6、设置文件权限
chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限
chmod 600 /etc/rsync.pass #设置文件所有者读取、写入权限
7、启动rsync
/etc/init.d/xinetd start #启动
service xinetd stop #停止
service xinetd restart #重新启动
第二部分:在源服务器192.168.21.129上操作
一、安装Rsync客户端
1、关闭SELINUX
vi /etc/selinux/config #编辑防火墙配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #立即生效
2、开启防火墙tcp 873端口(Rsync默认端口,做为客户端的Rsync可以不用开启873端口)
vi /etc/sysconfig/iptables #编辑防火墙配置文件
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
:wq! #保存退出
/etc/init.d/iptables restart #最后重启防火墙使配置生效
3、安装Rsync客户端端软件
whereis rsync #查看系统是否已安装rsync,出现下面的提示,说明已经安装
rsync: /usr/bin/rsync /usr/share/man/man1/rsync.1.gz
yum install xinetd #只安装xinetd即可,CentOS中是以xinetd来管理rsync服务的
yum install rsync xinetd #如果默认没有rsync,运行此命令进行安装rsync和xinetd
vi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsync
disable = no #修改为no
/etc/init.d/xinetd start #启动(CentOS中是以xinetd来管理rsync服务的)
4、创建认证密码文件
vi /etc/passwd.txt #编辑文件,添加以下内容
123456 #密码
:wq! #保存退出
chmod 600 /etc/passwd.txt #设置文件权限,只设置文件所有者具有读取、写入权限即可
5、测试源服务器192.168.21.129到两台目标服务器192.168.21.127,192.168.21.128之间的数据同步
mkdir /home//ceshi #在源服务器上创建测试文件夹,然后在源服务器运行下面2行命令
rsync -avH --port=873 --progress --delete /home// home__user@192.168.21.127::home_ --password-file=/etc/passwd.txt
rsync -avH --port=873 --progress --delete /home// home__user@192.168.21.128::home_ --password-file=/etc/passwd.txt
运行完成后,分别在两台目标服务器192.168.21.127,192.168.21.128上查看,在/home/目录下有ceshi文件夹,说明数据同步成功。
二、安装sersync工具,实时触发rsync进行同步
1、查看服务器内核是否支持inotify
ll /proc/sys/fs/inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches
备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核
CentOS 5.X 内核为2.6.18,默认已经支持inotify
2、修改inotify默认参数(inotify默认内核参数值太小)
查看系统默认参数值:
sysctl -a | grep max_queued_events
结果是:fs.inotify.max_queued_events = 16384
sysctl -a | grep max_user_watches
结果是:fs.inotify.max_user_watches = 8192
sysctl -a | grep max_user_instances
结果是:fs.inotify.max_user_instances = 128
修改参数:
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
vi /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
:wq! #保存退出
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /home/ -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值
3、安装sersync
sersync下载地址:
上传sersync2.5.4_64bit_binary_stable_final.tar.gz到/usr/local/src目录下
cd /usr/local/src
tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解压
mv GNU-Linux-x86 /usr/local/sersync #移动目录到/usr/local/sersync
4、配置sersync
cd /usr/local/sersync #进入sersync安装目录
cp confxml.xml confxml.xml-bak #备份原文件
vi confxml.xml #编辑,修改下面的代码
:wq! #保存退出
参数说明:
localpath watch="/home/":#源服务器同步目录
192.168.21.127,192.168.21.128:#目标服务器IP地址
name="home_": #目标服务器rsync同步目录模块名称
users="home__user": #目标服务器rsync同步用户名
passwordfile="/etc/passwd.txt": #目标服务器rsync同步用户的密码在源服务器的存放路径
remote ip="192.168.21.127": #目标服务器ip,每行一个
remote ip="192.168.21.128": #目标服务器ip,每行一个
failLog path="/tmp/rsync_fail_log.sh" #脚本运行失败日志记录
start="true" #设置为true,每隔600分钟执行一次全盘同步
5、设置sersync监控开机自动执行
vi /etc/rc.d/rc.local #编辑,在最后添加一行
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #设置开机自动运行脚本
:wq! #保存退出
6、添加脚本监控sersync是否正常运行
vi /home/crontab/check_sersync.sh #编辑,添加以下代码
#!/bin/sh
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ];
then
$sersync -d -r -o $confxml &
else
exit 0;
fi
:wq! #保存退出
chmod +x /home/crontab/check_sersync.sh #添加脚本执行权限
vi /etc/crontab #编辑,在最后添加下面一行
*/5 * * * * root /home/crontab/check_sersync.sh > /dev/null 2>&1 #每隔5分钟执行一次脚本
service crond reload #重新加载服务
6、测试sersync实时触发rsync同步脚本是否正常运行
在源服务器192.168.21.129上创建文件inotify_rsync_ceshi
mkdir /home//inotify_rsync_ceshi
重新启动源服务器:192.168.21.129
等系统启动之后,查看两台目标服务器192.168.21.127,192.168.21.128的/home/下是否有inotify_rsync_ceshi文件夹
然后再在源服务器192.168.21.129创建文件夹inotify_rsync_ceshi_new
mkdir /home//inotify_rsync_ceshi_new
继续查看两台目标服务器192.168.21.127,192.168.21.128的/home/下是否有inotify_rsync_ceshi_new文件夹
如果以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。
至此,Linux下Rsync+sersync实现数据实时同步完成。
扩展阅读:
sersync开发者网站:http://blog.johntechinfo.com/sersyncguild
rsync参数
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
角色
服务器配置
操作系统版本
IP
机器名
sersync服务(M)
VM
CentOS6.6
172.16.1.28
sersync
rsync服务(S1)
VM
CentOS6.6
172.16.1.25
WEB1
rsync服务(S2)
VM
CentOS6.6
172.16.1.26
WEB2
2.6 检查节点是否同步成功
[root@web1 data]# du /data/www/
26944 /data/www/
[root@web1 data]# du /data/www/
26964 /data/www/
[root@web1 data]# du /data/www/
27024 /data/www/
[root@web1 data]# du /data/www/
[root@web2 data]# du /data/www/
26880 /data/www/
[root@web2 data]# du /data/www/
26908 /data/www/
[root@web2 data]# du /data/www/
26940 /data/www/
[root@web2 data]# du /data/www/
三、命令参数说明
-r参数作用是:开启实时监控的之前对主服务器目录与远程目标机器的目录进行一次整体同步;如果需要将sersync运行前,主服务器目录下已经存在的所有文件或目录全部同步到远端,则要以 -r参数运行sersync,将本地与远程整体同步一次;
不指定 -o参数: sersync使用sersync可执行文件目录下的默认配置文件confxml.xml
-n参数为:指定默认的线程池的线程总数;
./sersync -m
-m参数:不进行同步,只运行插件 ./sersync -m pluginName
四、sersync服务配置文件参数详解
以上本文转载于 系统运维 温馨提醒:qihang01原创内容
二:环境的搭建
服务器A:192.168.1.10 源服务器
服务器B: 192.168.1.20 目的服务器
我们要实现的就是把A服务器上的文件同步到B服务器上,从而实现备份。
我们主要是在B服务器上安装配置rsync,在A服务器上安装配置sersync,通过sersync把文件推送到B服务器上
三:开始搭建
从B服务器开始:
1.关闭selinux,在/etc/sysconfig/selinux 这个文件,设置SELINUX=disable
2.防火墙开通873端口 -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
3.开始安装rsync
yum install rsync -y
4.配置rsync,rsync的配置文件是/etc/rsyncd.conf,配置如下:
图下方需要注意的地方:
secrets file这个是配置同步的密码文件的。
[rsynctest]这个是配置同步模块的名称,
path是配置同步的目录,
hosts allow是允许同步的主机,
hosts deny:拒绝同步的主机
5.创建同步的用户与密码的文件,即上图中的secrets file这个配置选项中的文件。
/etc/rsync.passwd,同时要设置这个文件的权限为600
echo "user:password" >> /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
6.创建同步的目录:即上图中path配置选项中的目录。
mkdir /home/rsynctest
7.启动rsync
rsync --daemon --config=/etc/rsyncd.conf
接着重启一下xinetd
/etc/init.d/xinetd restart
8.配置开机启动 echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local
到这样B服务器基本就配置完成了。
接着配置A服务器:
1.先到sersync官网下载sersync:
wget
2.安装sersync
# mkdir /usr/local/sersync
# mkdir /usr/local/sersync/conf
# mkdir /usr/local/sersync/bin
# mkdir /usr/local/sersync/log
# tar zxvf sersync2.5_32bit_binary_stable_final.tar.gz
# cd GNU-Linux-x86/
# cp confxml.xml /usr/local/sersync/conf
# cp sersync2 /usr/local/sersync/bin
3.创建密码文件,同B服务器一样,不过这个文件只要保存一个密码就行了,不用用户名,权限也是600
echo "password" >> /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
4.配置sersync,配置文件就是上第二步复制的confxml.xml这个文中,路径在/usr/local/sersync/conf中
---------------------------------------------------------------------------------------------------------------------------
# 设置本地IP和端口
# 开启DUBUG模式
# 开启xfs文件系统
# 同步时忽略推送的文件(正则表达式),默认关闭
# 设置要监控的事件
# 本地同步的目录路径
# 远程IP和rsync模块名
# rsync指令参数
# rsync同步认证
# 设置rsync远程服务端口,远程非默认端口则需打开自定义
# 设置超时时间
# 设置rsync+ssh加密传输模式,默认关闭,开启需设置SSH加密证书
# sersync传输失败日志脚本路径,每隔60会重新执行该脚本,执行完毕会自动清空。
# 设置rsync+crontab定时传输,默认关闭
# 设置sersync传输后调用name指定的插件脚本,默认关闭
# 插件脚本范例
# 插件脚本范例
------------------------------------------------------------------------------------------------------------------
5.创建同步目录:mkdir /home/rsynctest
6.设置环境变量:
# echo "export PATH=$PATH:/usr/local/sersync/bin/" >> /etc/profile
# source /etc/profile
7.启动sersync
sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
注:重启操作如下:
# killall sersync2 && sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
8.设置开机启动
# echo "sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml" >> /etc/rc.local
原理步骤:
1. 在同步服务器(Master)上开启sersync服务,sersync负载监控配置路径中的文件系统事件变化;
2. 调用rsync命令把更新的文件同步到目标服务器(S1 和 S2);
3. 需要在主服务器配置sersync,在同步目标服务器配置rsync server(注意:是rsync服务)
同步原理:
1. 用户实时的往sersync服务器(M)上写入更新文件数据;
2. 此时需要在同步主服务器(M)上配置sersync服务;
3. 在S1 和S2上开启rsync守护进程服务,以同步拉取来自sersync服务器(M)上的数据;
通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的命令,将写入或更新事件对应的文件通过rsync推送到目标服务器(S1 和S2),如此简单;
2.2 安装环境准备
1.系统资源列表
2.检查系统环境
[root@web ~]# cat/etc/redhat-release
CentOS release 6.6 (Final)
[root@web ~]# uname -r
2.6.32-504.el6.x86_64
[root@web ~]# uname -m
x86_64
2.3 配置同步服务器
1.slave上部署rsync服务
2. 升级rsync到3.0版本
[root@web1 ~]# rsync --version|head -2
rsync version 3.0.6 protocol version 30
Copyright (C) 1996-2009 byAndrew Tridgell, Wayne Davison, and others.
3.部署rsync服务
确定S1和S2服务器版本是最新的,这看下多台目标服务器(S1,S2)上配置如下:
[root@web1 ~]# vim /etc/rsyncd.conf
#Rsync server
uid = root
gid = root
use chroot = no # 安全相关
max connections = 2000 # 并发连接数
timeout = 600 # 超时时间(秒)
pid file =/var/run/rsyncd.pid # 指定rsync的pid目录
lock file =/var/run/rsync.lock # 指定rsync的锁文件【重要】
log file = /var/log/rsyncd.log # 指定rsync的日志目录
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file =/etc/rsync.password
#################################################
[www] # 模块
comment = www
path = /data/www/
#################################################
[bbs]
comment = bbs
path = /data/bbs/
#################################################
[blog]
comment = blog
path = /data/blog/
#rsync_config____________end
特别提示: S1,S2的机器 同时部署上述服务;
上面rsync服务的配置文件,表面允许sersync主服务器(ip:172.16.1.28)访问rsync同步模块名为[www][bbs][blog] 将同步过来的文件分别放入对应的path指定的目录/data/{www,bbs,blog}下面; 如果有多台目标服务器,则每一台都需要进行类似的rsync服务配置,上面的uid、gid要换成您服务器的相应的同步用户;注意,rsync服务账户(本文用的是root)要有对被同步目录(/data/)的写入更新权限;
4.创建rsync同步密码文件,并设置权限为600
[root@web1 ~]# echo"rsync_backup:liubl">/etc/rsync.password
[root@web1 ~]# chmod 600 /etc/rsync.password
[root@web1 ~]# ll /etc/rsync.password
-rw-------. 1 root root 19Jun 3 18:19 /etc/rsync.password
[root@web1 ~]# cat /etc/rsync.password
rsync_backup:liubl
5.启动守护进程,并写入开机自启动
[root@web1 ~]# rsync --daemon
[root@web1 ~]# lsof -i:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1070 root 4u IPv4 17190189 0t0 TCP *:rsync (LISTEN)
[root@web1 ~]#
[root@web1 ~]# netstat -nulpt| grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1070/rsync
设置开机自启动【写入到/etc/rc.local里面】
[root@web1 ~]# vim /etc/rc.local
# rsync server progress
/usr/bin/rsync --daemon
6. 创建相关待同步的目录
mkdir -p /data/{www,bbs,blog}
tree /data
提示: 此步骤在S1,S2都要执行,否则rsync服务会因为没有PATH路径而无法启动
2.4Master上配置rsync客户端
在master上配置rsync客户端相关权限认证:
[root@web ~]# echo"liubl">/etc/rsync.password
[root@web ~]# chmod 600 /etc/rsync.password
[root@web ~]# ll/etc/rsync.password
-rw-------. 1 root root 19Jun 5 05:57 /etc/rsync.password
[root@web ~]# cat /etc/rsync.password
liubl
2.4.1master上手工测试rsync同步情况
特别提示:此步非常关键,如果测试不成功,后面的sersync配好了也不会同步数据;
1)分别创建待同步数据
[root@web ~]# mkdir -p /data/{www,bbs,blog}
[root@web ~]# touch /data/www/ /data/bbs/bbs.log/data/blog/blog.log
[root@web ~]# tree /data/
/data/
├── bbs
│ └── bbs.log
├── blog
│ └── blog.log
└── www
└──
3 directories, 3 files
2)执行同步命令
# rsync-avzP /data/www/ rsync_backup@172.16.1.25::www/--password-file=/etc/rsync.password
sending incremental file list
sent 38 bytes received 8 bytes 92.00 bytes/sec
total size is 0 speedup is 0.00
rsync-avzP /data/www/ rsync_backup@172.16.1.25::www/--password-file=/etc/rsync.password
rsync-avzP /data/www/ rsync_backup@172.16.1.26::www/--password-file=/etc/rsync.password
rsync-avzP /data/bbs/ rsync_backup@172.16.1.26::bbs/--password-file=/etc/rsync.password
rsync-avzP /data/bbs/ rsync_backup@172.16.1.25::bbs/--password-file=/etc/rsync.password
rsync-avzP /data/blog/ rsync_backup@172.16.1.25::blog/--password-file=/etc/rsync.password
rsync-avzP /data/blog/ rsync_backup@172.16.1.26::blog/--password-file=/etc/rsync.password
提示:
在后面进行部署sersync之前,sersync主服务器上必须要确保手工可以把文件推送到S1,S2上,这样后续sersync才能调用这些命令来自动推送
在推送前关闭iptables
3)推送的命令是在 master端(也就是 sersync服务器上)操作的,同步后查看S1,S2
[root@web1 ~]# tree /data/
/data/
├── bbs
│ └── bbs.log
├── blog
│ └── blog.log
└── www
└──
3 directories, 3 files
2.5Mster上开始部署sersync服务
1、下载sersync
在google code下载sersync的可执行文件版本,里面有配置文件与可执行文件,这用
mkdir -p /applition/tools
cd /applition/tools
wget
[root@web ~]# tar fxzsersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
[root@web ~]# cd /usr/local/
[root@cache local]# mv GNU-Linux-x86 sersync
[root@cache local]# tree sersync/
sersync/
├── confxml.xml # 配置文件
└── sersync2 # 二进制文件【启动sersync使用】
0 directories, 2 files
2、配置sersync
[root@cache local]# cp sersync/confxml.xmlsersync/confxml.xml.$(date +%F)
[root@cache local]# ll sersync/confxml.xml
-rwxr-xr-x. 1 root root 2214Oct 26 2011 sersync/confxml.xml
[root@cache local]# llsersync/confxml.xml*
-rwxr-xr-x. 1 root root 2214Oct 26 2011 sersync/confxml.xml
-rwxr-xr-x. 1 root root 2214Jun 5 06:38sersync/confxml.xml.2015-06-05
更改优化sersync配置文件:
a) 修改24--28行
24
25
26 # 同步到哪台机器上 tongbu模块rsync端模块名字
27 # 同步到哪台机器上 tongbu模块
28
修改后的内容为:
提示: 此步watch="/data/blog"就是定义服务端待同步的目录,和目标服务器的模块name="blog"
b)修改31--34行,认证部分【rsync密码认证】
修改后的内容如下:
# ***修改内容为 rsync的密码文件以及 同步所使用的账号类似:
rsync -avzP /data/www/rsync_backup@172.16.1.25::www/ --password-file=/etc/rsync.password
c)修改37行
修改后如下:
# 当同步失败后,日志记录到/usr/local/sersync/logs/rsync_fail_log.sh文件中,并且每60分钟对失败的log进行重新同步
修改后的完整配置文件为:
[root@cache local]# cat sersync/confxml.xml
3、开启sersync守护进程同步数据
启动命令
[root@web ~]# /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
配置sersync环境变量
[root@web ~]# echo"PATH=$PATH:/usr/local/sersync/">>/etc/profile
[root@web ~]# source /etc/profile
[root@web ~]# sersync2
启动命令后返回结果如下为正常:
set the system param
execute:echo50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679> /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d run as a daemon
option: -r rsync all the local files to the remoteservers before the sersync work
option: -o config xml name: /usr/local/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync runbehind the console
use rsync password-file :
user is rsync_backup
passwordfile is /etc/rsync.password
config xml parse success
please set /etc/rsyncd.confmax connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 32 = 12(Thread pool nums) +20(Sub threads)
please according your cpu ,use -n paramto adjust the cpu rate
chmod: cannot access`/usr/local/sersync/logs/rsync_fail_log.sh': No such file or directory
------------------------------------------
rsync the directory recursivlyto the remote servers once
working please wait...
execute command: cd /data/www&& rsync -artuz -R --delete ./ --timeout=100 rsync_backup@172.16.1.25::www--password-file=/etc/rsync.password >/dev/null 2>&1
run the sersync:
watch path is: /data/www
补充: 多实例情况
1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)
2、根据不同的需求同步对应的实例文件
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/bbs_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/blog_confxml.xml
# 多实例初始化同步命令:
/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/bbs_confxml.xml
/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/blog_confxml.xml
/bin/cp /etc/rc.local/etc/rc.local_$(data +%F)
cat>>/etc/rc.local<
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/bbs_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/blog_confxml.xml
EOF
压测:写入10K个文件批量同步测试结果:
# for n in `seq 10000`;do echodddd>www/$n.txt;done
# ps -ef |greprsync
root 17283 1 0 Jun05 ? 00:00:02 /usr/local/sersync/sersync2 -d-r -o /usr/local/sersync/confxml.xml
root 19363 1 0 Jun05 ? 00:00:01 /usr/local/sersync/bin -d -o/usr/local/sersync/confxml.xml
root 19394 1 0 Jun05 ? 00:00:01 /usr/local/sersync/bin -r -d-o /usr/local/sersync/confxml.xml
root 19414 1 0 Jun05 ? 00:00:01 /usr/local/sersync/bin -r -d-o /usr/local/sersync/confxml.xml
root 29484 17283 0 01:33 ? 00:00:00 sh -c cd /data/www &&rsync -artuz -R --timeout=100"./395.txt" rsync_backup@172.16.1.25::www--password-file=/etc/rsync.password >/dev/null 2>&1
root 29487 29484 0 01:33 ? 00:00:00 rsync -artuz -R --timeout=100./395.txt rsync_backup@172.16.1.25::www --password-file=/etc/rsync.password
root 29490 17283 0 01:33 ? 00:00:00 sh -c cd /data/www &&rsync -artuz -R --timeout=100"./396.txt" rsync_backup@172.16.1.25::www--password-file=/etc/rsync.password >/dev/null 2>&1
提示:我们发现本地已经写完了10000个,但是同步的线程,依然在同步;甚至才同步了1000多个
WEB1 同步查看对比
WEB2 同步查看对比
每秒同步20--30个文件
每秒同步20-30个文件
Sersync参数
说明
./sersync -r
./sersync -o xx.xml
./sersync -n num
./sersync -d
-d参数为:后台服务,通常情况下使用 -r参数对本地到远端整体同步一遍后,在后台运行此参数启动守护进程实时同步;在第一次整体同步时,-d 和 -r参数经常会联合使用;
组合命令使用说明:
-n 8 -o liubl.xml -r -d
多个参数可以配合使用,例如:./sersync -n 16 -o config.xml -r -d 表示设置线程池工作线程为16个,指定liubl.xml作为配置文件,在实时监控前 做一次整体同步,以守护进程方式在后台运行;
./sersync --help
很遗憾,它没有查看帮助(需要的话2条路,要么看源代码,要么自测求验证)
sersync可选功能是通过xml配置文件来实现的,基本配置文件如下:
[root@cache sersync]# cat confxml.xml.2015-06-05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
4.2 xml配置文件说明
说明: xml配置文件的注释不用“#”,而是
3
hostip与port是针对插件的保留字段,对于同步功能没有任何作用,保留默认即可;
4.3 Debug开启开关
4
设置为true,表示开启debug模式,会在sersync正在运行的控制台打印inotify时间与rsync同步命令;
4.4 XFS文件系统开关
5
对于xfs文件系统的用户,需要将这个选项开启,才能使用sersync正常工作;
4.5 filter文件过滤功能
说明:一般情况下,不给客户端添加过滤,如有必要才添加;
6
7
8
9
10
11
对于大多数应用,可以尝试把createFile(监控文件事件选项)设置为false来提高性能,减少rsync通讯;
因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的时间close_write,同样可以实现文件完整同步;
注意:强将creatFolder保持为true,如果将createFolder设为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控;所以除非特殊需要,请开启; 默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不需要删除远程目标服务器的文件(目录),则可以将delete参数设置为false,则不对删除事件进行监控;
承担角色MASTER,IP:172.16.100.3,主机名:rsync-client-sersync
SERSYNC_SLAVE,作为SERSYNC的从机,如果SERSYNC宕机,SERSYNC_SLAVE来接管服务,保证业务不中断,本实验不包括它!
Web服务器A(即Rsync服务端)(SWEB1),承担角色S1,IP:172.16.100.1,主机名:rsync-server-1
Web服务器B(即Rsync服务端)(SWEB2),承担角色S2,IP:172.16.100.2,主机名:rsync-server-2
本文的SWEB服务器即为SWEB1(172.16.100.1),SWEB2(172.16.100.2)。此处仅以SWEB1的 Rsync服务端部署为例,SWEB2的部署和SWEB1一样,此处不再敖述。
1、安装 Rsync
[root@SWEB1 ~]# yum install rsync -y
2、修改 Rsync 配置文件
[root@SWEB1 ~]# cat > /etc/rsyncd.conf << EOF
#Rsync server
#created by sunsky 00:17 2013-06-28
##rsyncd.conf start##
uid = root # rsync对后面模块中的path路径拥有什么权限
gid = root # rsync对后面模块中的path路径拥有什么权限
use chroot = no # 安全操作
max connections = 2000 # 定义连接数2000
timeout = 600 # 600秒超时
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors # 忽略错误
read only = false # false才能上传文件,true不能上传文件
list = false # 文件列表
hosts allow = 172.16.100.0/24
hosts deny = *
auth users = rsync_bak # 虚拟用户,同步时需要用这个用户
secrets file = /etc/rsync.password # 密码文件
#####################################
[web] # 模块名称
comment = redhat.sx site files by sunsky 00:17 2013-06-28 # 注释
path = /data/web # 模块的路径
####################################
[download]
comment = redhat.sx site sit data files by sunsky 00:17 2013-06-28
path = /data/download
#####################################
EOF
特别提示:此处,使用一个多目录同步的案例。大家可以看需求,如果需求只有一个,那仅仅做一个目录即可。
上面的Rsync服务的配置文件,表明允许 172.16.100.0 网段的主机访问,Rsync同步模块名为[web]和[download],将同步过来的文件分别放入对应path指定的目录/data/web,/data/download下。
如果有多台目标服务器,则每一台都需要进行类似的rsync服务端配置,上面的uid和gid需要换成你服务器的相应的同步用户。注意,Rsync服务账户(本文用root)要有对被同步目录(/data/web和/data/download)的写入和更新权限。
3、创建相关待同步目录
[root@SWEB1 ~]# mkdir /data/{web,download} -p
[root@SWEB1 ~]# tree /data
/data
├── download
└── web
2 directories, 0 files
提示:此步在S1,S2上都要执行,否则,rsync服务会因为没有PATH路径而无法启动。
4、相关认证和权限项配置
[root@SWEB1 /]# echo 'rsync_bak:redhat' > /etc/rsync.password
[root@SWEB1 /]# chmod 600 /etc/rsync.password
[root@SWEB1 /]# cat /etc/rsync.password
rsync_bak:redhat
[root@SWEB1 /]# ll /etc/rsync.password
-rw-------. 1 root root 7 Jun 4 00:20 /etc/rsync.password
5、以守护进程方式启动rsync服务
[root@SWEB1 ~]# rsync --daemon
6、查看rsync服务状态
[root@SWEB1 /]# lsof -i tcp:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 20982 root 3u IPv4 88170 0t0 TCP *:rsync (LISTEN)
rsync 20982 root 5u IPv6 88171 0t0 TCP *:rsync (LISTEN)
7、为rsync添加开机自启动
[root@SWEB1 /]# echo "# rsyncd service daemon by sun 20140702" >>/etc/rc.local
[root@SWEB1 /]# echo "/usr/bin/rsync --daemon" >> /etc/rc.local
[root@SWEB1 /]# grep daemon /etc/rc.local
# rsyncd service daemon by sun 20140702
/usr/bin/rsync --daemon
这里顺带附上重启的命令,rsync重启有点麻烦,需要以先杀掉后台守护进程,然后再启动的方式来重启服务。
[root@SWEB1 /]# pkill rsync
[root@SWEB1 /]# rsync --daemon