阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

rsync+inotify实现实时数据同步案例

519次阅读
没有评论

共计 9061 个字符,预计需要花费 23 分钟才能阅读完成。

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync 在高端业务系统中也逐渐暴露出了很多不足,首先,rsync 同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync 不能实时的去监测、同步数据,虽然它可以通过 Linux 守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify 组合出现了!

 1.1 inotify 介绍
2.1 rsync+inotify 同步逻辑图
3.1 环境部署
4.1 inotify-slave 部署
4.1.1 检查是否安装 rsync
4.1.2 新建 rsync 用户及模块目录并更改其用户组
4.1.3 编写 rsync daemon 配置文件 /etc/rsyncd.conf
4.1.4 配置虚拟用户的密码文件
4.1.5 启动 rsync 服务
4.1.6 通过 inotify-master 测试推送
5.1 inotify-master 部署
5.1.1 查看当前系统是否支持 inotify
5.1.2 下载 inotify 源码包并编译安装
5.1.3 inotify 之 inotifywait 命令常用参数详解
5.1.4 编写监控脚本并加载到后台执行
5.1.5 实时同步测试
 
1.1 inotify 介绍
inotify 是一种强大的、细粒度的、异步的文件系统事件控制机制。linux 内核从 2.6.13 起,加入了 inotify 支持,通过 inotify 可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 正是实施监控的软件。

——————————————————————————–
2.1 rsync+inotify 同步逻辑图

rsync+inotify 实现实时数据同步案例

——————————————————————————–
3.1 环境部署

主机名

主机 IP 地址

系统版本

系统内核版本

inotify-master

192.168.1.128

CentOS release 6.4 (Final)

2.6.32-358.el6.x86_64

inotify-slave

192.168.1.160

CentOS release 6.4 (Final)

2.6.32-358.el6.x86_64

4.1 inotify-slave 部署
这里就是部署 rsync 服务,rsync daemon 工作模式。
4.1.1 检查是否安装 rsync

[root@inotify-slave ~]# rpm -aq rsync
rsync-3.0.6-9.el6.x86_64

4.1.2 新建 rsync 用户及模块目录并更改其用户组
[root@inotify-slave mail]# useradd rsync -s /sbin/nologin  -M #添加 rsync 用户
[root@inotify-slave mail]# grep rsync /etc/passwd
rsync:x:2004:2004::/home/rsync:/sbin/nologin
[root@inotify-slave mail]# mkdir /backup  #创建 rsync daemon 工作模式的模块目录
[root@inotify-slave mail]# ll -d /backup/
drwxr-xr-x. 2 root root 4096 4 月  22 14:13 /backup/
[root@inotify-slave mail]# chown rsync.rsync /backup/  #更改模块目录的用户组
[root@inotify-slave mail]# ll -d /backup/
drwxr-xr-x. 2 rsync rsync 4096 4 月  22 14:13 /backup/

4.1.3 编写 rsync daemon 配置文件 /etc/rsyncd.conf
[root@inotify-slave /]# cat /etc/rsyncd.conf
##rsyncd.conf start##
# 工作中指定用户(需要指定用户)
uid = rsync
gid = rsync
# 相当于黑洞. 出错定位
use chroot = no
# 有多少个客户端同时传文件
max connections = 200
# 超时时间
timeout = 300
# 进程号文件
pid file = /var/run/rsyncd.pid
# 日志文件
lock file = /var/run/rsync.lock
# 日志文件
log file = /var/log/rsyncd.log
# 模块开始
# 这个模块对应的是推送目录
# 模块名称随便起
[backup]
# 需要同步的目录
path = /backup/
# 表示出现错误忽略错误
ignore errors
# 表示网络权限可写(本地控制真正可写)
read only = false
# 这里设置 IP 或让不让同步
list = false
# 指定允许的网段
hosts allow = 192.168.1.0/24
# 拒绝链接的地址,一下表示没有拒绝的链接。
hosts deny = 0.0.0.0/32
# 不要动的东西(默认情况)
# 虚拟用户
auth users = rsync_backup
# 虚拟用户的密码文件
secrets file = /etc/rsync.password
# 配置文件的结尾
#rsync_config_______________end

