设为首页 收藏本站
查看: 345|回复: 0

[经验分享] 基于rsync+inotify实现数据实时同步传输

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-29 08:51:07 | 显示全部楼层 |阅读模式

前言

与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,但随着文件数量的增大和实时同步的要求,rsync已不能满足需求,随之rsync+inotify便应运而生。本文将讲解rsync的基础知识和如何基于rsync+inotify实现数据实时同步传输。

rsync相关介绍

rsync(remote sync)是一款快速增量备份工具(远程同步),支持本地复制,或者与其他SSH(安全传输)、rsync主机同步。

特点


①可以镜像保存整个目录树或文件系统

②较高的数据传输效率

③可以借助于ssh实现安全数据传输

④支持匿名传输

工作模式

①shell模式,也称作本地模式

②远程shell模式,可以利用ssh协议承载其远程传输过程

③列表模式,仅列出源中的内容,-nv

④服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求

命令选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-n: 同步测试,不执行真正的同步过程;
-v: 详细输出模式
-q: 静默模式
-c: checksum,开启校验功能
-r: 递归复制
-a: 归档,保留文件的原有属性;
-p: 保留文件的权限;
-t: 保留文件的时间戳;
-l: 保留符号链接
-g: 保留属组
-o: 保留属主
-D:保留设备文件
-e ssh: 使用ssh作为传输承载;
-z: 压缩后传输;
--progress: 显示进度条
--stats: 显示如何执行压缩和传输



1
2
3
注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本身;如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要;
如:rsync -r /var/log/ /tmp #复制/var/log目录下的所有文件,不包括log本身
    rsync -r /var/log  /tmp #复制/var/log整个目录



rsync同步数据的时候,需要完整扫描文件,比对变化的文件,如果文件数量过于庞大,这样扫描是非常耗时的,而且rsync虽然可以通过crontab实现定期同步,但是也达不到实时同步的要求,要想解决这一弊端,就需要inotify了

数据实时同步实现

inotify相关介绍

可用于定义监控指定的目录下的所有文件,一旦有文件的元数据发生改变,就通知rsync进行数据同步,以此实现实时同步

部署过程

我们通过一个实例来看一下rsync+inotify是如何实现数据同步的

案例要求

web服务器1:172.16.10.100(主服务器)

web服务器2:172.16.10.212(辅服务器)

两台web服务器,要求在主服务器上更新数据,辅服务器要自动更新数据

rsync角色说明:因为inotify是监控在rsync的客户端,而且是主动同步,所以在此应用场景中主服务器为rsync客户端,辅服务器为rsync服务器端

rsync服务器端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[iyunv@scholar ~]# yum install xinetd -y  #安装守护进程,rsync系统自带,如果没有安装即可
[iyunv@scholar ~]# vim /etc/xinetd.d/rsync
         #修改此项
        disable = no #启用rsync

[iyunv@scholar ~]# vim /etc/rsyncd.conf #为rsync创建配置文件,默认没有此文件

# Global Settings
uid = nobody                      #运行rsync用户
gid = nobody                      #运行rsync组
use chroot = no                   #关闭chroot
max connections = 10              #最大并发连接数
strict modes = yes                #开启严格模式
pid file = /var/run/rsyncd.pid    #pid文件位置
log file = /var/log/rsyncd.log    #日志文件位置

# Directory to be synced
[web]                             #文件共享名
path = /web                       #共享文件路径
ignore errors = yes               #忽略错误
read only = no                    #不允许读
write only = no                   #不允许写
hosts allow = 172.16.0.0/16       #白名单
hosts deny = *                    #黑名单
list = false                      #不允许列出文件
uid = root                        #共享已root用户运行,可覆盖全局配置
gid = root                        #共享已root组运行,可覆盖全局配置
auth users = scholar              #用户认证
secrets file = /etc/rsync.passwd  #认证文件

[iyunv@scholar ~]# vim /etc/rsync.passwd #创建认证文件
#格式:username:password,此文件不能允许其它用户有访问权限,且密码不能超过8个字符
scholar:scholar

[iyunv@scholar ~]# chmod 600 /etc/rsync.passwd #设置权限



启动服务,设置开机自启,查看监听端口

wKiom1U936bxeqjyAAB89RSJ0Gc120.jpg

rsync客户端配置

创建认证文件,只需密码即可

wKioL1U95iDiItirAABzsOuPt0w948.jpg

测试数据同步的方法

1
2
3
4
5
6
7
8
9
Access via rsync daemon:
   Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
   如:rsync --password-file=/etc/rsync.passwd scholar@172.16.10.212::web /web
       rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
   如:rsync --password-file=/etc/rsync.passwd rsync://scholar@172.16.10.212/web /web
   Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
   如:rsync --password-file=/etc/rsync.passwd /web scholar@172.16.10.212::web
         rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
   如:rsync --password-file=/etc/rsync.passwd /web rsync://scholar@172.16.10.212/web  



安装inotify-tools

1
2
3
4
[iyunv@scholar ~]# tar xf inotify-tools-3.14.tar.gz
[iyunv@scholar ~]# cd inotify-tools-3.14
[iyunv@scholar inotify-tools-3.14]# ./configure
[iyunv@scholar inotify-tools-3.14]# make && make install



创建rsync脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@scholar ~]# vim /usr/local/bin/rsyncd

#!/bin/bash
SRC=/web/
DEST=web
HOST=172.16.10.212
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e
modify,delete,create,attrib $SRC | while read files;
do
        rsync -vzrtopg --delete --progress --password-file=/etc/rsync.passwd $SRC
        scholar@$HOST::$DEST
done

#inotifywait参数详解:
#-m,表示始终保持事件监听状态
#-r,表示递归查询目录
#-q,表示打印出监控事件
#-e,指定要监控的事件,包括modify、delete、create、attrib等
#--timefmt:指定时间的输出格式
#--format:指定变化文件的详细信息



设置开机自动运行

wKiom1U-AbHQezqmAABhBvMkLEY927.jpg

测试同步

我们在主服务器上增加一个站点,站点已做好我们直接复制进去

wKiom1U-FBrBS07CAABfl7NdwSM778.jpg

我们去辅服务器上看一下,数据有没有同步过来

wKioL1U-FgTiOEQGAAJsKvu4t2Q984.jpg

同步成功,至此基于rsync + inotify实现数据实时同步配置完成

The end

好了,rsync + inotify就讲到这里了,如果要实现多台从服务器同步,多设几个rsync服务器端就好了,相应的主服务器inotify的脚本也需要略加修改,过程并不麻烦,实验过程中遇到问题可留言。以上仅为个人学习整理,如有错漏,大神勿喷~~~



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61743-1-1.html 上篇帖子: grub引导器损坏修复 下篇帖子: CentOS6安装Jmagick,ImageMagick
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表