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 = root
 gid = root
 use chroot = yes
address = 192.168.217.99
port 873
# max connections = 4
 pid file = /var/run/rsyncd.pid
 log file = /var/log/rsyncd.log
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
 hosts allow = 192.168.217.0/24
 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

 [ccc]
        path = /opt/ccc/
        comment = zhushi
        read only= no
        auth users = wyq
        secrets 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判断是否接收到监控记录
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
    fi
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首先在服务器和客户端之间建立一个连接,然后比较两个文件,只有在服务端上新建的或者已更改的文件才会被下载到客户端

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

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

相关文章

基于Vue3 中后台管理系统框架

基于Vue3 中后台管理系统框架 文章目录 基于Vue3 中后台管理系统框架一、特点二、源码下载地址 一款开箱即用的 Vue 中后台管理系统框架,支持多款 UI 组件库,兼容PC、移动端。vue-admin, vue-element-admin, vue后台, 后台系统, 后台框架, 管理后台, 管理…

硬件电路板分析维修思路(1)第六条气死人!

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 大家好,我是工程师看海,原创文章欢迎点赞分享! 分析、定位、维修电路是硬件工程师的基本工作内容&#x…

软考信息处理技术员2024年5月报名流程及注意事项

2024年5月软考信息处理技术员报名入口: 中国计算机技术职业资格网(http://www.ruankao.org.cn/) 2024年软考报名时间暂未公布,考试时间上半年为5月25日到28日,下半年考试时间为11月9日到12日。不想错过考试最新消息的…

神经网络与深度学习(二)——性能优化

性能优化 1.常用技巧1.1模型初始化1.2训练数据与测试数据1.3欠拟合与过拟合1.4权重衰减(L2正则化)1.5暂退(Dropout) 2.动量法2.1病态曲率2.2动量法 3.自适应梯度算法3.1AdaGrad3.2RMSProp3.3Adam 4.总结 1.常用技巧 1.1模型初始化…

CSS常见样式

字体相关的样式 <style>div{/* 斜体 */font-style: italic;/* 加粗 100-900*/font-weight: 900;/* 字体大小 */font-size: 20px;/* 声明字体格式 */font-family: "微软雅黑";}</style> div内部文字垂直居中 只需要将行高设为其height的大小即可。 div{…

反转链表 II(leetcode)

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 分享两道解题思路&#xff1a; 第一个&#xff1a; 将left~right之间的节点翻转&#xff0c;首先left前的节点的next置为空&#xff0c;right的指针置为空&#xff0c; 然后拼接 p1指的是left前面的一个 p1-…

静电场概述

什么是静电场 静电场是由特殊的电荷引起场。 这个特殊的电荷指&#xff1a;相对于观察者静止、且电量不随时间改变的电荷。 库仑定律 指在无限大的真空中&#xff0c;当两个静止的小带电体之间的距离远远大于本身的几何尺寸时&#xff0c;该两带电体之间的作用力。 如图所示…

Open CASCADE学习|统计形状拓扑数量

边界表示法&#xff08;Boundary Representation&#xff0c;简称B-Rep&#xff09;是几何造型中最成熟、无二义的表示法。它主要用于描述物体的几何信息和拓扑信息。在边界表示法中&#xff0c;一个实体&#xff08;Solid&#xff09;由一组封闭的面&#xff08;Face&#xff…

手机基带电路设计20问(1)

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海&#xff0c;原创文章欢迎点赞分享&#xff01; 1 小电压和小电流供电是不是可以减小大部分功耗&#xff1…

如何升级ccache的版本 || 安装ccache

由于一些原因之前用的是3.7的ccache&#xff0c;但是遇到了一个bug。 ccache: error: Recursive invocation (the name of the ccache binary must be "ccache")经过查找&#xff0c;这个bug在4版本的时候被修复了&#xff0c;所以就要升级版本。 ccache的文件比较…

K6 性能测试教程:入门介绍,环境搭建和编写第一个 K6 测试脚本

K6 性能测试教程&#xff1a;入门介绍&#xff0c;环境搭建和编写第一个 K6 测试脚本 这篇文章将带您进入 K6 性能测试的世界。博文内容涵盖了 K6 性能测试的入门知识、环境搭建步骤&#xff0c;以及如何编写您的第一个测试脚本。无论您是初学者还是有经验的性能测试专业人员&…

express接口请求的几种方式分析总结

导语 在用express做接口开发的时候&#xff0c;我们要处理post,get,put,delete等请求&#xff0c;以及jsonp的方式&#xff0c;这篇文章记录下结合ajax&#xff0c;实现处理这些请求方式的过程 实现过程 上代码&#xff0c;主要演示post,get及jsonp的请求 <!DOCTYPE htm…

ctfshow web入门 php特性 web123--web139

web123 必须传CTF_SHOW&#xff0c;CTF_SHOW.COM 不能有fl0g 在php中变量名字是由数字字母和下划线组成的&#xff0c;所以不论用post还是get传入变量名的时候都将空格、、点、[转换为下划线&#xff0c;但是用一个特性是可以绕过的&#xff0c;就是当[提前出现后&#xff0c;…

Golang——方法

一. 方法定义 Golang方法总是绑定对象的实例&#xff0c;并隐式将实例作为第一实参。 只能为当前包内命名类型定义方法参数receiver可以任意命名。如方法中未曾使用&#xff0c;可省略参数名参数receiver类型可以是T或*T。基类型T不能是接口或指针类型(即多级指针)不支持方法重…

【Error】Uncaught TypeError: Cannot read properties of undefined (reading ‘get’)

报错原因&#xff1a; 返回值为undefined 解决&#xff1a; vue3可用&#xff1f;

HarmonyOS时区和语言设置-使用相关api实现系统语言和地区设置

介绍 本示例展示了i18n&#xff0c;intl&#xff0c;resourceManager在eTS中的使用&#xff0c;使用相关api实现系统语言和地区设置、时间和时区设置&#xff0c;展示了区域格式化示例。 效果预览 使用说明 1.启动应用&#xff0c;进入应用&#xff0c;首页分为三个按钮&…

谷歌DeepMind发布Gecko:专攻检索,与大7倍模型相抗衡

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 Gecko 是一种通用的文本嵌入模型&#xff0c;可用于训练包括文档检索、语义相似度和分类等各…

JavaScript(三)-Web APIS

文章目录 DOM事件进阶事件流事件流与两个阶段说明事件捕获事件冒泡阻止冒泡解绑事件 事件委托其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 DOM事件进阶 事件流 什么是事件流 事件流指的是事件完整执行过程中的流动路径 事件流与两个阶段说明 捕获与冒泡 …

正确使用@Autowired

目录 一、前言二、跟着官方文档&#xff0c;学习正确使用Autowired0、实验环境1、通过构造方法进行注入1.1 问题1&#xff1a;那万一没有这个CustomerPreferenceDao对象&#xff0c;会报错吗&#xff1f; 2、通过setter方法注入3、通过方法注入&#xff08;这个方法可以是任意名…

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

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