rsync+inotify组合实现及时远程同步

目录

Rsync(Remote Sync)简介:

Rsync 主要特点:

Rsync 常用命令选项:

Inotify 简介:

Inotify 的主要功能:

结合 Rsync 和 Inotify 实现实时同步:

操作步骤:

配置备份服务器rsync

配置应用服务器inotify

注意事项:


Rsync(Remote Sync)简介:

  • rsync 是一个用于文件同步和备份的命令行工具,可以在本地和远程系统之间高效地同步文件和目录。
  • 它能够快速地复制和同步大量数据,只传输那些发生变化的部分,节省了带宽和时间。
  • 支持完整备份、差量备份和增量备份等多种备份方式,可以根据需求选择不同的备份策略。
Rsync 主要特点:
  • 增量传输:仅传输变化的部分,节省带宽和时间。
  • 文件权限保留:可以保留文件权限、时间戳等元数据。
  • 删除文件同步:支持在目标目录中删除源目录不存在的文件。
  • 压缩传输:支持传输时压缩数据,减少传输量。
  • 远程同步:可以在本地和远程系统之间同步文件。
Rsync 常用命令选项:
  • -a:归档模式,保留所有文件属性,相当于 -rlptgoD
  • -v:详细输出,显示每个文件传输的详细信息。
  • -z:传输时压缩数据,减少传输量。
  • --delete:删除目标目录中不存在于源目录中的文件。
  • --exclude:排除指定文件或目录。
  • --progress:显示传输进度。
  • --backup:在覆盖目标文件时备份已存在的文件。

Inotify 简介:

  • inotify 是 Linux 内核提供的机制,用于监视文件系统事件。
  • 可以监视文件或目录的各种事件,如文件创建、删除、修改、移动等。
  • 可以通过命令行工具 inotifywait 使用这个机制,实现对文件系统的实时监控。
Inotify 的主要功能:
  • 实时监控:可以实时监听文件系统的变化,并触发相应的动作。
  • 文件系统事件:监控文件和目录的各种事件,如创建、删除、修改等。
  • 可编程性:可以通过脚本或程序使用 inotify 进行文件系统监控和处理。

结合 Rsync 和 Inotify 实现实时同步:

  1. 使用 inotifywait 监听源目录的变化。
  2. 当源目录发生变化时,触发 rsync 命令进行同步。
  3. rsync 将变化的文件或目录同步到目标位置。

这样,当文件系统的变化发生时,就可以立即将变化同步到目标位置,实现了文件的实时备份和同步。常见应用场景包括实时数据备份、网站文件同步等。

操作步骤:

应用服务器ip为192.168.1.33,备份服务器ip为192.168.1.22。需要将应用服务器的/var/www/html/ 实时同步给备份服务器的/var/www/html/

配置备份服务器rsync
vim /etc/rsyncd.conf

uid = root
gid = root
use chroot = yes
address = 192.168.1.22
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.1.0/24
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[web_bak]
path = /var/www/html
comment = Document Root of www.myweb.com
read only = no
auth users = backuper
secrets file = /etc/rsyncd_users.db
  • uid = root:指定守护进程运行时所使用的用户的 UID。在这里是 root,表示守护进程会以 root 用户的身份运行。

  • gid = root:指定守护进程运行时所使用的用户组的 GID。与上面类似,这里也是 root,表示守护进程会以 root 用户组的身份运行。

  • use chroot = yes:表示在运行守护进程前,将其 chroot(切换根目录)到指定的路径。在这里是 yes,表示守护进程会以 /var/www/html/ 作为其根目录。

  • address = 192.168.1.22:指定 rsync 守护进程监听的 IP 地址。

  • port 873:指定 rsync 守护进程监听的端口号。默认 rsync 服务的端口号是 873

  • log file = /var/log/rsyncd.log:指定 rsync 守护进程的日志文件路径。

  • pid file = /var/run/rsyncd.pid:指定 rsync 守护进程的 PID 文件路径,用于记录守护进程的进程 ID。

  • hosts allow = 192.168.1.0/24:指定允许访问 rsync 守护进程的主机或 IP 地址范围。在这里是允许 192.168.1.0/24 网段的主机访问。

  • dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2:指定不压缩的文件类型,这些文件类型不会被 rsync 守护进程压缩传输。

  • [web_bak]:定义一个模块,客户端在访问 rsync 时可以使用这个名称。

    • path = /var/www/html:指定这个模块的路径,客户端可以访问的目录路径。在这里是 /var/www/html,表示客户端可以访问和同步的是这个目录。

    • comment = Document Root of www.myweb.com:对这个模块的描述注释。

    • read only = no:表示这个模块是可写的,客户端可以向这个模块写入文件。

    • auth users = backuper:指定允许访问这个模块的授权用户,这里是 backuper

    • secrets file = /etc/rsyncd_users.db:指定包含授权用户密码的文件路径。

