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

[经验分享] rsync+inotify实现数据的实时同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-20 09:33:56 | 显示全部楼层 |阅读模式
rsync简介
rsync(remote sync)是一款数据镜像备份工具,支持本地复制和远程同步。它的基本用法与scp相似,但是它们的同步方式有所区别,rsync在同步之前会检查源目录和目标目录之间是否存在不同之处,如果有,仅复制不同的数据(目标目录中没有的文件),源目录和目标目录中都有的,则会通过提取文件的特征码进行比对(比较内容是否相同,scp会直接覆盖),内容不相同的则进行覆盖,内容相同的不进行同步。所以rsync的效率要比scp或cp高很多。



rsync的特点:

1、可以镜像保存整个目录树或文件系统;
2、较高的数据传输效率;
3、可以借助于ssh实现安全数据传输;
4、支持匿名传输;

rsync命令的常用选项:

-n          #同步测试,不执行真正的同步过程;
-v          #详细输出模式
-q          #静默模式
-c           #checksum,开启校验功能
-r           #递归复制   
-a           #归档(类似-ptlog),保留文件的原有属性;
-e ssh     #使用ssh作为传输承载;
-z            #压缩后传输;
--delete  #删除目标目录中那些源目中录没有的文件
--exclude=pattern     #不同步那些被pattern(正则表达式或文件名)匹配到的文件
--exclude-from=file   #不同步那些被pattern匹配到的文件,将pattern写到file中,一行一个pattern

简单例子:
1
2
3
4
#将远程服务器端数据同步至本地
[iyunv@www data]# rsync -azv --exclude-from=/tmp/pattern root@192.168.1.101:/data/* ./
#将本地文件同步至远程服务器端  
[iyunv@www data]# rsync -azv --exclude-from=/tmp/pattern  ./  root@192.168.1.101:/data/*




rsync的服务模式

实验环境:
192.168.1.101   #rsync服务器
192.168.1.112   #部署inotify,将本机上指定目录下的文件实时同步至192.168.1.101
1)rsync服务有超级守护进程xinetd托管,要启动rsync服务要先启动xinetd。centOS上默认没有安装xinetd。

1
2
[iyunv@www data]# yum install xinetd
[iyunv@www data]# chkconfig rsync on



2)修改/etc/xinetd.d/rsync配置文件,使xinetd能够启动rsync服务
1
2
3
4
5
6
[iyunv@www data]# vim /etc/xinetd.d/rsync
service rsync
{
        disable = no                            #yes改为no
        ....
        ....



3)为rsync提供配置文件/etc/rsyncd.conf,配置文件默认没有。rsync仅提供了一个帮助文档,可根据帮助文档的信息编辑配置文件(man rsyncd.conf)。/etc/rsyncd.conf配置文件分为两段:全局配置段和共享配置端,共享配置端可存在多个。

1
2
3
4
5
[iyunv@www data]# rpm -ql rsync
/etc/xinetd.d/rsync
/usr/bin/rsync
......
/usr/share/man/man5/rsyncd.conf.5.gz              #帮助文档



/etc/rsyncd.conf配置文件示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Global Setting
uid = nobody                       #以哪个用户的身份运行rsync
gid = nobody
use chroot = false                 #关闭chroot      
max connections = 10               #最大并发连接数
strict modes = true                #对secrets file文件的方式是否需要检查权限
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log

# Directory to be synced
[data]                         #共享名称
path = /data                   #共享目录路径
ignore errors = yes
read only = false              #是否允许上传
write only = false             #是否允许下载
hosts allow = 192.168.0.0/16   #允许访问的地址      
hosts deny = *                 #拒绝其他的主机
list = true                    #是否允许客户端列出目录
uid = root                     #运行rsync的用户(覆盖全局配置端)
gid = root                              
auth users = baby,James       #允许访问的用户
secrets file = /etc/rsyncd.passwd     #认证文件(存放用户名和密码)



auth users后面的用户名需要用逗号隔开,并且每个用户名都存在于/etc/rsyncd.passwd中。/etc/rsyncd.passwd格式:username:passwd,用户名密码均为明文。还有一点需要注意,
/etc/rsyncd.passwd这个文件的权限必须是400或者600,否则同步无法完成。