4.1.4 配置虚拟用户的密码文件
[root@inotify-slave /]# echo “rsync_backup:leesir” >/etc/rsync.password
[root@inotify-slave /]# cat /etc/rsync.password
rsync_backup:leesir  #注:rsync_backup 为虚拟用户,leesir 为这个虚拟用户的密码
[root@inotify-slave /]# chmod 600 /etc/rsync.password #为密码文件提权,增加安全性
[root@inotify-slave /]# ll /etc/rsync.password
-rw——-. 1 root root 20 4 月  22 14:20 /etc/rsync.password

4.1.5 启动 rsync 服务
[root@inotify-slave /]# rsync –daemon  #启动 rsync 服务
[root@inotify-slave /]# ps -ef |grep rsync
root    14871    1  0 14:24 ?        00:00:00 rsync –daemon
root    14873 14788  0 14:24 pts/0    00:00:00 grep rsync
[root@inotify-slave /]# netstat -lnutp |grep rsync
tcp        0      0 0.0.0.0:873                0.0.0.0:*                  LISTEN      14871/rsync
tcp        0      0 :::873                      :::*                        LISTEN      14871/rsync

4.1.6 通过 inotify-master 测试推送
inotify-master 配置密码文件,测试推送
[root@inotify-master ~]# echo “leesir” >/etc/rsync.password
[root@inotify-master ~]# cat /etc/rsync.password
leesir  #注意:这里只要写密码即可,切记。
[root@inotify-master ~]# chmod 600 /etc/rsync.password
[root@inotify-master ~]# ll /etc/rsync.password
-rw——- 1 root root 7 4 月  22 14:32 /etc/rsync.password
[root@inotify-master ~]# echo “hello leesir”>test.txt
[root@inotify-master ~]# cat test.txt
hello leesir
[root@inotify-master ~]# rsync -avz test.txt rsync_backup@192.168.1.160::backup –password-file=/etc/rsync.password
sending incremental file list
test.txt
sent 82 bytes  received 27 bytes  72.67 bytes/sec
total size is 13  speedup is 0.12

inotify-slave 检查:
[root@inotify-slave /]# ll /backup/
总用量 4
-rw-r–r–. 1 rsync rsync 13 4 月  22 14:34 test.txt
[root@inotify-slave /]# cat /backup/test.txt
hello leesir

——————————————————————————-
5.1 inotify-master 部署
注:
inotify 是 rsync 客户端安装和执行的
企业场景压力测试 200-300 个同步限制,受网卡,磁盘,带宽等的制约。
5.1.1 查看当前系统是否支持 inotify
[root@inotify-master ~]# ll /proc/sys/fs/inotify/
总用量 0
-rw-r–r– 1 root root 0 4 月  22 14:56 max_queued_events
-rw-r–r– 1 root root 0 4 月  22 14:56 max_user_instances
-rw-r–r– 1 root root 0 4 月  22 14:56 max_user_watches
# 显示这三个文件则证明支持。

拓展:
 /proc/sys/fs/inotify/max_queued_evnets     
表示调用 inotify_init 时分配给 inotify instance 中可排队的 event 的数目的最大值,超出这个值的事件被丢弃,但会触发 IN_Q_OVERFLOW 事件。
    /proc/sys/fs/inotify/max_user_instances
表示每一个 real user ID 可创建的 inotify instatnces 的数量上限。
    /proc/sys/fs/inotify/max_user_watches
表示每个 inotify instatnces 可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。
例如:echo 30000000 > /proc/sys/fs/inotify/max_user_watches
 
5.1.2 下载 inotify 源码包并编译安装
[root@inotify-master tools]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  #下载 inotify 源码包
…………………………….
root@inotify-master tools]# ll inotify-tools-3.14.tar.gz
-rw-r–r– 1 root root 358772 3 月  14 2010 inotify-tools-3.14.tar.gz
[root@inotify-master tools]# tar zxf inotify-tools-3.14.tar.gz
[root@inotify-master tools]# cd inotify-tools-3.14
[root@inotify-master inotify-tools-3.14]# ./configure –prefix=/usr/local/inotify-3.14 #配置 inotify, 并指定安装路径为 /usr/local/inotify-3.14
…………………………..
[root@inotify-master inotify-tools-3.14]# make && make install
…………………………..