rsync --daemon
chmod 777 /var/www/html/

rsync --daemon 是用于启动 rsync 守护进程的命令。通过这个命令,可以在服务器上启动 rsync 守护进程,使得其他客户端可以通过 rsync 协议访问服务器上的共享目录。

配置应用服务器inotify

先调整inotify内核参数

vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p

示例中的设置如下:

  • 这三个参数分别控制着 Linux 系统中 inotify 子系统的行为。下面对每个参数进行解释:

  • fs.inotify.max_queued_events

    • 这个参数定义了每个 inotify 实例中允许排队的事件数量的最大限制。
    • 默认值通常是 16384。
    • 适当增加这个值可以确保即使在高负载时系统也不会丢失任何事件。
  • fs.inotify.max_user_instances

    • 这个参数定义了单个用户可以创建的 inotify 实例的最大数量。
    • 默认值通常是 128。
    • 如果系统需要大量的 inotify 实例,比如同时监视大量文件或目录,可能需要增加这个值。
  • fs.inotify.max_user_watches

    • 这个参数定义了单个用户在所有 inotify 实例中能够监视的文件或目录的最大数量。
    • 默认值通常是 8192。
    • 如果应用程序需要监视大量文件或目录,可能需要增加这个值。
  • fs.inotify.max_queued_events = 16384:允许每个 inotify 实例中排队的事件数量的最大限制为 16384。
  • fs.inotify.max_user_instances = 1024:单个用户可以创建的 inotify 实例的最大数量为 1024。
  • fs.inotify.max_user_watches = 1048576:单个用户在所有 inotify 实例中能够监视的文件或目录的最大数量为 1048576。

安装 inotify-tools

tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make -j4 && make install

编写脚本触发同步

vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.1.22::web_bak/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
    fi
done

使用 inotifywait 监听 /var/www/html/ 目录的文件变化,一旦有变化就触发 rsync 命令同步到备份服务器上。

  1. INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"

    • 定义了一个变量 INOTIFY_CMD,存储了使用 inotifywait 监听 /var/www/html/ 目录的命令。
    • -mrq 选项分别表示递归监听、静默模式、以原始格式输出。
    • -e modify,create,attrib,move,delete 选项指定了需要监听的事件类型,包括文件修改、创建、属性变化、移动和删除。
  2. RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.1.22::web_bak/"

    • 定义了一个变量 RSYNC_CMD,存储了用于同步的 rsync 命令。
    • -azH 选项分别表示压缩传输、保持文件权限、保持硬链接。
    • --delete 选项表示删除目标端(备份服务器)上不存在于源端(本地服务器)的文件。
    • --password-file=/etc/server.pass 指定了密码文件的路径,这样 rsync 就可以使用其中的密码进行认证。
    • /var/www/html/ 是本地源目录。
    • backuper@192.168.1.22::web_bak/ 是备份服务器上的目标模块名。
  3. $INOTIFY_CMD | while read DIRECTORY EVENT FILE

    • 使用 read DIRECTORY EVENT FILEinotifywait 的输出分别赋值给 DIRECTORYEVENTFILE,提高了灵活性和可读性。
    • 在每次文件变化时都会输出当前的目录、事件和文件名,方便调试和监控。
    • 如果只需要简单地监听文件变化并进行同步也可以使用"$INOTIFY_CMD | while read AA" 这样简化了 read 命令的使用,只需要一个变量 AA 就可以处理 inotifywait 的输出。
  4. if [ $(pgrep rsync | wc -l) -le 0 ] ; then

    • 检查当前是否已经有 rsync 进程在运行,如果没有则执行同步操作。
    • pgrep rsync | wc -l 是用来统计 rsync 进程的数量。
    • -le 0 表示小于等于 0,即当前没有 rsync 进程在运行时执行后续操作。
  5. $RSYNC_CMD

    • 执行前面定义的 RSYNC_CMD 命令,即执行 rsync 同步操作到备份服务器。

