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

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

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-8 08:47:14 | 显示全部楼层 |阅读模式
rsync简介:

rsync:remote sync,是一款快速增量备份备份工具,能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输。rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次发送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。还能通过脚本或crontab计划任务这执行自动备份。


特点:

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

较高的数据传输效率;

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

支持匿名传输;


rsync命令的工作模式:

shell模式:也称作本地模式;

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

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

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


rsync命令的选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-n:同步测试,不执行真正的同步过程;
-v:详细输出模式
-q:静默模式
-c:checksum,开启校验功能
-r:递归复制
    注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本向;如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要;

-a:归档,保留文件的原有属性;
-p:保留文件的权限;
-t:保留文件的时间戳;
-l:保留符号链接
-g:保留属组
-o:保留属主
-D:保留设备文件

-e ssh:使用ssh作为传输承载;
-z:压缩后传输;

--progress: 显示进度条
--stats: 显示如何执行压缩和传输




rsync同步数据时,需要扫描全部数据计算出增量部分,而后再同步增量数据,如果需要备份数据非常庞大,这样的扫描会非常耗时,使其变得低效;虽然可以通过crontab计划任务实现定期同步,但是也达不到实时同步的要求。此时可以利用inotify来解决此应用瓶颈。


inotify:是linux的内核特性,linux内核从2.6.13版本起引入该特性。通过inotify可以监控linux文件系统中添加、修改、、移动、重命名、删除等各种事件,利用这个内核接口,由于notify是内核功能,因此需要使用时,通过第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。



实例:rsync+inotify实现数据同步传输

实验环境:

rsync服务器:

IP:192.169.1.10

操作系统:CentOS6.7 x86_64


客户端:

IP:192.168.1.11

操作系统:CentOS6.7 x86_64


说明:客户端部署inotify-tools,监控指定目录的文件同步至服务器;


实验过程:

rsync服务器模式配置;

安装rsync和守护进程:

1
# yum install rsync xinetd




启用rsync:

1
2
# vim /etc/xinetd.d/rsync
> disable = no




为rsync提供配置文件:

默认没有配置文件,配置文件分两段,全局配置段1个,共享配置段多个;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# vim /etc/rsyncd.conf
> # 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   :共享配置段;
> [data]    :共享文件名;
> path = /data    :共享文件路径;
> ignore errors = yes    :忽略错误;
> read only = no    :不允许读;
> write only = no    :不允许写;
> hosts allow = 192.168.1.0/24   :白名单;
> hosts deny = *    :黑名单
> list = false    :不允许列出文件;
> uid = root    :运行rsync的用户,覆盖全局配置;
> gid = roo t    :运行rsync的组,覆盖全局配置;
> auth users = chencer    :用户认证;
> secrets file = /etc/rsyncd.passwd    :用户认证文件;





提供用户认证文件:用户为以逗号分隔的在rsyncd.passwd中存在用户名的列表,此文件不能允许其它用户有访问权限,且密码不能超过8个字符;

1
2
3
# vim /etc/rsyncd.passwd
> chencer:chencer
# chmod 600 /etc/rsyncd.passwd




启动服务:

1
2
3
# chkconfig rsync on
# service xinetd start
# ss -tnl | grep 873



wKioL1XtUcjTpc-7AABmxmeCi5c153.jpg

监听于873/tcp端口;



客户端配置;

提供认证文件:仅需要密码;

1
2
# echo "chencer" > /etc/rsync.passwd
# chmod 600 /etc/rsync.passwd




测试同步:

1
2
3
4
5
6
7
8
9
10
11
12
13
Access via rsync daemon:
Pull:
# rsync [OPTION...] [USER@]HOST::SRC... [DEST]
# rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
# rsync [OPTION...] SRC... [USER@]HOST::DEST
# rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST   

例如:
# rsync --password-file=/etc/rsync.passwd chencer@192.168.1.10::data/data
# rsync --password-file=/etc/rsync.passwdrsync://chencer@192.168.1.10/data /data
# rsync --password-file=/etc/rsync.passwd /datachencer@192.168.1.10::data
# rsync --password-file=/etc/rsync.passwd /datarsync://chencer@192.168.1.10/data




安装inotify-tools:inotify-tools来自于epel源;

1
2
# yum install inotify-tools
# rpm -ql inotify-tools



wKiom1XtT8yz9vatAAFJyK67yUA494.jpg


inotifywait命令用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# inotifywait [options] file...
@file:排除指定文件;
常用选项:
-m:始终保持事件监听状态;
-r:递归查询目录;
-q:打印监控事件;
-e:指定监控的事件;
    modify:更改文件;
attrib:文件属性改变,权限、时间戳等;
move:文件移动到监控目录或移出监控目录;
create:创建文件;
delete:删除文件;
--timefmt:指定时间格式;
--format:指定时间输出格式;




提供rsync脚本:

1
2
3
4
5
6
7
8
9
10
11
# vim rsync.sh
> #!/bin/bash
> SRC=/data
> DEST=data
> HOST=192.168.1.10
> USER=chencer
> inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f %e' -e modify,attrib,move,create,delete $SRC | while read files
> do
>     rsync -azq --delete--password-file=/etc/rsync.passwd $SRC $USER@$HOST::$DEST &> /dev/null
> done
# chmod +x rsync.sh




设置开机启动:

# echo "/root/rsync.sh &" >> /etc/rc.d/rc.local


同步测试:

在服务器上创建目录:

wKiom1XtUECSY9gXAACyNfDMQ-U387.jpg


查看服务器:

wKiom1XtUEjwGaKfAAKpZOMMJAY241.jpg

同步成功。



结语:

至此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.iyunv.com/thread-110837-1-1.html 上篇帖子: 【Red Hat linux】LVM逻辑卷管理 下篇帖子: Mail机制和任务计划at、batch、crontab知识梳理和课后练习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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