rsync+inotify实现代码实时同步
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync+inotify实现代码实时同步相关的知识,希望对你有一定的参考价值。
rsync
rsync是lunix系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
优点:
1)、可以镜像保存整个目录树和文件系统。
2)、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3)、无须特殊权限即可安装。
4)、快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
5)、安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。6)、支持匿名传输,以方便进行网站镜象。
缺点:
1)、同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率。
2)、rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。
inotify
inotify 是Linux 的一个内核特性,是一种强大的、细粒度的、异步的文件系统事件监控机制。它可以监控文件系统中的添加、删除、修改、移 动等各种细微事件,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。
rsync+inotify
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了rsync同步数据的实时性问题。
搭建环境
拓扑图如图1所示
图1
开始配置
1、先把两台机的防火墙和selinux关闭,两台机之间配置ssh免密钥通信,并配置时间同步
##配置ssh免密钥通信
[[email protected] ~]# ssh-keygen [[email protected] ~]# ssh-copy-id 192.168.15.12 ##配置时间同步 [[email protected] ~]# yum install -y ntpdate [[email protected] ~]# crontab -e * * * * * ntpdate -u 0.pool.ntp.org
2、在两台服务器上安装rsync
[[email protected] ~]# yum install -y rsync [[email protected] ~]# yum install -y rsync
3、配置rsync文件
(1)、在CentOS1上配置
[[email protected] ~]# mkdir /rsync ##创建目录(需要同步的内容) [[email protected] ~]# vim /etc/rsyncd.conf ##配置主配置文件 uid = root gid = root usechroot = no max connections = 20 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [web_log] path = /rsync/ ##修改为刚刚创建的目录 ignore errors read only = false writeonly = false list = false hosts allow = 192.168.15.0/24 hosts deny = 0.0.0.0/32 auth users = backuser secrets file = /etc/rsync.passwd [[email protected] ~]# cat /etc/rsync.passwd ##配置密码文件 123456 [[email protected] ~]# chmod 600 /etc/rsync.passwd ##给密码文件授权 [[email protected] ~]# rsync --daemon ##启动rsync [[email protected] ~]# ps -ef | grep rsync ##查看rsync是否启动成功 root 1304 1 0 09:25 ? 00:00:00 rsync --daemon root 1330 1083 0 09:29 pts/0 00:00:00 grep --color=auto rsync
(2)、在CentOS2上配置
[[email protected] ~]# mkdir /rsync [[email protected] ~]# vim /etc/rsyncd.conf uid = root gid = root usechroot = no max connections = 20 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [web_log] path = /rsync/ ignore errors read only = false writeonly = false list = false hosts allow = 192.168.15.0/24 hosts deny = 0.0.0.0/32 auth users = backuser secrets file = /etc/rsync.password [[email protected] ~]# cat /etc/rsync.password ##创建密码 backuser:123456 [[email protected] ~]# chmod 600 /etc/rsync.password ##授权 [[email protected] ~]# rsync --daemon ##启动 [[email protected] ~]# ps -ef | grep rsync root 10732 1 0 09:29 ? 00:00:00 rsync --daemon root 10734 1085 0 09:29 pts/0 00:00:00 grep --color=auto rsync
(3)、推送测试
##在CentOS1上创建文件 [[email protected] ~]# cd /rsync/ [[email protected] rsync]# touch {1..10}.txt [[email protected] rsync]# ls 10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt ##到CentOS2上查看 [[email protected] ~]# cd /rsync/ [[email protected] rsync]# ls
推送测试如图2所示
图2
到CentOS2上查看,如图3所示
图3
至此,rsync就已经配置完成了,接下来配置inotify了
4、配置inotify
(1)、安装inotify
[[email protected] src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz ##下载安装包 [[email protected] src]# tar -xf inotify-tools-3.14.tar.gz [[email protected] src]# cd inotify-tools-3.14 [[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify [[email protected] inotify-tools-3.14]# make && make install [[email protected] inotify-tools-3.14]# ln -s /usr/local/src/inotify-tools-3.14 /usr/local/inotify
(2)、配置监控脚本
[[email protected] src]# cat inotify.sh #!/bin/bash /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib /rsync/ | while read file do /usr/bin/rsync -vzrtopg --progress /rsync/ [email protected]::web_log --password-file=/etc/rsync.password /usr/bin/rsync -vzrtopg --delete --progress /rsync/ [email protected]::web_log --password-file=/etc/rsync.password echo "${files} was rsynced" >> /var/log/rsync.log 2>&1 done [[email protected] src]# chmod a+x inotify.sh ##给执行权限 [[email protected] src]# crontab -e ##加入计划任务 * * * * * bash /usr/local/src/inotify.sh
5、测试脚本
(1)、添加文件
在CentOS1上执行脚本,再另外开一个终端登录到CentOS1上,创建文件,如图4和图5所示;在CentOS2上查看,如图6所示
图4
图5
图6
(2)、删除文件
在CentOS1上执行脚本,再另外开一个终端登录到CentOS1上删除文件,如图7和图8所示;在CentOS2上查看,如图9所示
图7
图8
图9
通过对比,我们发现当CentOS1添加文件时,同时也会把文件同步到CentOS2,当CentOS1删除某个文件时,CentOS2上相对应的文件也会被删除。
6、测试
在CentOS1上创建文件名为1-5的txt文本,如图10所示,同时在CentOS2上查看,如图11所示,我们可以发现添加的计划任务已经成功了,可以实现两台机之间的实时同步。
图10
图11
以上是关于rsync+inotify实现代码实时同步的主要内容,如果未能解决你的问题,请参考以下文章