通过这个脚本,当 /var/www/html/ 目录下的文件发生变化时(修改、创建、属性变化、移动、删除),就会触发 rsync 命令将这些变化同步到备份服务器的 web_bak 模块中。

注意事项:

  • 确保 inotify-tools 包已经安装,以便使用 inotifywait 命令。
  • 确保 /etc/server.pass 文件存在且包含正确的密码。
chmod +x /opt/inotify.sh
chmod 777 /var/www/html/
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local	
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
cd /opt
./inotify.sh

运行脚本后应用服务器的/var/www/html/ 将实时同步给备份服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/526363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法刷题Day24 | 回溯算法基础理论、 77. 组合

目录 0 引言1 回溯算法基础理论1.1 回溯算法模板1.2 2 组合2.1 我的解题2.2 剪枝操作 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:算法刷题Day23 | 回溯算法基础理论、 77. 组合❣️ 寄语:书…

HarmonyOS实战开发-使用OpenGL实现2D图形绘制和动画。

介绍 基于XComponent组件调用Native API来创建EGL/GLES环境,从而使用标准OpenGL ES进行图形渲染。本项目实现了两个示例: 使用OpenGL实现2D的图形绘制和动画;使用OpenGL实现了在主页面绘制两个立方体,光源可以在当前场景中移动&…

智能电网将科技拓展至工厂之外的领域

【摘要/前言】 物联网已然颠覆我们日常生活的许多层面。在家居方面,家电变成连网设备,不仅让我们能控制灯光与上网购物,甚至在出门时提供安全功能。在工业领域,智能工厂改变产品制造的方式。工业物联网(IIoT)不仅让制造商更加敏捷…

启明智显M4核心板驱动17寸屏 为您打造无与伦比的视觉盛宴

近日,启明智显推出M4核心板驱动17寸屏,8 Link LVDS接口下1280*1024分辨率为用户展现了超强的视觉体验。 M4核心板采用纯国产架构,内置了16位DDR内存,为设备提供强大的数据处理能力和高效的运行速度。无论是处理复杂的任务还是进…

关于create table as

create table as这个语句的不熟悉,这个语句建表导致的表主键、索引、auto_increment的丢失。 该语句对"列结构"是可以正常复制的,只有索引、主键等信息会丢失,原以为"AUTO_INCREMENT"是属于id这一列的列信息,…

JSON字符串中获取一个特定字段的值

JSON字符串中获取一个特定字段的值 一、方式一,引用gson工具二、方式二,使用jackson三、方式三,使用jackson转换Object四、方式四,使用hutool,获取报文数组数据 一、方式一,引用gson工具 测试报文&#xf…

医学图像目标跟踪论文阅读笔记 2024.03.14~2024.04.01

“Moving vehicle tracking based on improved tracking–learning–detection algorithm” 2019年 期刊 IET Computer Vision 计算机科学4区 基于改进后的TLD算法(ITLD,improved TLD)对车辆进行long-term单目标跟踪。 改进内容&#xff1…

Authing 正在寻找云原生应用 / Infra 开发者

我们是 Authing,成立于 2019 年,我们是一家平均年龄 95 后的年轻创业公司,现在是中国最大、最领先的身份云基础设施(Identity as a Service, IDaaS)提供商,我们的产品服务了全国各地数百家客户和数十家世界…

