Sersync+Rsync实现触发式文件同步实战过程
背景
通常我们在服务器上使用rsync加上crontab来定时地完成一些同步、备份文件的任务。随着业务和应用需求的不断扩大、实时性要求越来越高。一般rsync是通过校验所有文件后,进行差量同步,如果文件量十分庞大,那么rsync进行校验的过程也是十分耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过crontab方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。而Sersync+Rsync的组合能够较好地解决这种问题。
Sersync介绍
1、sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤(详细见附录,这个过滤脚本程序没有实现),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。
2、sersync配置起来很简单,其中bin目录下已经有基本上静态编译的2进制文件,配合bin目录下的xml配置文件直接使用即可。
3、另外本项目相比较其他脚本开源项目,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
4、本项目有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则每10个小时对同步失败的文件重新同步。
5、本项目自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能。
6、本项目socket与http插件扩展,满足您二次开发的需要。
实战过程
一、服务器环境
服务端:172.16.57.26centos6.7rsync-server接收文件
客户端:172.16.57.25centos6.7sersync+rsync-client发送文件
二、服务端安装rsync-server
1、安装rsync
#rpm-qa|greprsync#查看rsync是否已经安装,如果没有安装,yuminstall直接安装即可
2、使用xinetd方式启动rsync
#vim/etc/xinetd.d/rsync#修改disable=no,flags=IPv4
3、修改rsync配置文件
#mkdir/etc/rsyncd #vim/etc/rsyncd/rsyncd.conf#修改配置文件如下 #GLOBALOPTIONS motdfile=/etc/motd port=873 pidfile=/var/run/rsyncd.pid lockfile=/var/lock/rsyncd logfile=/var/log/rsyncd transferlogging=yes logformat=[op]:%o[ip]:%a[module]:%m[path]:%P[file]:%f[size]:%l syslogfacility=daemon maxconnections=100 [recv] comment="recvdatafrom57.25" path=/opt/rsync_data/recv#这边的目录的宿主要改为apprun,在这里同步过程中使用的是普通账户apprun list=yes usechroot=yes uid=apprun gid=apprun readonly=no writeonly=no exclude= include= authusers=rsync secretsfile=/etc/rsyncd/rsyncd.secrets strictmodes=yes hostsallow=172.16.57.25 hostsdeny=* #ln-s/etc/rsyncd/rsyncd.conf/etc/rsyncd.conf
4、建立用户认证文件
#vim/etc/rsyncd/rsyncd.secrets rsync:111111#格式用户名:口令 #chmod600/etc/rsyncd/rsyncd.secrets#权限设为600,否则启动会报错
5、启动rsync
#/etc/init.d/xinetdstart #netstat-tpln|grep873#查看873端口是否已经在监听了
三、客户端安装sersync+rsync-client
1、安装rsync,和服务端一样,没有安装的话yuminstall安装
2、安装sersync
#tarxzvfsersync2.5_64bit_binary_stable_final.tar.gz #mvGNU-Linux-x86/opt/programs/sersync#解压并拷贝到安装目录
3、配置sersync
#监控目录,一旦本地目录有文件变化,将同步到服务端 #服务端ip和同步模块 #rsync同步参数 #服务端认证密码
4、服务端密码认证
#vim/etc/rsync.pas#在相应的目录下配置身份验证文件,里面输入服务端的密码,并chmod600 #chmod600/etc/rsync.pas
5、启动sersync
#./sersync2-d-oconfxml.xml
四、测试认证
在客户端下监控目录/opt/rsync_data/send下添加文件或者删除,服务端的接受目录都会实时地进行更新。
在此例中,服务器iptables和selinux均处于关闭状态。
note:这种方法同步文件的时候,同步文件的数量如果很多,可能会有部分文件在同步过程中缺失。查阅相关资料后,找到了如下的解决方案。由于本例中,使用的是xinetd方式启动的rsync服务,在xinetd的配置文件中,修改几个参数如下:
#vim/etc/xinetd.conf
修改几个参数:
cps=50030 instances=UNLIMITED per_source=UNLIMITED
总结
以上所述是小编给大家介绍的Sersync+Rsync实现触发式文件同步,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!