利用rsync+inotify搭建实时同步系统

简介:

              利用rsync+inotify搭建实时同步系统

1:单独使用rsync的不足:

rsync同步数据时,需要扫描所有文件后进行比对,然后进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,而且发生变化的往往是其中最少的一部分,因此rsync是非常低效的方式。其此,rsync不能实时监测,同步数据,虽然它可以通过Linux守护进程的方式触发同步,但是两次触发动作一定会有时间差,可能导致服务器端和客户端数据不一致,无法在出现应用故障时完全恢复数据。基于以上原因,rsync+inotify组合出现了。

2:inotify的简介:

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

3:安装inotify工具inotify-tools:

1)inotify的特性需要Linux内核的支持,内核版本需在2.6.13版本以上.

[root@analyse ~]# uname -r
2.6.18-194.32.1.el5

[root@analyse ~]# ll /proc/sys/fs/inotify/
-rw-r--r-- 1 root root 0 04-05 14:46 max_queued_events
-rw-r--r-- 1 root root 0 04-05 14:46 max_user_instances
-rw-r--r-- 1 root root 0 04-05 14:46 max_user_watches
如果有上面3项输出,就表示系统默认支持inotify,可以安装inotify-tools了。

可以到http://inotify-tools.sourceforge.net/下载相应版本的inotify-tools,然后开始编译安装。过程如下:

[root@mail ~]# tar zxvf inotify-tools-3.14.tar.gz

[root@mail ~]# cd inotify-tools-3.14
[root@mail inotify-tools-3.14]# ./configure && make && make install

[root@mail inotify-tools-3.14]# ll /usr/local/bin/inotifywa*
-rwxr-xr-x 1 root root 47208 04-05 15:11 /usr/local/bin/inotifywait
-rwxr-xr-x 1 root root 43562 04-05 15:11 /usr/local/bin/inotifywatch

安装完inotify-tools后,会生成inotifywait和inotifywatch两个指令。其中,inotifywait用于等待文件或文件集的一个特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次信息。

4:inotify相关参数:

inotify定义了一些接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内核参数,因此,可以根据应用需求,实时调节其大小。

[root@mail ~]# cat /proc/sys/fs/inotify/max_queued_events 
16384

##表示调用inotify_init时分配到inotify instance中可排队的event数的最大值,超过这个值得事件被丢弃,但会触发In_q_overflow事件。

[root@mail ~]# cat /proc/sys/fs/inotify/max_user_instances 
128

##表示每一个real user ID可创建的inotify instances的数量上限。

[root@mail ~]# cat /proc/sys/fs/inotify/max_user_watches 
8192

##表示每一个inotify实例相关联的watchs的上限,也就是每一个inotify实例可监控的最大目录数。如果监控的文件数目巨大,需要根据实际情况适当增加此值得大小。例如:

[root@mail ~]# echo 30000000> /proc/sys/fs/inotify/max_user_watches

5:inotifywait相关参数:

inotifywait是一个监控等待事件,可以配合shell脚本使用它。

-m ,即“--monitor”,表示始终保持事件监听状态;

-r ,即“--recursive”,表示递归查询目录;

-q ,即“--quiet”,表示打印出监控事件;

-e ,即“--event”,通过此参数可以指定要监控的事件,常见的事件有modify,delete,create和attrib等。

应用案例:利用rsync+inotify搭建实时同步系统

系统环境:

Web1 192.168.0.189 服务节点

Web2 192.168.0.196 服务节点

Web3 192.168.0.249 服务节点

Server 192.168.0.176 ##充当的是内容分发系统:

1:安装rsync和inotify-tools:

inotify-tools是用来监控文件系统的工具,因此必须安装在内容分发节点上,服务节点上无需安装;所有都安装rsync。

在这个案例中,内容发布节点(即Server)充当rsync的客户端角色,而3个服务节点充当了rsync的服务器端的角色,整个数据同步的过程其实就是一个从客户端向服务器端发送数据的过程.