4)修改权限,启动服务。
1
2
3
4
5
[iyunv@www data]# chmod 600 /etc/rsyncd.passwd
[iyunv@www data]# service xinetd start
Starting xinetd:                                           [  OK  ]
[iyunv@www data]# ss -tulnp | grep 873
tcp    LISTEN     0      64            :::873         :::*   users:(("xinetd",4515,5))





5)在客户端创建密码文件(该文件的权限也需要是600或者400)
1
2
[iyunv@www ~]# touch  /etc/rsync.passwd
[iyunv@www ~]# echo "passwd" > /etc/rsync.passwd



然后就可以对rsync服务器共享的目录进行数据的拉取和推送。

远程服务器的书写格式有两种:
(1)[USER@]HOST::SRC              #SRC为共享名称
(2)rsync://[USER@]HOST[:PORT]/SRC
1
2
3
4
5
6
7
8
9
10
11
#查看服务器端共享的目录
[iyunv@www tmp]# rsync --list-only 192.168.1.101::
data
#数据的推送
[iyunv@www tmp]# rsync -avz --password-file=/etc/rsync.passwd /data/ baby@192.168.1.101::data
sending incremental file list      
........
#数据的拉取
[iyunv@www data]# rsync -avz --password-file=/etc/rsync.passwd baby@192.168.1.101::data /data/
receiving incremental file list
........





inotify的使用
innotify是Linux的内核特性,Linux内核从2.6.13版本之后引入该特性。 inotify可以实现跟踪Linux文件系统的变化(新建文件,删除..,修改..,移动等事件)。innotify有两个命令inotifywait,inotifywatch。inotifywait用来监控文件系统的变化,inotifywatch用来监控文件系统的访问次数。通过
inotifywait来监控文件系统,在文件系统发生变化时调用rsync将变化后的数据推送至远程主机可实现数据的实时同步。
(在192.168.1.112上进行)
1)查看内核是否支持inotify特性

1
2
[iyunv@www data]# grep INOTIFY_USER /boot/config-$(uname -r)
CONFIG_INOTIFY_USER=y                  #既支持该特性



2)源码安装inotify-tools-3.14
1
2
3
4
[iyunv@www ~]# tar xf inotify-tools-3.14.tar.gz
[iyunv@www inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools
.....
[iyunv@www inotify-tools-3.14]# make && make install



3)编辑脚本文件
1
2
3
4
5
6
7
8
9
#!/bin/sh
SRC=/data/
MODULE=data
HOST=baby@192.168.1.101
COMMAND=/usr/local/inotify-tools/bin/inotifywait
$COMMAND -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w %f %e' -e create,delete,move,modify $SRC|while read files
do
   rsync -az --password-file=/etc/rsync.passwd --delete $SRC $HOST::$MODULE &> /dev/null
done



#inotifywait参数:
-m              #表示始终保持事件监听状态
-r                #监控所有的子目录
-q               #quite
-e               #指定要监控的事件,包括modify、delete、create、attrib等
--timefmt   #指定时间的输出格式
--format     #指定命令执行时的信息输出格式,%T为前面的时间格式


4)编辑完成之后添加执行权限,运行,测试。(在192.168.1.101端需要将rsync服务开启)

1
2
3
[iyunv@www sbin]# chmod +x rsync.sh
[iyunv@www sbin]# bash -x rsync.sh
.........



复制一个文件至/data目录下
wKioL1Wp3bDCN3O3AALwM_gDc7U703.jpg
1
2
3
4
[iyunv@www data]# ll
total 12
......
-rw-r--r-- 1 root root 1375 Jul 14 18:12 passwd



192.168.0.101的/data目录下已存在对应文件,同步完成!!!

在/etc/rc.local中添加/usr/local/inotify-tools/sbin/rsync.sh &,设置成开机自动启动。


运维网声明 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-88525-1-1.html 上篇帖子: RHCE7网络配置 下篇帖子: Linux基于PXE实现系统自动化部署 linux 软件包
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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