你好,游客 登录 注册 搜索
背景:
阅读新闻

RHCE系列之实时同步----Rsync+Inotify-Tools

[日期:2014-06-28] 来源:Linux社区  作者:nolinux [字体: ]

RHCE系列之备份工具----镜像备份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 架构吧!

简易架构图

RHCE系列之实时同步----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

[root@rsync-server-1 /]# rsync –daemon

更多详情见请继续阅读下一页的精彩内容http://www.linuxidc.com/Linux/2014-06/103806p2.htm

linux
本文评论 ��� 查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款