5.1.3 inotify 之 inotifywait 命令常用参数详解
[root@inotify-master inotify-tools-3.14]# cd /usr/local/inotify-3.14/
[root@inotify-master inotify-3.14]# ./bin/inotifywait –help
-r|–recursive  Watch directories recursively. #递归查询目录
-q|–quiet      Print less (only print events). #打印监控事件的信息
-m|–monitor  Keep listening for events forever.  Without this option, inotifywait will exit after one  event is received.        #始终保持事件监听状态
–excludei <pattern>  Like –exclude but case insensitive.    #排除文件或目录时,不区分大小写。
–timefmt <fmt> strftime-compatible format string for use with %T in –format string. #指定时间输出的格式
–format <fmt>  Print using a specified printf-like format string; read the man page for more details.
# 打印使用指定的输出类似格式字符串
-e|–event <event1> [-e|–event <event2> …] Listen for specific event(s).  If omitted, all events are  listened for.  #通过此参数可以指定需要监控的事件,如下所示:
Events:
access          file or directory contents were read      #文件或目录被读取。
modify          file or directory contents were written    #文件或目录内容被修改。
attrib            file or directory attributes changed      #文件或目录属性被改变。
close            file or directory closed, regardless of read/write mode    #文件或目录封闭,无论读 / 写模式。
open            file or directory opened                    #文件或目录被打开。
moved_to        file or directory moved to watched directory    #文件或目录被移动至另外一个目录。
move            file or directory moved to or from watched directory    #文件或目录被移动另一个目录或从另一个目录移动至当前目录。
create          file or directory created within watched directory    #文件或目录被创建在当前目录
delete          file or directory deleted within watched directory    #文件或目录被删除
unmount        file system containing file or directory unmounted  #文件系统被卸载

5.1.4 编写监控脚本并加载到后台执行
[root@inotify-master scripts]# cat inotify.sh
#!/bin/bash
#para
host01=192.168.1.160  #inotify-slave 的 ip 地址
src=/backup/        #本地监控的目录
dst=backup        #inotify-slave 的 rsync 服务的模块名
user=rsync_backup      #inotify-slave 的 rsync 服务的虚拟用户
rsync_passfile=/etc/rsync.password  #本地调用 rsync 服务的密码文件
inotify_home=/usr/local/inotify-3.14    #inotify 的安装目录
#judge
if [! -e “$src”] \
|| [! -e “${rsync_passfile}” ] \
|| [! -e “${inotify_home}/bin/inotifywait” ] \
|| [! -e “/usr/bin/rsync”];
then
echo “Check File and Folder”
exit 9
fi
${inotify_home}/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ -e close_write,delete,create,attrib $src \
| while read file
do
#  rsync -avzP –delete –timeout=100 –password-file=${rsync_passfile} $src $user@$host01::$dst >/dev/null 2>&1
cd $src && rsync -aruz -R –delete ./  –timeout=100 $user@$host01::$dst –password-file=${rsync_passfile} >/dev/null 2>&1
done
exit 0
[root@inotify-master scripts]# sh inotify.sh &  #将脚本加入后台执行
[1] 13438
[root@inotify-master scripts]#

5.1.5 实时同步测试
 
 inotify-master 操作:
[root@inotify-master scripts]# cd /backup/
[root@inotify-master backup]# ll
总用量 0
[root@inotify-master backup]# for a in `seq 200`;do touch $a;done  #创建 200 个文件
[root@inotify-master backup]# ll  –time-style=full-iso
总用量 0
-rw-r–r– 1 root root 0 2014-04-22 15:34:08.141497569 +0800 1
-rw-r–r– 1 root root 0 2014-04-22 15:34:08.172497529 +0800 10
-rw-r–r– 1 root root 0 2014-04-22 15:34:08.235497529 +0800 100
-rw-r–r– 1 root root 0 2014-04-22 15:34:08.236497529 +0800 101
-rw-r–r– 1 root root 0 2014-04-22 15:34:08.237497529 +0800 102
……………………………..

inotify-slave 检查
[root@inotify-slave backup]# ll  –time-style=full-iso
总用量 0
-rw-r–r–. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 1
-rw-r–r–. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 10
-rw-r–r–. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 100
-rw-r–r–. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 101
-rw-r–r–. 1 rsync rsync 0 2014-04-22 15:34:08.393823754 +0800 102
……………………..

RSync 实现文件备份同步详解   http://www.linuxidc.com/Linux/2014-09/106967.htm

利用 inotifywait 监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm

利用 inotify+rsync 实现 Linux 文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm

inotify-tools+rsync 实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm

rsync 同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm

CentOS 6.5 下 Rsync 远程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm

Linux 文件夹对比并提取的差分文件技巧 -rsync 的妙用 http://www.linuxidc.com/Linux/2016-02/128307.htm

Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134028.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计9061字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7987177
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...