配置过程略简。

2:在三个服务节点上配置rsync

Web1节点的rsyncd.conf配置如下:


uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log


[web1]
path = /web1/www/
comment = 51auto www file
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.176
hosts deny = *
list = false
uid = root
gid = root
auth users = web1user
secrets file = /etc/web1.passwd

Web2节点的配置如下:

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log


[web2]
path = /web2/www/
comment = 51auto www2 file
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.176
hosts deny = *
list = false
uid = root
gid = root
auth users = web2user
secrets file = /etc/web2.passwd

Web3配置:

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log


[web3]
path = /web3/www/
comment = 51auto www3 file
ignore errors
read only = no
write only = no
hosts allow = 192.168.0.176
hosts deny = *
list = false
uid = root
gid = root
auth users = web3user
secrets file = /etc/web3.passwd

在配置完3台服务节点的rsyncd.conf文件后,依次启动rsync守护进程。接着将rsync服务加入开机启动:

[root@varnish ~]# /usr/local/bin/rsync --daemon

[root@varnish ~]# echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local

-------------------------------------------------------------

3:配置内容分发节点:

配置内容分发节点的主要工作是将生成的静态网页实时同步到集群中3个服务节点上,这个过程可以通过一个shell脚本完成。内容如下:


~                                       
~          










本文转自 kuchuli 51CTO博客,原文链接:http://blog.51cto.com/lgdvsehome/827103,如需转载请自行联系原作者
目录
相关文章
|
存储 分布式计算 监控
Hologres产品介绍与技术揭秘
近年来,随着数据实时化的诉求加剧,催生了一系列的实时数仓架构,Lambda架构也应运而生,但是随着场景的复杂度和业务多维需求,Lambda架构的痛点也越来越明显。HSAP的理念则是服务分析一体化,在本文中,来自阿里巴巴的资深技术专家将会深度剖析HSAP技术实现Hologres的设计原理,解读其产品典型场景。
13211 0
Hologres产品介绍与技术揭秘
|
11月前
|
存储 传感器 监控
未来城市的智慧交通系统
智慧交通系统是未来城市发展的重要组成部分,通过整合物联网、大数据和人工智能技术,实现交通的智能化管理。本文探讨了智慧交通系统的关键技术、架构及其在实际应用中的案例,并展望了未来的发展趋势。
|
11月前
|
机器学习/深度学习 存储 监控
深入解析软件测试中的自动化测试技术
本文旨在全面探讨软件测试中的自动化测试技术。通过对自动化测试的定义、优势、常见工具和实施步骤的详细阐述,帮助读者更好地理解和应用自动化测试。同时,本文还将讨论自动化测试的局限性及未来发展趋势,为软件测试人员提供有益的参考。
324 6
|
9月前
|
前端开发 机器人 UED
OpenAI启动ChatGPT Projects,让你可以组织文件、分组聊天
OpenAI启动ChatGPT Projects,让你可以组织文件、分组聊天
|
10月前
|
NoSQL MongoDB 索引
MongoDB 全文检索
10月更文挑战第23天
119 1
|
数据采集 SQL DataWorks
DataWorks产品使用合集之如何配置数据质量监控
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
155 0
|
SQL 数据采集 分布式计算
DataWorks产品使用合集之如何合并小文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
存储 数据采集 数据处理
基于FPGA的音乐播放器系统设计_kaic
基于FPGA的音乐播放器系统设计_kaic
|
机器学习/深度学习 人工智能 自然语言处理
大模型与大模型的幻觉问题
大模型与大模型的幻觉问题
|
PHP Windows
PHP8.0尝鲜系列(一):Windows 10安装PHP8.0
PHP8.0尝鲜系列(一):Windows 10安装PHP8.0
1001 0
PHP8.0尝鲜系列(一):Windows 10安装PHP8.0