目录
文档数据同步
通过sersync达到实时同步文档及文件夹到目标主机目录的需求,实现生产中心文档数据的实时备份需求。
Rsync+sersync架构
sersync是基于Inotify开发的,类似于Inotify-tools的工具, sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。
文档同步规划
操作系统: SUSE Linux Enterprise Server 11 (x86_64)
主数据中心:192.168.20.57 (主数据中心文档服务器)
备数据中心:192.168.30.57 (备数据中心文档服务器)
同步目录:/app/jboss7/jboss-as-7.1.1.Final/docs
sync简介
rsync,remote synchronize顾名思义,它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。
rsync 包括如下的一些特性:
能更新整个目录和树和文件系统;
有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
对于安装来说,无任何特殊权限要求;
对于多个文件来说,内部流水线减少文件等待的延时;
能用rsh、ssh 或直接端口做为传输入端口;
支持匿名rsync 同步文件,是理想的镜像工具。
安装Rsync
//rsync的官方网站:http://rsync.samba.org/可以从上面得到最新的版本。该版本也可以满足文档同步的需要,故此直接采用SUSE 11 sp3收录的版本。
配置Rsync
注:此配置主库备库均需配置
//rsync的主要有以下三个配置文件:
/rsyncd.conf(主配置文件)
/rsyncd.secrets(密码文件)
/rsyncd.motd(rysnc服务器信息)
主配置文件
# vim /etc/rsyncd.conf
# chmod 600 /etc/rsyncd.conf
#jboss组 gid = jboss #jboss用户 uid = jboss7 read only = no use chroot = no transfer logging = true log format = %h %o %f %l %b log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid #此处配置源和目标IP,同时支持配置网段 hosts allow = 192.168.20.57/24 192.168.30.57/24 #slp refresh = 300
[home_owen] path = /app/jboss7/jboss-as-7.1.1.Final/docs comment = home_owen #注:关于auth users是必须在服务器上存在的真实的系统用户,如果你想用多个用户以,号隔开,比如auth users = easylife,root auth users =jboss7 secrets file = /etc/rsyncd.secrets |
密码文件
- 加密密码
//创建主库加密文件,密码不必与用户的登录密码一致
# vim /etc/rsyncd.secrets
# chmod 600 /etc/rsyncd.secrets
- 解密密码
//密码必须与主库加密密码一致
# vim /etc/passwd.txt
# chmod 600 /etc/passwd.txt
启动rsync
service rsyncd start
文件同步测试
//注:rsync命令中如果源路径末尾有/,只复制指定文件夹内容;如果没有/,会同时复制最后一层文件夹
//主库切换到jboss7用户生成测试文件
# /app/jboss7/jboss-as-7.1.1.Final/docs
# touch test
//主库使用root执行同步命令
rsync -avH --port=873 --progress --delete /app/jboss7/jboss-as-7.1.1.Final/docs/ jboss7@192.168.30.57::home_owen --password-file=/etc/passwd.txt
查看备库文件夹/app/jboss7/jboss-as-7.1.1.Final/docs下,是否生成测试文件test。如有则说明同步成功。
安装sersync
// sersync实时触发rsync进行同步
//创建安装路径
# mkdir -p /usr/local/sersync
//解压
# tar -xzvf sersync2.5.4_64bit_binary_stable_final.tar.gz
# mv GNU-Linux-x86/* /usr/local/sersync/
# rm -rf GNU-Linux-x86
配置sersync
维护配置文件
# /usr/local/sersync/
# vim confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <head version="2.5"> <!--主库IP--> <host hostip="192.168.20.57" port="8008"></host> <debug start="true"/> <fileSystem xfs="false"/> <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> <inotify> <delete start="true"/> <createFolder start="true"/> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify>
<sersync> <!-- 同步目录--> <localpath watch="/app/jboss7/jboss-as-7.1.1.Final/docs"> <!--备库IP--> <remote ip="192.168.30.57" name="home_owen"/> <!--<remote ip="192.168.8.39" name="tongbu"/>--> <!--<remote ip="192.168.8.40" name="tongbu"/>--> </localpath> <rsync> <!-- 认证参数、是否认证、认证用户及密码文件--> <commonParams params="-avH"/> <auth start="true" users="jboss7" passwordfile="/etc/passwd.txt"/> <userDefinedPort start="false" port="873"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> <!--同步传输失败时会重新传送,再次失败写入rsync_fail_log.sh,然后每隔一段时间(timeToExecute),执行该脚本重新传送,然后清空该脚本。可以通过path来设置日志路径--> <failLog path="/usr/local/sersync/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> <crontab start="true" schedule="600"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <plugin start="false" name="command"/> </sersync> <plugin name="command"> <param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix--> <filter start="false"> <include expression="(.*)\.php"/> <include expression="(.*)\.sh"/> </filter> </plugin> </head> |
修改内核参数
//查看服务器内核是否支持inotify(SUSE 11sp3 以及以上版本支持)
# cd /proc/sys/fs/inotify/
//修改inotify默认参数
# vim /etc/sysctl.conf
# inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
fs.inotify.max_queued_events=99999999
#保证max_user_watches值大于同步文件数
fs.inotify.max_user_watches=99999999
#每个用户创建inotify实例最大值
fs.inotify.max_user_instances=65535
//使参数生效
# sysctl -p
进程守护
# vim /usr/local/sersync/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
# chmod +x /usr/local/sersync/check_sersync.sh
# crontab -e
*/5 * * * * root /usr/local/sersync/check_sersync.sh > /dev/null 2>&1
自动同步验证
//在主库创建测试文件
# cd /app/jboss7/jboss-as-7.1.1.Final/docs
# touch test123
//inotify自动提示,并在备库对应目录生成文件,代表自动同步成功