rsync + inotify 上行同步

一     上行同步相关概念

1,上行同步是什么

上行同步是指从本地(发起端)向远程(同步源)服务器推送数据的过程。在这种模式下:

  • 本地机器作为数据的源头,通常包含需要更新或备份到远程服务器的文件和目录。
  • 远程服务器作为数据的接收端,等待接收并整合来自本地机器的更改。

2,上行同步应用场景

备份本地数据到云端:用户将个人计算机或服务器上的重要数据同步到云存储服务或远程备份服务器,确保数据的安全性和可用性。

代码版本控制提交:开发者将本地开发环境中的代码更改推送到中央代码仓库(如Git服务器),实现团队协作和版本控制。

日志或监控数据上传:设备或系统将生成的日志文件、监控数据等实时或定时上传到中心分析服务器,便于集中管理和分析。
 

3,上行同步 注意事项

实时上行同步可以通过结合 rsync 和 inotify 等工具实现。inotify 能够监控本地文件系统的事件(如文件创建、修改、删除),一旦检测到变化,立即触发 rsync 命令执行同步操作,确保远程服务器几乎实时地获得本地的最新数据。

4,inotify 作用

为了可以去实时同步 (监控数据,有数据变化就做rsync)

因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。
 

二     上行同步架构图

1,架构图

2,什么叫应用服务器

应用服务器是一种专用的软件服务,其主要职责是为应用程序提供运行环境和支持。它扮演着中间层的角色,处于客户端(如Web浏览器、移动应用程序等)与后端系统(如数据库、文件系统、其他服务等)之间,负责处理客户端的请求、执行业务逻辑、管理会话状态、保障数据安全以及提供必要的资源调度和管理功能。应用服务器是一种专用的软件服务,其主要职责是为应用程序提供运行环境和支持。它扮演着中间层的角色,处于客户端(如Web浏览器、移动应用程序等)与后端系统(如数据库、文件系统、其他服务等)之间,负责处理客户端的请求、执行业务逻辑、管理会话状态、保障数据安全以及提供必要的资源调度和管理功能。

3,具体解释架构图

A 是服务端 B客户端

具体来说,如果您指的是利用inotify来触发上行同步的过程,那么inotify应该被安装在客户端客户端通过配置inotify监听本地文件系统的特定变化,一旦检测到相关事件(如文件修改),就触发上行同步逻辑,将变动的数据上传到服务端。这样,inotify作为触发同步动作的机制,帮助客户端实现了数据变更的实时感知和及时上传。

三     inotify

用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。

inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。

inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
 

四   实验模拟上行同步

1,实验环境

99 机器为服务端     77机器为客户端    搭建rsync 上行同步,将77机器的数据实时同步,上传到99机器。

因此99机器建立一个存放同步数据的文件夹,并且要加其他人可写可读的权限

77机器 配置inotify检测 数据的变化,再用rsync 命令同步到99机器,为了达到实时同步,可以使用脚本。

2,   99 服务端

2.1  修改rsync 的配置文件

代码如下:

# /etc/rsyncd: configuration file for rsync daemon mode# See rsyncd.conf man page for more options.# configuration example:uid = rootgid = rootuse chroot = yes
address = 192.168.217.99
port 873
# max connections = 4pid file = /var/run/rsyncd.pidlog file = /var/log/rsyncd.log
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yeshosts allow = 192.168.217.0/24dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2[ccc]path = /opt/ccc/comment = zhushiread only= noauth users = wyqsecrets file = /etc/rsyncd_users.db
2.2 以守护方式重新启动服务端的rsync

首先删掉进程文件

再以守护启动 。在守护进程模式下,rsync 会作为一个持续运行的服务,监听特定的网络接口和端口,等待来自客户端的连接请求,以执行文件同步任务

 2.3 建存放同步的文件夹 加权限

3, 77 客户端

3.1  调整 inotify 内核参数

在Linux内核中,默认的inotify机制提供了三个调控参数:
max_queue_events(监控事件队列,默认值为16384)、
max_user_instances(最多监控实例数,默认值为128)、
max_user_watches(每个实例最多监控文件数,默认值为8192)

 当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

查看inotify 内核参数   所在位置/proc/sys/fs/inotify/

修改inotify 内核参数 vim /etc/sysctl.conf

建议的数值按生产环境需求:

sysctl -p  刷新内核参数