思迈特:“人工智能+”浪潮里,国产BI到了关键时刻

作为首个“AI程序员”,Devin最近参与了一系列工作,包括在人力资源外包平台Upwork完成编程工作;潜入一家明星创业公司内部群交流,为公司CTO调整代码方案等。这让整个软件工程行业大受震撼,程序员留言“刷屏”。 “AI…

做海外问卷调查有什么技巧和方法?纯干货讲解

做海外问卷调查无外乎几个步骤:选国家、做人设、测题目、刷题目。每个步骤都有一定的技巧,但是它的技巧成分不是很明显。 国家的选择一般以发达国家为主,国家越发达问卷的数量越多,正常白天做题主流国家选择:新加坡、…

蓝桥杯每日一题:有序分数(递归)

给定一个整数 N,请你求出所有分母小于或等于 N,大小在 [0,1] 范围内的最简分数,并按从小到大顺序依次输出。 例如,当 N5 时,所有满足条件的分数按顺序依次为: 0/1,1/5,1/4,1/3,2/5,12/,35,2/3,3/4,4/5,1/…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块,实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明: 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”,…

继续教育山东第一医科大学临床医学试题及答案,分享几个实用搜题和学习工具 #职场发展#职场发展#笔记

大学生必备的搜题工具,专业课本习题、电子版教材、考研资料、英语四六级等考试题目也能一并搜索,每道题目都有详细的讲解,每个都堪称大学神器。 1.灵兔搜题 这是一个公众号 医学、财经、建筑、计算机、高数、土木.........都可以搜索。 下…

淘宝商品描述API接口:轻松获取商品信息的新途径

淘宝商品描述API接口是淘宝开放平台提供的一种高效、便捷的新途径,旨在帮助开发者轻松获取淘宝商品的详细描述信息。通过这一接口,商家、开发者和用户都能获得商品标题、描述、属性、价格、图片等关键信息,从而满足各种业务需求。 在使用淘宝…

centos7.2系统部署ZooKeeper集群和Kafka集群(集群应用系统商城前置环境)

本次实验将使用centos7.2系统部署部署ZooKeeper集群因为Kafka依赖于ZooKeeper,所以我们一并进行部署。 实验所示的资源软件已上传至百度网盘,需要自取。 链接:https://pan.baidu.com/s/1a-7_iAIX0DBAMkF9bhiTcA?pwd2333 提取码&#xff1…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址:😈 一、环境配置以及数据集准备 数据集准备 官网提供了下载数据集json文件的接口。但是很可能打不开,因为其放在了谷歌云上 https://storage.googleapis.com/ 不过不要担心,网页打不开,咱们可以利用python去…

助力大健康产业发展,深兰科技AI数字伙伴“益小青”亮相世界健博会

4月7日至4月10日,以“健康共同体,科技创未来”为主题的2024年(第六届)世界大健康博览会在武汉隆重举行。大会吸引了千余家知名企业、单位参展,200余位大健康领域重要嘉宾参会。深兰科技携国内首款AI心理陪伴数字人——益小青在展会上公开亮相…

RSA公钥格式公钥结构解析

一次发现RSA der格式公钥2048位(256bytes)有的长度292有的长度294于是分析了下: [root8f64ba75cbd1 tmp]# ll anewpub.der 1_pub.der -rw------- 1 root root 294 Apr 8 02:48 1_pub.der -rw------- 1 root root 292 Apr 8 02:25 anewpub…

为什么网站速度很重要?

网站速度,也被称为页面加载速度或网站性能,是指用户访问网站时,从发出请求到浏览器完全加载并显示网页内容所需的时间。这个速度的快慢直接影响用户的体验和对网站的整体评价。 为什么网站速度很重要? 网站速度之所以非常重要&a…

数仓调优实战:GUC参数调优

1. 前言 适用版本:【8.1.1及以上】 GaussDB(DWS)性能调优系列专题文章,介绍了数据库性能调优的思路和总体策略。在系统级调优中数据库全局的GUC参数对整体性能的提升至关重要,而在语句级调优中GUC参数可以调整估算模型,选择查询…