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实现代码实时同步的主要内容,如果未能解决你的问题,请参考以下文章

inotify+rsync实现实时同步

inotify+rsync实现实时同步

rsync与inotify实现数据实时同步

inotify和rsync实现数据实时同步

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

rsync+inotify实时同步