备注:

  • -p 选项(或 --load)告诉 sysctl 命令从指定的配置文件加载内核参数设置,并将它们应用到当前运行的系统中。如果没有指定文件,sysctl 默认会加载 /etc/sysctl.conf 文件。

3.2  创建 客户机上的   同步的文件夹 并加权限

3.3 下载安装 inotify

解压  压缩包

进到 包里  ./configure  make make install

3.4  使用inotifywait 命令 跟踪同步文件夹的状态
inotifywait -mrq -e modify,create,move,delete /var/www/html/log#选项“-e”:用来指定要监控哪些事件
#选项“-m”:表示持续监控
#选项“-r”:表示递归整个目录
#选项“-q”:简化输出信息

当我们另外一个客户端终端   新建文件时   inotify 会检测到,并以下面的格式输出内容

3.5 用脚本让rsync 实时触发

 脚本代码如下:

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/log"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/log wyq@192.168.217.99::ccc/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
##while判断是否接收到监控记录
doif [ $(pgrep rsync | wc -l) -le 0 ] ; then$RSYNC_CMDfi
done

解释脚本:

  1. 执行 INOTIFY_CMD 命令,其输出(即监控到的事件信息)通过管道 (|) 传递给后面的 while 循环。

  2. 循环内部:

    • read DIRECTORY EVENT FILE读取 inotifywait 输出的每一行,将其按空格分隔成三个变量:DIRECTORY(发生事件的目录)、EVENT(事件类型)和 FILE(受影响的文件名)。

    • if [ $(pgrep rsync | wc -l) -le 0 ] ; then检查当前系统中是否存在正在运行的 rsync 进程。pgrep rsync 查找与 rsync 命令匹配的进程 ID,wc -l 统计返回的行数。如果行数小于等于0,即没有正在运行的 rsync 进程,则执行 if 语句块内的命令。

    • $RSYNC_CMD当满足条件(无其他 rsync 进程在运行)时,执行 RSYNC_CMD 定义的 rsync 同步命令,将 /var/www/html/ 下的文件变化同步到远程服务器。

3.6 给脚本加执行 权限     并让脚本开机自启

/etc/rc.d/rc.local: 这是目标文件路径,通常用于存放系统启动时需要执行的自定义脚本或命令

执行 echo '/opt/inotify.sh' >> /etc/rc.d/rc.local 命令后,会在 /etc/rc.d/rc.local 文件末尾添加一行内容 '/opt/inotify.sh'。这样,在系统下次启动时,会按照文件中的指令顺序执行 /opt/inotify.sh 脚本。这样做的目的是确保上述提到的基于 inotifywait 和 rsync 实现的文件同步脚本能够在系统启动后自动运行,从而持续监控并同步指定目录的文件变化至远程服务器。

需要注意的是,不同 Linux 发行版对 rc.local 的支持程度和配置可能略有差异,确保你的系统支持并已启用 rc.local 自启动功能。此外,确保 /opt/inotify.sh 脚本具有可执行权限(可通过 chmod +x /opt/inotify.sh 命令赋予),且脚本内容本身无误,能够正常运行。

4  ,检测实时同步效果

首先 77客户端执行脚本

 然后再 客户端的同步文件夹  /var/www/html/log/ 不停写文件   可以看到inotify 是可以检测的到的

(这一步可以不做,只是为了展示实验效果)

然后去到服务端的   同步文件夹 /opt/ccc/   可以看到文件被客户端上传过来了 

五      上行同步出错  排错

笔者在做该实验模拟时,脚本达不到实时同步的效果。脚本加了执行权限,客户端和服务端的同步文件夹也给足了权限。但是客户端依旧上传不了。

后经过排错发现,我需要先关闭客户端的rsync,  再执行脚本

因为客户端 如果在运行rsync, 那脚本中   pgrep rsync  只会大于0    从而不会执行while 循环,达到实时同步的效果。

六   总结


Rsync是一个远程同步命令,实现了复制统计比较全方位的数据同步

1.上行同步——上传
客户端(源服务器),通过Rsync命令,同步给服务端(目标服务器),客户端备份数据到服务端

上行同步过程:

首先在客户端和服务器之间建立一个连接,然后比较两个文件;只有在客户端上创建新的或者已更改的文件才会被上传到服务器

一般结合Inotify(文件实时监控)进行使用

2.下行同步——下载
服务器(源服务器),通过Rsync命令,同步给客户端(目标服务器),服务端备份数据到客户端

下行同步过程:

