rsync+inotify实现同步数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync+inotify实现同步数据相关的知识,希望对你有一定的参考价值。

1、rsync

man一下sync,就会发现:sync-flush file system buffers,它是一个把缓冲区中的数据同步到文件系统中的一个命令;而rsync其实就是remote rsync,它是一个远程同步工具,兼具cp和scp的功能,rsync命令的使用几乎和scp是一样一样的。rsync是通过超级守护进程xinetd进行触发同步的。

1)优点:与cp和scp相比来说,rsync更快,更安全,支持增量备份。rsync在数据同步的过程中,不像cp一样全部都拷贝,而是先去比对特征码,只有不一样的才会去拷贝,如果一样了,就不需再做多余操作。通过使用rsync+crontab可以解决对实时性要求不是太高的场景。

2)缺点:在这个大数据年代,如果数据量非常大,你每做一次任务计划,rsync都会先去遍历目标目录,把所有数据做一次特征码比对,然后进行差量传输,这个过程会是很漫长的,对于那些要求实时性更新比较高的企业来说,无疑是一场噩梦。rsync+inotify组合能够实时的去监控我们的文件系统,只有在数据改变时才会触发它去同步!

rsync有4种模式

   1.本地模式。

   2.远程shell模式

   3.查询模式

   4.C/S模式

2、inotify

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

3、rsync+inotify 好处

1)服务器性能:rsync+crontab会定时去检查是否有文件更新,这势必会造成服务器性能下降;而rsync+inotify组合是触发式更新,只有在数据文件有变化时,才会去更新,因此相对前者而言,是提高了服务器性能。

2)数据实时性:rsync+crontab是周期性任务计划,不能保证数据的实时性;rsync+inotify组合是触发式更新,只要有数据变化,就立刻同步更新。

rsync命令是快速、多用、远程和本地文件复制工具;

命令语法格式:

Local:  rsync [OPTION...] SRC... [DEST]

Access via remote shell:

  Pull: rsync [OPTION...] [[email protected]]HOST:SRC... [DEST]

  Push: rsync [OPTION...] SRC... [[email protected]]HOST:DEST

Access via rsync daemon:

Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]

    rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]

Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST

   rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST

选项:

-v, --verbose:冗长信息;

-r, --recursive:对目录递归;


1.本地模式

rsync -rv /etc/passwd ./  

拷贝passwd 到当前目录 

2.远程shell模式

rsync -rv /etc/passwd 172.18.11.12:/tmp  

把passwd拷贝到远程主机上,类似于scp命令需要用户密码;

3.列表模式

rsync -r 172.18.11.12:/tmp 

查看远程目录下的文件


重点是第四种模式,实现数据同步:

4.C/S模式,数据同步:

实验环境:

master:172.18.11.11

slave:172.18.11.113



实验目标:

实现master主机的/var/ftp/目录下只要有文件变化(可定义),会实时同步到slave主机上的/home/ftp目录下。

在slave端:

]# vim /etc/rsyncd.conf

技术分享

建立密码文件 /etc/rsyncd.pass 如下格式,并确保权限为600或400

]# vim /etc/rsyncd.pass

技术分享

]# chmod 600 /etc/rsyncd.pass


启动守护进程

]# rsync --daemon



]# netstat -tnlp|grep rsync

查看873端口监听;


在master端:

]# vim /etc/rsyncd.pass

技术分享

注意:此密码文件只输入在slave端设置的密码即可;


手动测试,master端passwd文件是否能同步到slave端设定的目录中;

]# rsync -avz /var/ftp/pub/passwd [email protected]::ftp --password-file=/etc/rsyncd.pass

解释:

root为slave端指定的用户;

172.18.11.113为slave端地址;

/etc/rsyncd.pass为存放slave端设置的指定用户的密码;


可在slave端的同步目录查看是否收到passwd文件;


安装inotify-tools

]# yum -y install inotify-tools


编写监控脚本并加载到后台执行:

]# vim /root/rsync.sh 

技术分享

将脚本加入后台执行

]# sh inotify.sh &  


实时同步测试

在master端:

]# for a in `seq 200`;do touch $a;done

创建200个文件;

]# ll  --time-style=full-iso

技术分享


再到slave端查看:

]# ll  --time-style=full-iso /home/ftp

技术分享

实现了数据实时同步。


以上是关于rsync+inotify实现同步数据的主要内容,如果未能解决你的问题,请参考以下文章

rsync+inotify实现同步数据

0基础linux运维教程 Rsync结合inotify实现数据实时同步

rsync+inotify实现数据同步

inotify+rsync实现实时同步

inotify和rsync实现数据实时同步

inotify+rsync实现实时同步