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

利用inotify+rsync实现linux文件批量更新

308次阅读
没有评论

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

导读 批量同步、批量更新,这应该是做运维的朋友们经常做的工作,rsync 是 linux 下一款非常强大的同步工具,采用差异同步的方法,只上传文件 / 文件夹的不同部分,同时可以对上传部分先进行压缩,所以 rsync 的传输效率是很高的但 rsync 也有缺点,最大的问题就是每次执行 rsync 命令都会遍历目标目录,当文件不多时,这没什么问题,一旦文件数到了一定规模,那么每次遍历都会消耗很多资源。

如果只对经常改动的目录进行同步,也可以忽略这个问题,如果每次改动的目录多较大,那么就要用到 inotify 了,Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux 内核从 2.6.13 起,加入了对 Inotify 的支持,通过 Inotify 可以监控文件系统中的添加、删除、修改、移动等各种事件,但 inotify 只提供了 C 语言接口,不方便调用,所以我们需要先安装 inotify-tools
利用 inotify+rsync 实现 linux 文件批量更新

系统环境

CentOS_5.7-x86_64
更新源服务器:192.168.9.227
目的服务器:192.168.9.226 192.168.9.228 …

目的服务器配置

192.168.9.226 192.168.9.228(rsync 服务端):

检查 rsync 是否安装
rpm -qa|grep rsync

如果没有发装,执以下命令进行安装

yum -y install rsync
定义 rsync 配置文件 /etc/rsyncd.conf

192.168.9.226:

cat >> /etc/rsyncd.conf << EOF
uid = nobody 
gid = nobody 
use chroot = no 
max connections = 100 
timeout = 600 
pid file = /var/run/rsyncd.pid 
lock file = /var/run/rsyncd.lock 
log file = /var/log/rsyncd.log 
[web1] 
path = /data/www1/ 
ignore errors 
read only = no 
list = no 
hosts allow = 192.168.9.0/255.255.255.0 
auth users = www1 
secrets file = /etc/www1.pwd 
EOF

192.168.9.228:

cat >> /etc/rsyncd.conf << EOF
uid = nobody 
gid = nobody 
use chroot = no 
max connections = 100 
timeout = 600 
pid file = /var/run/rsyncd.pid 
lock file = /var/run/rsyncd.lock 
log file = /var/log/rsyncd.log 
[web2] 
path = /data/www2/ 
ignore errors 
read only = no 
list = no 
hosts allow = 192.168.9.0/255.255.255.0 
auth users = www2 
secrets file = /etc/www2.pwd 
EOF
rsyncd.conf 配置文件详解
uid = nobody // 运行 RSYNC 守护进程的用户
gid = nobody // 运行 RSYNC 守护进程的组
use chroot = 0 // 不使用 chroot
max connections = 0 // 最大连接数,0 为不限制
port = 873 // 默认端口 873
下面这些文件是安装完 RSYNC 服务后自动生成的文件
pid file = /var/run/rsyncd.pid //pid 文件的存放位置
lock file = /var/run/rsync.lock // 锁文件的存放位置. 指定支持 max connections 参数的锁文件, 默认值是 /var/run/rsyncd.lock.
log file = /var/log/rsyncd.log // 日志记录文件的存放位置
Timeout = 300 通过该选项可以覆盖客户指定的 IP 超时时间. 通过该选项可以确保 rsync 服务器不会永远等待一个崩溃的客户端. 超时单位为秒钟,0 表示没有超时定义, 这也是默认值. 对于匿名 rsync 服务器来说, 一个理想的数字是 600.
Log format = %t %a %m %f %b 通过该选项用户在使用 transfer logging 可以自己定制日志文件的字段. 其格式是一个包含格式定义符的字符串, 可以使用的格式定义符如下所示:%h 远程主机名
%a 远程 IP 地址
%l 文件长度字符数
%p 该次 rsync 会话的进程 id
%o 操作类型:"send" 或 "recv"
%f 文件名
%P 模块路径
%m 模块名
%t 当前时间
%u 认证的用户名 (匿名时是 null)
%b 实际传输的字节数
%c 当发送文件时, 该字段记录该文件的校验码
默认 log 格式为:"%o %h [%a] %m (%u) %f %l" , 一般来说, 在每行的头上会添加 "%t [%p]" . 在源代码中同时发布有一个叫 rsyncstats 的 perl 脚本程序来统计这种格式的日志文件.
#transfer logging = yes
使 rsync 服务器使用 ftp 格式的文件来记录下载和上载操作在自己单独的日志中.
syslog facility = local3 指定 rsync 发送日志消息给 syslog 时的消息级别, 常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6 和 local7. 默认值是 daemon.
模块参数 [web1] // 这里是认证的模块名, 在 client 端需要指定
path = /data/www1/ // 需要做镜像的目录, 不可缺少!comment = backup web // 这个模块的注释信息
ignore errors // 可以忽略一些无关的 IO 错误
read only = yes // 该选项设定是否允许客户上载文件. 如果为 true 那么任何上载请求都会失败, 如果为 false 并且服务器目录读写权限允许那么上载是允许的. 默认值为 true.
list = no // 不允许列文件
auth users = bak // 认证的用户名, 如果没有这行则表明是匿名, 此用户与系统无关 该选项指定由空格或逗号分隔的用户名列表, 只有这些用户才允许连接该模块. 这里的用户和系统用户没有任何关系. 如果 "auth users" 被设置, 那么客户端发出对该模块的连接请求以后会被 rsync 请求 challenged 进行验证身份这里使用的 challenge/response 认证协议. 用户的名和密码以明文方式存放在 "secrets file" 选项指定的文件中. 默认情况下无需密码就可以连接模块 (也就是匿名方式).
secrets file = /etc/www1.pwd // 密码和用户名对比表, 密码文件自己生成 该选项指定一个包含定义用户名: 密码对的文件. 只有在 "auth users" 被定义时, 该文件才有作用. 文件每行包含一个 username:passwd 对. 一般来说密码最好不要超过 8 个字符. 没有默认的 secures file 名, 需要限式指定一个 (例如:/etc/www1.pwd). 注意:该文件的权限一定要是 600, 否则客户端将不能连接服务器.
hosts allow = 192.168.9.0/255.255.255.0 // 允许主机或网段
该选项指定哪些 IP 的客户允许连接该模块. 客户模式定义可以是以下形式:单个 IP 地址, 例如:192.168.9.227
整个网段, 例如:192.168.9.0/24, 也可以是 192.168.9.0/255.255.255.0
多个 IP 或网段需要用空格隔开,“*”则表示所有, 默认是允许所有主机连接.
hosts deny = 0.0.0.0/0 // 禁止主机 
建立认证文件 /etc/www1.pwd

