前言:一、为什么要用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/www.osyunwei.com目录实时同步到目标服务器的/home/www.osyunwei.com下具体操作:第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作 一、分别在两台在目标服务器安装Rsync服务端1、关闭SELINUXvi /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 #编辑配置文件,设置开机启动rsyncdisable = 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_www.osyunwei.com] #自定义名称path = /home/www.osyunwei.com/ #rsync服务端数据目录路径comment = home_www.osyunwei.com #模块名称与[home_www.osyunwei.com]自定义名称相同uid = root #设置rsync运行权限为rootgid = root #设置rsync运行权限为rootport=873 #默认端口use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份read only = no #设置rsync服务端文件为读写权限list = no #不显示rsync服务端资源列表max connections = 200 #最大连接数timeout = 600 #设置超时时间auth users = home_www.osyunwei.com_user #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开hosts allow = 192.168.21.129 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开:wq! #保存,退出5、创建用户认证文件vi /etc/rsync.pass #配置文件,添加以下内容home_www.osyunwei.com_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、关闭SELINUXvi /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.gzyum install xinetd #只安装xinetd即可,CentOS中是以xinetd来管理rsync服务的yum install rsync xinetd #如果默认没有rsync,运行此命令进行安装rsync和xinetdvi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsyncdisable = 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/www.osyunwei.com/ceshi #在源服务器上创建测试文件夹,然后在源服务器运行下面2行命令rsync -avH --port=873 --progress --delete /home/www.osyunwei.com/ home_www.osyunwei.com_user@192.168.21.127::home_www.osyunwei.com --password-file=/etc/passwd.txtrsync -avH --port=873 --progress --delete /home/www.osyunwei.com/ home_www.osyunwei.com_user@192.168.21.128::home_www.osyunwei.com --password-file=/etc/passwd.txt运行完成后,分别在两台目标服务器192.168.21.127,192.168.21.128上查看,在/home/www.osyunwei.com目录下有ceshi文件夹,说明数据同步成功。二、安装sersync工具,实时触发rsync进行同步1、查看服务器内核是否支持inotifyll /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,默认已经支持inotify2、修改inotify默认参数(inotify默认内核参数值太小)查看系统默认参数值:sysctl -a | grep max_queued_events结果是:fs.inotify.max_queued_events = 16384sysctl -a | grep max_user_watches结果是:fs.inotify.max_user_watches = 8192sysctl -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=99999999fs.inotify.max_user_watches=99999999fs.inotify.max_user_instances=65535:wq! #保存退出参数说明:max_queued_events:inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确max_user_watches:要同步的文件包含多少目录,可以用:find /home/www.osyunwei.com -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.osyunwei.com为同步文件目录)max_user_instances:每个用户创建inotify实例最大值3、安装sersyncsersync下载地址:https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz上传sersync2.5.4_64bit_binary_stable_final.tar.gz到/usr/local/src目录下cd /usr/local/srctar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解压mv GNU-Linux-x86 /usr/local/sersync #移动目录到/usr/local/sersync4、配置sersynccd /usr/local/sersync #进入sersync安装目录cp conf#备份原文件vi conf#编辑,修改下面的代码:wq! #保存退出参数说明:localpath watch="/home/www.osyunwei.com":#源服务器同步目录192.168.21.127,192.168.21.128:#目标服务器IP地址name="home_www.osyunwei.com": #目标服务器rsync同步目录模块名称users="home_www.osyunwei.com_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/conf#设置开机自动运行脚本:wq! #保存退出6、添加脚本监控sersync是否正常运行vi /home/crontab/check_sersync.sh #编辑,添加以下代码#!/bin/shsersync="/usr/local/sersync/sersync2"confstatus=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)if [ $status -eq 0 ];then$sersync -d -r -o $confelseexit 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_ceshimkdir /home/www.osyunwei.com/inotify_rsync_ceshi重新启动源服务器:192.168.21.129等系统启动之后,查看两台目标服务器192.168.21.127,192.168.21.128的/home/www.osyunwei.com下是否有inotify_rsync_ceshi文件夹然后再在源服务器192.168.21.129创建文件夹inotify_rsync_ceshi_newmkdir /home/www.osyunwei.com/inotify_rsync_ceshi_new继续查看两台目标服务器192.168.21.127,192.168.21.128的/home/www.osyunwei.com下是否有inotify_rsync_ceshi_new文件夹如果以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。至此,Linux下Rsync+sersync实现数据实时同步完成。扩展阅读:sersync开发者网站:http://blog.johntechinfo.com/sersyncguildrsync参数-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 显示帮助信息以上本文转载于 系统运维 www.osyunwei.com 温馨提醒: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:http://sersync.sourceforge.net/ wget http://sersync.googlecode.com/files/sersync2.1_64bit_binary.tar.gz 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 conf# cp sersync2 /usr/local/sersync/bin 3.创建密码文件,同B服务器一样,不过这个文件只要保存一个密码就行了,不用用户名,权限也是600 echo "password" >> /etc/rsync.passwd chmod 600 /etc/rsync.passwd4.配置sersync,配置文件就是上第二步复制的conf---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------5.创建同步目录:mkdir /home/rsynctest6.设置环境变量:# echo "export PATH=$PATH:/usr/local/sersync/bin/" >> /etc/profile# source /etc/profile 7.启动sersyncsersync2 -r -d -o /usr/local/sersync/conf/conf注:重启操作如下:# killall sersync2 && sersync2 -r -d -o /usr/local/sersync/conf/conf 8.设置开机启动# echo "sersync2 -r -d -o /usr/local/sersync/conf/conf> /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.系统资源列表角色服务器配置操作系统版本IP机器名sersync服务(M)VMCentOS6.6172.16.1.28sersyncrsync服务(S1)VMCentOS6.6172.16.1.25WEB1rsync服务(S2)VMCentOS6.6172.16.1.26WEB22.检查系统环境[root@web ~]# cat/etc/redhat-release CentOS release 6.6 (Final)[root@web ~]# uname -r2.6.32-504.el6.x86_64[root@web ~]# uname -mx86_642.3 配置同步服务器1.slave上部署rsync服务2. 升级rsync到3.0版本[root@web1 ~]# rsync --version|head -2rsync version 3.0.6 protocol version 30Copyright (C) 1996-2009 byAndrew Tridgell, Wayne Davison, and others.3.部署rsync服务 确定S1和S2服务器版本是最新的,这看下多台目标服务器(S1,S2)上配置如下:[root@web1 ~]# vim /etc/rsyncd.conf#Rsync serveruid = rootgid = rootuse 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 = falselist = falsehosts allow = 172.16.1.0/24hosts deny = 0.0.0.0/32auth users = rsync_backupsecrets file =/etc/rsync.password#################################################[www] # 模块 comment = www path = /data/www/#################################################[bbs]comment = bbspath = /data/bbs/#################################################[blog]comment = blogpath = /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:liubl5.启动守护进程,并写入开机自启动[root@web1 ~]# rsync --daemon[root@web1 ~]# lsof -i:873COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMErsync 1070 root 4u IPv4 17190189 0t0 TCP *:rsync (LISTEN)[root@web1 ~]# [root@web1 ~]# netstat -nulpt| grep rsynctcp 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 liubl2.4.1master上手工测试rsync同步情况特别提示:此步非常关键,如果测试不成功,后面的sersync配好了也不会同步数据;1)分别创建待同步数据[root@web ~]# mkdir -p /data/{www,bbs,blog}[root@web ~]# touch /data/www/www.log /data/bbs/bbs.log/data/blog/blog.log[root@web ~]# tree /data//data/├── bbs│ └── bbs.log├── blog│ └── blog.log└── www └── www.log 3 directories, 3 files2)执行同步命令# rsync-avzP /data/www/ rsync_backup@172.16.1.25::www/--password-file=/etc/rsync.passwordsending incremental file list sent 38 bytes received 8 bytes 92.00 bytes/sectotal size is 0 speedup is 0.00rsync-avzP /data/www/ rsync_backup@172.16.1.25::www/--password-file=/etc/rsync.passwordrsync-avzP /data/www/ rsync_backup@172.16.1.26::www/--password-file=/etc/rsync.passwordrsync-avzP /data/bbs/ rsync_backup@172.16.1.26::bbs/--password-file=/etc/rsync.passwordrsync-avzP /data/bbs/ rsync_backup@172.16.1.25::bbs/--password-file=/etc/rsync.passwordrsync-avzP /data/blog/ rsync_backup@172.16.1.25::blog/--password-file=/etc/rsync.passwordrsync-avzP /data/blog/ rsync_backup@172.16.1.26::blog/--password-file=/etc/rsync.password提示: 在后面进行部署sersync之前,sersync主服务器上必须要确保手工可以把文件推送到S1,S2上,这样后续sersync才能调用这些命令来自动推送在推送前关闭iptables3)推送的命令是在 master端(也就是 sersync服务器上)操作的,同步后查看S1,S2[root@web1 ~]# tree /data//data/├── bbs│ └── bbs.log├── blog│ └── blog.log└── www └── www.log 3 directories, 3 files2.5Mster上开始部署sersync服务1、下载sersync 在google code下载sersync的可执行文件版本,里面有配置文件与可执行文件,这用mkdir -p /applition/toolscd /applition/toolswgethttps://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz[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/├── conf└── sersync2 # 二进制文件【启动sersync使用】 0 directories, 2 files2、配置sersync[root@cache local]# cp sersync/conf[root@cache local]# ll sersync/conf-rwxr-xr-x. 1 root root 2214Oct 26 2011 sersync/conf[root@cache local]# llsersync/conf-rwxr-xr-x. 1 root root 2214Oct 26 2011 sersync/conf-rwxr-xr-x. 1 root root 2214Jun 5 06:38sersync/conf更改优化sersync配置文件:a) 修改24--28行 24 修改后的内容为: 提示: 此步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.passwordc)修改37行 修改后如下: # 当同步失败后,日志记录到/usr/local/sersync/logs/rsync_fail_log.sh文件中,并且每60分钟对失败的log进行重新同步修改后的完整配置文件为:[root@cache local]# cat sersync/conf3、开启sersync守护进程同步数据启动命令[root@web ~]# /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/conf配置sersync环境变量[root@web ~]# echo"PATH=$PATH:/usr/local/sersync/">>/etc/profile[root@web ~]# source /etc/profile[root@web ~]# sersync2启动命令后返回结果如下为正常:set the system paramexecute:echo50000000 > /proc/sys/fs/inotify/max_user_watchesexecute:echo 327679> /proc/sys/fs/inotify/max_queued_eventsparse the command paramoption: -d run as a daemonoption: -r rsync all the local files to the remoteservers before the sersync workoption: -o configdaemon thread num: 10parsehost ip : localhost host port: 8008daemon start,sersync runbehind the console use rsync password-file :user is rsync_backuppasswordfile is /etc/rsync.passwordconfigplease set /etc/rsyncd.confmax connections=0 Manuallysersync 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 ratechmod: cannot access`/usr/local/sersync/logs/rsync_fail_log.sh': No such file or directory------------------------------------------rsync the directory recursivlyto the remote servers onceworking 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、配置多个conf 2、根据不同的需求同步对应的实例文件/usr/local/sersync/sersync2 -d -o /usr/local/sersync/www_conf/usr/local/sersync/sersync2 -d -o /usr/local/sersync/bbs_conf/usr/local/sersync/sersync2 -d -o /usr/local/sersync/blog_conf# 多实例初始化同步命令:/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/www_conf/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/bbs_conf/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/blog_conf /bin/cp /etc/rc.local/etc/rc.local_$(data +%F)cat>>/etc/rc.local/usr/local/sersync/sersync2 -d -o /usr/local/sersync/www_conf/usr/local/sersync/sersync2 -d -o /usr/local/sersync/bbs_conf/usr/local/sersync/sersync2 -d -o /usr/local/sersync/blog_confEOF压测:写入10K个文件批量同步测试结果:# for n in `seq 10000`;do echodddd>www/$n.txt;done# ps -ef |greprsyncroot 17283 1 0 Jun05 ? 00:00:02 /usr/local/sersync/sersync2 -d-r -o /usr/local/sersync/confroot 19363 1 0 Jun05 ? 00:00:01 /usr/local/sersync/bin -d -o/usr/local/sersync/confroot 19394 1 0 Jun05 ? 00:00:01 /usr/local/sersync/bin -r -d-o /usr/local/sersync/confroot 19414 1 0 Jun05 ? 00:00:01 /usr/local/sersync/bin -r -d-o /usr/local/sersync/confroot 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.passwordroot 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多个2.6 检查节点是否同步成功WEB1 同步查看对比WEB2 同步查看对比[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/27036 /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/26960 /data/www/每秒同步20--30个文件每秒同步20-30个文件三、命令参数说明Sersync参数说明./sersync -r-r参数作用是:开启实时监控的之前对主服务器目录与远程目标机器的目录进行一次整体同步;如果需要将sersync运行前,主服务器目录下已经存在的所有文件或目录全部同步到远端,则要以 -r参数运行sersync,将本地与远程整体同步一次;提别说明:如果设置了过滤器,即在./sersync -o xx.不指定 -o参数: sersync使用sersync可执行文件目录下的默认配置文件conf指定 -o 参数:可以指定多个不同的配置文件,从而实现sersync多进程多实例的数据同步./sersync -n num-n参数为:指定默认的线程池的线程总数;例如: ./sersync -n 5 则指定线程总数为5,如果不指定,默认启动线程池数量是10,如果cpu使用过高,可以通过该参数调低,如果机器配置较高,可以调高默认的线程总数,提升同步效率;./sersync -d-d参数为:后台服务,通常情况下使用 -r参数对本地到远端整体同步一遍后,在后台运行此参数启动守护进程实时同步;在第一次整体同步时,-d 和 -r参数经常会联合使用;./sersync -mpluginName-m参数:不进行同步,只运行插件 ./sersync -m pluginName例如:./sersync -m command,则在监控到事件后,不对远程目标服务器进行同步,而是直接运行command插件组合命令使用说明:-n 8 -o liubl.多个参数可以配合使用,例如:./sersync -n 16 -o config../sersync --help很遗憾,它没有查看帮助(需要的话2条路,要么看源代码,要么自测求验证)四、sersync服务配置文件参数详解4.1 初始的配置文件 sersync可选功能是通过[root@cache sersync]# cat conf 1 24.2 说明: 3 hostip与port是针对插件的保留字段,对于同步功能没有任何作用,保留默认即可;4.3 Debug开启开关 4 设置为true,表示开启debug模式,会在sersync正在运行的控制台打印inotify时间与rsync同步命令;4.4 XFS文件系统开关 5 对于xfs文件系统的用户,需要将这个选项开启,才能使用sersync正常工作;4.5 filter文件过滤功能 说明:一般情况下,不给客户端添加过滤,如有必要才添加; 6 对于大多数应用,可以尝试把createFile(监控文件事件选项)设置为false来提高性能,减少rsync通讯;因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的时间close_write,同样可以实现文件完整同步;注意:强将creatFolder保持为true,如果将createFolder设为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控;所以除非特殊需要,请开启; 默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不需要删除远程目标服务器的文件(目录),则可以将delete参数设置为false,则不对删除事件进行监控;承担角色MASTER,IP:172.16.100.3,主机名:rsync-client-sersyncSERSYNC_SLAVE,作为SERSYNC的从机,如果SERSYNC宕机,SERSYNC_SLAVE来接管服务,保证业务不中断,本实验不包括它!Web服务器A(即Rsync服务端)(SWEB1),承担角色S1,IP:172.16.100.1,主机名:rsync-server-1Web服务器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 -y2、修改 Rsync 配置文件[root@SWEB1 ~]# cat > /etc/rsyncd.conf#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 # 定义连接数2000timeout = 600 # 600秒超时pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsyncd.logignore errors # 忽略错误read only = false # false才能上传文件,true不能上传文件list = false # 文件列表hosts allow = 172.16.100.0/24hosts 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-28path = /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└── web2 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.passwordrsync_bak:redhat[root@SWEB1 /]# ll /etc/rsync.password-rw-------. 1 root root 7 Jun 4 00:20 /etc/rsync.password5、以守护进程方式启动rsync服务[root@SWEB1 ~]# rsync --daemon6、查看rsync服务状态[root@SWEB1 /]# lsof -i tcp:873COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMErsync 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