Rsync+inotify实时备份数据

rsync在同步数据的时候,需要扫描所有文件后进行对比,然后进行差量传输,如果文件达到了百万或者千万级别以上是,扫描文件的时间也很长,而如果只有少量的文件变更了,那么此时rsync是非常低效的。所以此时需要一个实时监控文件变化的软件结合rsync来做实时数据备份。

what's inotify

inotify是一个强大的,细粒度的,异步的文件系统事件监控机制,linux内核从2.6.13开始加了这个功能,可以通过监控文件系统添加,删除,修改移动等事件,利用这个接口,第三方软件可以监控文件系统添加,删除,修改移动等事,inotify-tools就是这样的一个第三方软件。

install it

安全前首先确认内核大于2.6.13以上,以下重新编译内核加入inotify的支持,具体方法请自查。

[root@salt ~]# uname -r
2.6.32-504.el6.x86_64
[root@salt ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Nov  4 02:53 max_queued_events
-rw-r--r-- 1 root root 0 Nov  4 02:53 max_user_instances
-rw-r--r-- 1 root root 0 Nov  4 02:53 max_user_watches

如果 ll 后显示有三个,那么说明支持inotify了。
既然系统支持,那么接下来安装它 。
官网地址是:https://github.com/rvoicilas/inotify-tools
我这里的下载地址是:https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

[root@salt tmp]# tar zxf inotify-tools-3.14.tar.gz
[root@salt tmp]# cd inotify-tools-3.14
[root@salt inotify-tools-3.14]# ./configure --prefix=/usr/local/inotifytools && make && make install [root@salt inotify-tools-3.14]# cd /usr/local/inotifytools/
[root@salt inotifytools]# ls
bin  include  lib  share
[root@salt inotifytools]# ll bin/inotifywa*
-rwxr-xr-x. 1 root root 44319 Nov  4 03:00 bin/inotifywait
-rwxr-xr-x. 1 root root 41425 Nov  4 03:00 bin/inotifywatch

安装好inotify-tools,会生成inotifywait 或者 inotifywatch 两个指令,

  • inotifywait用于等待文件或者文件集上的特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树
  • inotifywatch用于收集被监控的文件系统统计数据,包括整个inotify时间发生多少次等信息。
inotify 相关参数

inotify定义了一些接口参数,用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此根据实际情况调节其大小,下面介绍下这些参数:

  • /proc/sys/fs/inotify/max_queued_events 表示调用了inotify_init时分配到inotify_instance中可排队的event数最大值,超过这值就会被丢弃,但会出发IN_Q_QVRFLOW事件
  • /proc/sys/fs/inotify/max_user_instances 表示每一个real_user ID可创建的inotify instances数量上限。
  • /proc/sys/fs/inotify/max_user_watches 表示每个inotify 实例相关联的watchs上限,也就是inotify实例监控最大文件的数量,如果文件数量巨大,这个值也需要调高。如我们修改成8百万
[root@localhost inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_watches
8192
[root@localhost inotify-tools-3.14]# echo "3000000" > /proc/sys/fs/inotify/max_user_watches
[root@localhost inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_watches
3000000
inotifywait 相关参数

inotifywait是一个监控等待事件,可以配合shell脚本来使用它,下面说下常用的几个参数:

  • -m (--monitor) 表示处于一直保持时间监听的状态
  • -r (--recursive) 表示递归查询目录
  • -d (--daemon) 守护进程运行
  • -q (--quiet) 表示打印出监控事件
  • -c (--event) 通过此参数可以指定要监控的事件,常见的事件有modify,delete,create和attrib等等
    man inotifywait可以查询到更多的参数

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

网站架构简单概要

这是一个应用商店业务,前端haproxy负载均衡,中间nginx作为web服务节点,网站数据访问都到后端存储节点,后端存储节点与公司app发布节点通过rsync+inotify进行同步,此时你也许会问了,为什么不直接把APP放在后端存储节点了呢,我们当时是这样考虑:

  • 存储节点是有多台服务器,如果要上传app的话,就得上传很多台服务器,我们通过inotify+rsync就可以上传到发布机上,自己自动同步到多台后端存储服务器了,这样就实现了上传到一台,同步到多台的效果。
  • 服务器都在阿里云,发布机在内网,公司需要访问的话,直接访问内部发布机即可,避免访问阿里云的服务器,占用它的带宽资源。

所以下面就通过inotify+rsync来实现app文件的自动同步了

环境介绍:

以下为实验环境,但是其生产情况和这类似。只不过是服务器数量多了几台罢了。

  • 192.168.141.3 发布机 安装inotify+rsync
  • 192.168.141.4 存储节点 rsync服务端模式

我们在刚才的操作中,已经在192.168.141.3上的发布机安装好了rsync+inotify的,192.168.141.4上把rsync配置成服务器模式,发布机配制成客户端模式,这样发布机上一有东西都自动同步到存储节点。

在存储节点(192.168.141.4)上配置rsync
[root@localhost ~]# useradd store        # 往store家目录下同步数据
[root@localhost ~]# cat /etc/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/rsync.lock
log file = /var/log/rsyncd.log
[appstore]
path = /home/store
comment = app file
ignore errors
read only = no
write only = no
hosts allow = *
list = false
uid = root
gid = root
auth users = store
secrets file = /etc/server.pass
[root@localhost ~]# cat /etc/server.pass
store:123..aa
[root@localhost ~]# chmod 600  /etc/server.pass
[root@localhost ~]# ll   /etc/server.pass
-rw-------. 1 root root 14 Nov  5 01:42 /etc/server.pass    # 千万不要忘记600权限
在发布机(192.168.141.3)上的配置

确保inotify安装正确后,我们首先手动测试下看rsync能不能够正常传输东西

[root@localhost ~]# rsync -vzrtopg --delete --progress /home/store store@192.168.141.4::appstore
Password:
sending incremental file list
store/
store/.bash_logout18 100%    0.00kB/s    0:00:00 (xfer#1, to-check=7/9)
....一堆东西

显然,上面的状态说明rsync正常工作的,接下来写一个脚本,实现rsync+inotify结合工作

[root@localhost ~]# cat syncapp.sh
#!/bin/bash
node1="192.168.141.4"       # 如果有多个服务端,可以node2=xx,node3=xxx,总之自由发挥吧
src=/home/store/            # 确保目录存在
dst=appstore
user=store
/usr/local/inotifytools/bin/inotifywait  -mrq --timefmt '%d/%m/%y %H:%M'  --format '%T %w%f%e' -e close_write,delete,create,attrib $src \
| while read file
dorsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src  $user@$node1::$dstecho "${file}  was rsynced" >> /var/log/rsyncd.log  2&>1
done

脚本相关参数如下:

  • --timefmt 指定时间的输出格式
  • --format 指定变化文件的详细信息
  • -e close_write,delete,create,attrib 需要注意的这个close_write,表示等文件写完以后在触发rsync同步,
  • -e modify,delete,create,attrib
测试是否正常工作

我们在发布机下的/home/store上放一个东西,或者新建一个目录,删除一个东西,如果存储节点能够自动同步过去,那么就正常了。。。。

转载于:https://www.cnblogs.com/liaojiafa/p/6033520.html

通过rsync搭建一个远程备份系统(二)相关推荐

  1. 为自己搭建一个分布式 IM 系统二【从查找算法聊起】

    前言 最近这段时间确实有点忙,这篇的目录还是在飞机上敲出来了的. 言归正传,上周更新了 cim 第一版:为自己搭建一个分布式 IM(即时通讯) 系统:没想到反响热烈,最高时上了 GitHub Tren ...

  2. 如何自己搭建一个ai画图系统? 从0开始云服务器部署novelai

    如何自己搭建一个ai画图系统? 从0开始云服务器部署novelai ​ 上面两张图都是通过ai生成的,是不是有以假乱真的感觉. 本教程提供的是自己搭建一个可以外网访问的ai系统的方法,需要采购gpu服 ...

  3. 所见即搜,3分钟教你搭建一个服装搜索系统!

    摘要:用MindSpore+Jina,基于Fashion-MNIST Dataset搭建的服装搜索系统. 引言 各位算法萌新们,是不是经常训练了模型却不知道如何部署和应用?或者只会调参但不会前端后端所 ...

  4. 用css,html,js搭建一个书店购物系统

    用css,html,js搭建一个书店购物系统,如下: <!DOCTYPE html> <html> <head> <meta charset="ut ...

  5. 实战 | 用Python和MediaPipe搭建一个嗜睡检测系统 (详细步骤 + 源码)

    导读 本文将使用Python和MediaPipe搭建一个嗜睡检测系统 (包含详细步骤 + 源码). 背景介绍 疲劳驾驶的危害不堪设想,据了解,21%的交通事故都因此而生,尤其是高速路上,大多数车辆都是 ...

  6. OpenCV4.5.4 DNN人脸识别模块使用介绍--如何快速搭建一个人脸识别系统

    点击下方卡片,关注"OpenCV与AI深度学习" 视觉/图像重磅干货,第一时间送达 导读 本文主要介绍OpenCV4.5.4中人脸识别模块的使用和简易人脸识别系统的搭建,供大家参考 ...

  7. 【FastAPI 03】FastAPI快速搭建一个博客系统

    标题:FastAPI快速搭建一个博客系统 大家好,我是Kuls. 这是<小白学FastAPI>系列的第三篇文章. 今天我们主要讲的是FastAPI快速搭建一个博客系统. 这里可能有些小伙伴 ...

  8. 自己动手搭建一个OA办公系统,可行吗?

    企业管理,有统一的企业规范非常重要,但是企业的条条框框下,员工们工作效率和办公流程流转的速度却又无法保证了,许多"为别人背锅".浑水摸鱼的情况层出不穷,发展到最后,团队的整体意识和 ...

  9. axios下载图片 node_vue+node.js手把手教你搭建一个直播平台(二)

    上一期,帅气的小羽给老铁们介绍了直播平台的项目的后端搭建,这期就让小羽带大家来搭建一下前端的框架. 1.创建前端工程 毫无疑问,搭建一个项目的框架,那第一步肯定是得创建一个工程啦.cmd命令,输入vu ...

最新文章

  1. python基于tpot训练模型并抑制输出stackingestimator、而是输出单模型例如xgboost设置
  2. 华宇输入法linux,华宇拼音输入法DEB版能切换为五笔输入法,附操作方法
  3. ORA-12519, ORA-00020异常产生原因及解决方案
  4. 【2018.3.31】模拟赛之四-ssl2408 句子【dp,字符串】
  5. 将字符串String str= “abc god 中国 java“ 反转每个单词 结果: “cba dog 国中
  6. 整合后台服务和驱动代码注入
  7. 加载中图片 转圈_对话洛可可平面设计师:平面设计中的效率瓶颈
  8. 这42个Python小例子,太走心~
  9. C语言auto、register、static、extern关键字
  10. 小学三年级下计算机工作计划,小学三年级第二学期班主任工作计划
  11. 标题在图表上_图与表,让你的图表更简单清晰易读,告诉你怎么设置图表
  12. 用Log Explorer恢复数据的基本操作
  13. pr人像磨皮美容插件:Beauty Box for Premiere Pro
  14. Selenium 批量执行url(附完整代码)
  15. CUDA库之NPP(四):内存开辟和字节对齐
  16. Twitter上热门的技巧与思路
  17. VS2019怎么没有C++的窗体应用模板_砖混结构模板技术交底
  18. iPhone 各机型屏幕尺寸
  19. 计算机专业烧钱妈,“最烧钱”的3类大学专业排行:妈妈,我在学校真的什么都没干...
  20. 公园智慧路灯:上海曹杨公园智慧灯杆项目案例分享

热门文章

  1. 【牛客 - 371牛客OI周赛7-提高组A】小睿睿的等式(dp,暴力 )
  2. Coursera自动驾驶课程第13讲:Least Squares
  3. jsp mysql 推荐算法_基于jsp+mysql+Spring+mybatis的SSM协同过滤音乐推荐管理系统(个性化推荐)...
  4. python架构图教程_Python 五分钟绘制漂亮的系统架构图
  5. oracle更换rac节点,Oracle-rac 更改VIP地址—2节点的
  6. Myeclipse 6.5 优化
  7. leetcode 33 搜索旋转排序数组 到处是细节的好题
  8. ncnn网络框架使用指南
  9. win10此电脑不见了_教程 | win10总提示“你要允许此应用对电脑的修改吗”,如何关闭?...
  10. AMD GPU+VS2010的OpenCL配置