Rsync首先在服务器和客户端之间建立一个连接,然后比较两个文件,只有在服务端上新建的或者已更改的文件才会被下载到客户端

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知名度最高的3款电脑监控软件

知名度最高的3款电脑监控软件 公司电脑监控软件是一种安装在员工电脑上的软件,主要用于监控和管理员工的电脑屏幕操作、网络行为以及文件操作等。这种软件有助于企业提高员工的工作效率,保护公司的数据安全,并维护公司的IT健康环境。 市面有…

LeetCode刷题之105. 从前序与中序遍历序列构造二叉树

文章目录 1.题目描述2. 分析2.1 前序遍历2.1.1 什么是前序遍历?2.1.2 前序遍历有什么特点? 2.2 中序遍历2.2.1 什么是中序遍历2.2.2 中序遍历有什么特点? 2.3 后序遍历2.3.1 什么是后序遍历?2.3.2 特点 2.4 总结 3. 解法 1.题目描…

C++ 圆周率的几种求解方法

公众号:编程驿站 圆周率的常见几种求解算法,包括但不仅仅包含特卡洛模拟、割圆法和公式法。本文讲解这几种算法的实现流程。 1. 蒙特卡洛模拟算法 假设有一个半径为1的圆,如图所示。先绘制一个半径为1的圆。则图中阴影部分(1/4…

动态规划刷题(算法竞赛、蓝桥杯)--区间DP

1、题目链接&#xff1a;[NOI1995] 石子合并 - 洛谷 #include <bits/stdc.h> using namespace std; const int N210; int n,a[N],s[N]; int f[N][N];//存最小值 int g[N][N];//存最大值 int main(){memset(f,0x3f,sizeof f);//求最小初始化为无穷大 memset(g,-0x3f,size…

Elasticsearch索引之嵌套类型:深度剖析与实战应用

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! Elasticsearch是一个基于Lucene的搜索服务器&#xff0c;它提供了一个分布式、多租户能力的全文搜索引擎&#xff0c;并带有一个基…

如何在横向渗透攻击中寻到一线生机

横向渗透&#xff0c;作为计算机网络中的一种攻击技术&#xff0c;展现出了攻击者如何巧妙地利用同一级别系统间的漏洞和弱点&#xff0c;扩大其网络访问权限。与纵向渗透不同&#xff0c;横向渗透不关注权限的垂直提升&#xff0c;而是更侧重于在同一层级内扩展影响力。 横向…

(学习日记)2024.04.10:UCOSIII第三十八节:事件实验

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

【报错】Python3.9及以上相对路径导入文件夹方式

Python3.9及以上相对路径导入文件夹 python跨文件夹调用别的文件夹下的py文件或参数方式 5.7. 包相对导入 相对导入使用前缀点号。 一个前缀点号表示相对导入从当前包开始。 两个或更多前缀点号表示对当前包的上级包的相对导入&#xff0c;第一个点号之后的每个点号代表一级…

二维相位解包理论算法和软件【全文翻译- 掩码(3.4)】

本节我们将研究从质量图中提取掩码的问题。掩码是一个质量图,其像素只有两个值:0 或 1。零值像素标志着质量最低的相位值,这些相位值将被屏蔽、零权重或忽略。第 5 章中的某些 L/ 正则算法需要使用掩码来定义零权重。掩码还可用于某些路径跟踪算法,如第 4.5 节中将要介绍的…

管廊ar实景可视化巡检提升安全性

在科技日新月异的今天&#xff0c;智慧工地ar远程巡检交互系统应运而生&#xff0c;它是ar开发公司深圳华锐视点综合运用了AR增强现实、5G通信、人工智能、物联网以及GPS北斗定位等前沿技术&#xff0c;为企业打造了一套全新的数字化巡检解决方案。不仅解放了巡检人员的双手&am…

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑

引言 在 iOS 开发中&#xff0c;将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下&#xff0c;我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而&#xff0c;如果你没有 Mac 电脑&#xff0c;也没有关系&#xff0c;本文将介绍一…

普通人想要找轻资产创业项目?抖音小店了解一下!

大家好&#xff0c;我是电商小布。 普通人想要创业&#xff0c;考虑的事情无非两点&#xff1a;一个是项目的发展&#xff0c;另一个就是项目的投入和回报。 刚开始的话&#xff0c;大家都是愿意来找一些小而美&#xff0c;轻资产的创业项目来玩的。 而现在相对来说投入不算…