此文件须与配置文件中指定文件名保持一致
此处格式为:username:password, 安全问题, 并不建议实际使用中使用 root 用户
192.168.9.226:

echo "www1:741852" >> /etc/www1.pwd

192.168.9.228:

echo "www2:951753" >> /etc/www2.pwd

并且我们需要设置此文件的权限为 600

chmod 600 /etc/www1.pwd
chmod 600 /etc/www2.pwd
chmod 600 /etc/rsyncd.conf
建立 motd 文件(可有可无)

rsyncd.motd 记录了 rsync 服务的欢迎信息, 你可以在其中输入任何文本信息, 如:

echo "Welcome to use the rsync services!" >> /var/rsyncd.motd
启动 rsync
/usr/bin/rsync --daemon
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
更新源服务器配置

192.168.9.227(rsync 客户端)

inotify 可以监视的文件系统事件包括
IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走, 如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被 umount
IN_CLOSE,文件被关闭,等同于 (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于 (IN_MOVED_FROM | IN_MOVED_TO)

注:上面所说的文件也包括目录。

安装 inotify-tools

在安装 inotify-tools 前请先确认你的 linux 内核是否打到了 2.6.13,并且在编译时开启了 CONFIG_INOTIFY 选项,也可以通过以下命令检测

ls /proc/sys/fs/inotify

如果有 max_queued_events,max_user_instances,max_user_watches 三项就说明支持

wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make;make install
编写 rsync 监控脚本
vi /root/rsync.sh
#!/bin/bash
host1=192.168.9.226
host2=192.168.9.228
src=/data/www/
des1=web1
des2=web2
user1=www1
user2=www2
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,delete,create,attrib \
${src} \
| while read file
do
rsync -vzrtopg --delete --progress ${src} ${user1}@${host1}::${des1} --password-file=/etc/www1.pwd &&
rsync -vzrtopg --delete --progress ${src} ${user2}@${host2}::${des2} --password-file=/etc/www2.pwd &&
echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
echo "---------------------------------------------------------------------------"
done
-m,即 --monitor,表示始终保持事件监听状态。-r,即 --recursive,表示递归查询目录。-q,即 --quiet,表示打印出监控事件。-e,即 --event,通过此参数可以指定要监控的事件,常见的事件有 modify、delete、create、attrib 等
--timefmt:指定时间的输出格式
--format:指定变化文件的详细信息 

建立认证文件 (rsync 客户端认证文件只用加入密码)

echo "741852" >> /etc/www1.pwd
echo "951753" >> /etc/www2.pwd
chmod 600 /etc/www1.pwd
chmod 600 /etc/www2.pwd
/bin/sh -n /root/rsync.sh // 语法检查
chmod +x /root/rsync.sh
nohup sh /root/rsync.sh &
echo "nohup sh /root/rsync.sh &" >> /etc/rc.local
同步测试

在更新源服务器上新建一个文件,运行以下的命令,看文件是否可以正常同步,看有无报错信息

rsync -vzrtopg --delete --progress /data/www1/ www1@192.168.9.226::web1 --password-file=/etc/www1.pwd

将要更新的文件提交到更新源服务器中,这样就通过 inotify+rsync 批量的将更新文件同步到所有的目的服务器中,相当方便快捷

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7956980
文章搜索
热门文章
星哥带你玩飞牛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-提高用户访问的响应速度和成功率
随机文章
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...

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

一言一句话
-「
手气不错
150元打造低成本NAS小钢炮,捡一块3865U工控板

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

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

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

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...