在博文RHCE系列之备份工具—-镜像备份Rsync中,我带大家了解rsync 的诸多特性以及它所支持的四种模式。作为一个镜像备份工具,可以说 rsync 做的很出色。
可是,随着应用系统规模的不断扩大,我们对数据的安全性和可靠性方面的需求也越来越高!Rsync在高端业务系统中的不足也逐渐暴露了出来。
首先,rsync 在同步数据时,需要扫描所有文件后才进行比对,然后再进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的一个操作,并且往往发生变化的是其中很小的一部分,那么这将是非常低效的方式。
其次,rsync不能实时的去监测和同步数据。虽然我们使用crontab的方式,加上 rsync 自身以守护进程启动的方式实现触发同步,但是两次触发动作一定会有时间差。受限于crontab最短也是1分钟,因此这就导致了服务端和客户端数据可能出现不一致,更无法在应用故障时做到数据的完全恢复。
为了满足这方面的需求,我们就结合了 linux文件系统事件监控机制这样一个系统特性(即inotify),通过使用工具 inotify-tools,整合出了 rsync+inotify 这样的一个技术架构,来实现数据实时同步的功能!
下面就跟着我一起来部署一下 rsync+inotify-tools 架构吧!
简易架构图
实验环境介绍:
内核版本:2.6.32-431.el6.x86_64系统采用最小化安装,系统经过了基本优化,selinux为关闭状态,iptables为无限制模式源码包存放位置:/rootRsync客户端+inotify服务,承担角色MASTER,IP:172.16.100.3,主机名:rsync-client-inotifyRsync服务端(S1),承担角色S1,IP:172.16.100.1,主机名:rsync-server-1Rsync服务端(S2),承担角色S2,IP:172.16.100.2,主机名:rsync-server-2
下面,就开始我们的实验!
一、在两台 SLAVE 机器上部署 rsync 服务端程序
特别提醒:本文的Slave机器即为S1(172.16.100.1),S2(172.16.100.2)。此处仅以S1的rsync服务端部署为例,S2的部署和S1一样,此处不再敖述。
1、安装rsync
[root@rsync-server-1~]#yuminstallrsync-y
2、修改rsync配置文件
[root@rsync-server-1~]#cat>/etc/rsyncd.conf<<EOF#Rsyncserver#createdbysunsky00:172013-06-28##rsyncd.confstart##uid=root#rsync对后面模块中的path路径拥有什么权限gid=root#rsync对后面模块中的path路径拥有什么权限usechroot=no#安全操作maxconnections=2000#定义连接数2000timeout=600#600秒超时pidfile=/var/run/rsyncd.pidlockfile=/var/run/rsync.locklogfile=/var/log/rsyncd.logignoreerrors#忽略错误readonly=false#false才能上传文件,true不能上传文件list=false#文件列表hostsallow=172.16.100.0/24hostsdeny=*authusers=rsync_backup#虚拟用户,同步时需要用这个用户secretsfile=/etc/rsync.password#密码文件#####################################[web]#模块名称comment=redhat.sxsitefilesbysunsky00:172013-06-28#注释path=/data/web/redhat.sx#模块的路径####################################[data]comment=redhat.sxsitesitdatafilesbysunsky00:172013-06-28path=/data/web_data/redhat.sx#####################################EOF
特别提示:此处,使用一个多目录同步的案例。大家可以看需求,如果需求只有一个,那仅仅做一个目录即可。
上面的rsync服务的配置文件,表明允许172.16.100.0网段的主机访问,rsync同步模块名为[web]和[data],将同步过来的文件分别放入对应path指定的目录/data/web/redhat.sx,/data/web_data/redhat.sx下。
如果有多台目标服务器,则每一台都需要进行类似的rsync服务端配置,上面的uid和gid需要换成你服务器的相应的同步用户。注意,rsync服务账户(本文用root)要有对被同步目录(/data/web/redhat.sx和/data/web_data/redhat.sx)的写入和更新权限。
你不勇敢,没人替你坚强!