- A+
在Linux备份工具----镜像备份Rsync这篇文章中(http://www.linuxidc.com/Linux/2014-06/103807.htm),我带大家了解 rsync 的诸多特性以及它所支持的四种模式。作为一个镜像备份工具,可以说 rsync 做的很出色。
可是,随着应用系统规模的不断扩大,我们对数据的安全性和可靠性方面的需求也越来越高!Rsync 在高端业务系统中的不足也逐渐暴露了出来。
首先,rsync 在同步数据时,需要扫描所有文件后才进行比对,然后再进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的一个操作,并且往往发生变化的是其中很小的一部分,那么这将是非常低效的方式。
其次,rsync 不能实时的去监测和同步数据。虽然我们使用crontab的方式,加上 rsync 自身以守护进程启动的方式实现触发同步,但是两次触发动作一定会有时间差。受限于crontab最短也是1分钟,因此这就导致了服务端和客户端数据可能出现不一致,更无法在应用故障时做到数据的完全恢复。
为了满足这方面的需求,我们就结合了 linux文件系统事件监控机制这样一个系统特性(即inotify),通过使用工具 inotify-tools,整合出了 rsync+inotify 这样的一个技术架构,来实现数据实时同步的功能!
推荐阅读:
利用inotifywait监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm
利用inotify+rsync实现Linux文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm
inotify-tools+rsync实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm
inotify 实时的Linux文件系统事件监控 http://www.linuxidc.com/Linux/2014-03/98304.htm
下面就跟着我一起来部署一下 rsync+inotify-tools 架构吧!
简易架构图
实验环境介绍:
内核版本:2.6.32-431.el6.x86_64
系统采用最小化安装,系统经过了基本优化,selinux为关闭状态,iptables为无限制模式
源码包存放位置:/root
Rsync客户端+inotify服务,承担角色MASTER,IP:172.16.100.3,主机名:rsync-client-inotify
Rsync服务端(S1) ,承担角色S1, IP:172.16.100.1,主机名:rsync-server-1
Rsync服务端(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 ~]# yum install rsync -y
2、修改rsync配置文件
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_backup # 虚拟用户,同步时需要用这个用户
secrets file = /etc/rsync.password # 密码文件
#####################################
[web] # 模块名称
comment = RedHat.sx site files by sunsky 00:17 2013-06-28 # 注释
path = /data/web/redhat.sx # 模块的路径
####################################
[data]
comment = redhat.sx site sit data files by sunsky 00:17 2013-06-28
path = /data/web_data/redhat.sx
#####################################
特别提示:此处,使用一个多目录同步的案例。大家可以看需求,如果需求只有一个,那仅仅做一个目录即可。
上面的rsync服务的配置文件,表明允许M1主服务器(ip为172.16.100.1)访问,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)的写入和更新权限。
3、创建相关待同步目录
[root@rsync-server-1 ~]# mkdir /data/{web,web_data}/redhat.sx -p
[root@rsync-server-1 ~]# tree /data
/data
├── web_data
│ └── redhat.sx
└── web
└── redhat.sx
提示:此步在S1,S2上都要执行,否则,rsync服务会因为没有PATH路径而无法启动。
4、相关认证和权限项配置
[root@rsync-server-1 /]# echo ‘rsync_backup:redhat’ > /etc/rsync.password
[root@rsync-server-1 /]# chmod 600 /etc/rsync.password
[root@rsync-server-1 /]# cat /etc/rsync.password
rsync_backup:redhat
[root@rsync-server-1 /]# ll /etc/rsync.password
-rw-------. 1 root root 20 Jun 4 04:27 /etc/rsync.password
5、以守护进程方式启动rsync服务
[root@rsync-server-1 /]# rsync –-daemon
6、查看rsync服务状态
[root@rsync-server-1 /]# lsof -i tcp:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 10309 root 4u IPv4 94045 0t0 TCP *:rsync (LISTEN)
rsync 10309 root 5u IPv6 94046 0t0 TCP *:rsync (LISTEN)
7、为rsync添加开机自启动
[root@rsync-server-1 /]# echo “# rsyncd service daemon by sun 20140628” >>/etc/rc.local
[root@rsync-server-1 /]# echo “/usr/bin/rsync --daemon” >> /etc/rc.local
[root@rsync-server-1 /]# grep daemon /etc/rc.local
# rsyncd service daemon by sun 20140628
/usr/bin/rsync --daemon
这里顺带附上重启的命令,rsync重启有点麻烦,需要以先杀掉后台守护进程,然后再启动的方式来重启服务。
[root@rsync-server-1 /]# pkill rsync
除非注明,否则均为@蒲公英网原创文章,转载必须以链接形式标明本文链接
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