rsync实时同步(上行同步)

news2024/11/25 14:41:56

目录

一、实现实时同步

1. 定期同步的不足

2. 实时同步的优点

3. Linux内核的inotify机制

4. 发起端配置rsync+inotify

4.1 修改rsync源服务器配置文件

4.2 调整inotify内核参数

4.3 安装inotify-tools

4.4 在另一个终端编写触发式同步脚本

4.5 验证

二、使用rsync实现快速删除大量文件

1. 模拟垃圾文件

2. 建立空文件夹

3. 使用rsync进行替换删除


一、实现实时同步

1. 定期同步的不足

  • 执行备份的时间固定,延迟明显、实时性差
  • 当同步源长期不变化时,密集的定期任务是不必要的

2. 实时同步的优点

  • 一旦同步源出现变化,立即启动备份
  • 只要同步源无变化,则不执行备份

3. Linux内核的inotify机制

从版本2.6.13开始提供 可以监控文件系统的变动情况,并作出通知响应

辅助软件:inotify-tools https://img2020.cnblogs.com/blog/2387990/202109/2387990-20210923001203004-668255826.png

4. 发起端配置rsync+inotify

使用inotiify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。 将inotify机制与rsync工具向结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。 因为inotify通知机制由Linux内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步

4.1 修改rsync源服务器配置文件

[root@rsync ~]# vim /etc/rsyncd.conf 
 
##修改read only为no,关闭只读,上行同步需要可以写
read only = no
 
[root@rsync ~]# kill $(cat /var/run/rsyncd.pid)
[root@rsync ~]# rm -rf /var/run/rsyncd.pid
[root@rsync ~]# rsync --daemon
[root@rsync ~]# netstat -natp | grep rsync
tcp        0      0 192.168.122.10:873      0.0.0.0:*               LISTEN      1694/rsync   
       
[root@rsync ~]# chmod 777 /var/www/html

4.2 调整inotify内核参数

在Linux内核中,默认的inotify机制提供了三个调控参数:

  • max_queued_events(监控事件队列,默认值为16384)
  • max_user_instances(最多监控实例数,默认值为128)
  • max_user_watches(每个实例最多监控文件数,默认值为8192)

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

[root@backuper ~]# cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@backuper ~]# cat /proc/sys/fs/inotify/max_user_instances 
128
[root@backuper ~]# cat /proc/sys/fs/inotify/max_user_watches 
8192

可通过/etc/sysctl.conf文件进行配置,设定参数应符合服务器性能以及服务需要。

[root@backuper ~]# vim /etc/sysctl.conf 
 
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
 
[root@backuper ~]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
    
[root@backuper ~]# cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@backuper ~]# cat /proc/sys/fs/inotify/max_user_instances 
1024
[root@backuper ~]# cat /proc/sys/fs/inotify/max_user_watches 
1048576

4.3 安装inotify-tools

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

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

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

[root@backuper ~]# cd /opt
[root@backuper opt]# rz -E
#传入inotify-tools安装包
rz waiting to receive.
[root@backuper opt]# tar zxvf inotify-tools-3.14.tar.gz -C /opt
[root@backuper opt]# cd inotify-tools-3.14/
[root@backuper inotify-tools-3.14]# ./configure
[root@backuper inotify-tools-3.14]# make -j 2 && make install

 

可以先执行“inotifywait”命令,然后另外再开启一个新终端向/var/www/html目录下添加文件、移动文件,在原来的终端上跟踪屏幕输出结果

原终端监控:

[root@backuper inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html
/var/www/html/ CREATE test.php
/var/www/html/ MOVED_FROM test.php
/var/www/html/ MOVED_TO test.txt
/var/www/html/ MODIFY test.txt
/var/www/html/ DELETE test.txt

 

inotifywait常用选项说明
-e用来指定要监控哪些事件
-m表示持续监控
-r表示递归整个目录
-q简化输出信息

4.4 在另一个终端编写触发式同步脚本

[root@backuper html]# 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.122.10::rsync/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
##while判断是否接收到监控记录
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
    fi
done
 
[root@backuper opt]# chmod +x inotify.sh 
[root@backuper opt]# chmod 777 /var/www/html/
[root@backuper opt]# chmod +x /etc/rc.d/rc.local 
[root@backuper opt]# echo '/opt/inotify.sh' >> /etc/rc.d/rc.local
##加入开机自动执行

上述脚本用来检测本机/var/www/html目录的变动情况,一旦有更新触发rsync同步操作,上传备份至服务器192.168.122.11的rsync共享目录下。

4.5 验证

触发式上行同步的验证过程如下:

(1)在本机运行/opt/inotify_rsync.sh脚本程序

[root@backuper opt]# ./inotify.sh &
[1] 5786

(2)切换到本机的/var/www/html目录,执行增加、删除、修改文件等操作

[root@backuper opt]# cd /var/www/html
[root@backuper html]# ls
[root@backuper html]# touch test.html
[root@backuper html]# echo 'this is inotify_rsync test!' > test.html
[root@backuper html]# 

(3)查看远端服务器中的rsync目录下的变化情况

[root@rsync ~]# cd /var/www/html
[root@rsync html]# ls
test.html
[root@rsync html]# cat test.html 
this is inotify_rsync test!

二、使用rsync实现快速删除大量文件

假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么“rm -rf *”可能就不好使了,因为要等待很长一段时间。在这种情况下,我们可以利用rsync的--delete来巧妙处理。rsync实际用的是替换原理。

1. 模拟垃圾文件

[root@rsync html]# touch {1..9999}.txt

2. 建立空文件夹

[root@rsync html]# mkdir /opt/test

3. 使用rsync进行替换删除

[root@rsync html]# rsync --delete-before -a -H -v --progress --stats /opt/test/ /var/www/html/
······
Number of files: 1
Number of files transferred: 0
Total file size: 0 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 19
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 29
Total bytes received: 15
 
sent 29 bytes  received 15 bytes  29.33 bytes/sec
total size is 0  speedup is 0.00
[root@rsync html]# ls
[root@rsync html]# 

--delete-before:接受者在传输前进行删除操作

-a:归档模式,表示以递归方式传输文件,并保持所有文件属性

-H:保持硬链接文件

-v:详细输出模式

--progress:在传输室显示传输过程

--stats:给出某些文件的传输状态

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑与多台罗克韦尔AB PLC无线通讯的搭建方法分为几步?

在实际系统中,同一个车间里分布多台PLC,通过上位机集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候,如果布线的话,工程量较大耽误工期,这种情况下比较适合采用无线通信方式。本方案以组态王和2台…

WinForm用微软打包工具打包

WinForm用微软打包工具打包 1. 安装扩展 下载扩展Microsoft Visual Studio Installer Projects 点击扩展 —> 管理扩展 安装完之后重启VS就好了。 2. 新建Set up项目 点击解决方案 —> 添加 —> 新建项目 选择这个Setup Project 创建打包项目 安装项目&…

nandgame中的asm编程PUSH_VALUE、ADD、SUB、NEG、AND、OR

参考:https://zhuanlan.zhihu.com/p/613188641 PUSH_VALUE题目说明及答案 将值推送到堆栈上。 提示:该值将作为宏的替换值提供,但在测试时,您可以在“测试工具”框中设置该值。现在,我们引入了一个使用占位符的宏。宏…

nginx This request has been blocked; the content must be served over HTTPS问题处理

This request has been blocked; the content must be served over HTTPS问题处理 1.问题现象2.解决问题3.解决后的现象4.proxy_set_header x-forwarded-proto 作用 1.问题现象 Mixed Content: The page at https://www.ssjxx.cn/ssjy/viy-edu/index.html?systemCodeTW0010#/…

iOS-获取Xcode工程中文件的路径

1、使用Create folder references的Add folders的方式把文件或者文件夹拖到Xcode工程中 拖入时的设置参考下图 注意拖入到工程之后文件夹是蓝色的(Xcode10.1环境) 2、代码具体实现: 使用NSBundle的API,然后拼接具体路径即可 NS…

区块链与数字身份:探索Facebook的新尝试

在数字化时代,随着区块链技术的崛起,数字身份成为了一个备受关注的话题。作为全球最大的社交媒体平台之一,Facebook一直在探索如何利用区块链技术来改善数字身份管理和用户数据安全。本文将深入探讨Facebook在这一领域的新尝试,探…

【ArcGIS微课1000例】0109:ArcGIS计算归一化水体指数(NDWI)

文章目录 一、加载数据二、归一化水体指数介绍三、归一化水体指数计算四、注意事项一、加载数据 加载配套数据0108.rar(本实验的数据与0108的一致)中的Landsat8的8个单波段数据,如下所示: Landsat8波段信息对照表如下表所示: 接下来学习在ArcGIS平台上,基于Landsat8数据…

GPT-4对多模态大模型在多模态预训练、 理解生成上的启发

传统人工智能 模型往往依赖大量有标签数据的监督训练,而且一个模型一般只能解决一个任务,仅适用于单一场景, 这使得人工智能的研发和应用成本高,场景适应能力弱,难以规模化应用。 常见的多模态任务大致可以分为两类: 多模态理解任务,如视频 分类、视觉问答、跨模态检索、指代…

5G如何助力物流智能化转型

导语 大家好,我是智能仓储物流技术研习社的社长,你的老朋友,老K。行业群 新书《智能物流系统构成与技术实践》人俱乐部 整版PPT和更多学习资料,请球友到知识星球 【智能仓储物流技术研习社】自行下载 智能制造-话题精读 1、西门子…

Maven的scope详解

依赖范围介绍 maven 项目不同的阶段引入到classpath中的依赖是不同的,例如,编译时,maven 会将与编译相关的依赖引入classpath中,测试时,maven会将测试相关的的依赖引入到classpath中,运行时,mav…

菜狗学前端之JS高级笔记

老样子。复制上来的图片都没了,想看原版可以移步对应资源下载(资源刚上传,还在审核中) (免费) JS高级笔记https://download.csdn.net/download/m0_58355897/89102910 一些前提概念 一 什么是js高级 js高级是对js基础语法的一个补充说明,本质…

JetBrains IDE(IDEA/WebStorm)配置GitHub Copilot

关于 GitHub Copilot 和 JetBrains IDE GitHub Copilot 在编写代码时提供 AI 对程序员的自动完成样式的建议。 有关详细信息,请参阅“关于 GitHub Copilot Individual”。 如果使用 JetBrains IDE,可以直接在编辑器中查看并合并来自 GitHub Copilot 的…

asp.net网上水果销售平台 水果购物商城系统+sqlserver

网上水果销售平台 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库 功能模块: asp.net网上水果销售平台 水果购物商城系统 用户功能有 网站首页 全部水果 我的订单 购物车用户…

python-flask后端知识点

anki 简单介绍: 在当今信息爆炸的时代,学习已经不再仅仅是获取知识,更是一项关于有效性和持续性的挑战。幸运的是,我们有幸生活在一个科技日新月异的时代,而ANKI(Anki)正是一款旗舰级的学习工具…

探索算力(云计算、人工智能、边缘计算等):数字时代的引擎

引言 在数字时代,算力是一种至关重要的资源,它是推动科技创新、驱动经济发展的关键引擎之一。简而言之,算力即计算能力,是计算机系统在单位时间内完成的计算任务数量或计算复杂度的度量。随着科技的不断发展和应用范围的不断扩大…

在ubuntu系统上安装ffmpeg支持rrweb使用rrvideo对视频文件转mp4格式遇到的一些问题及解决办法

在ubuntu系统上安装ffmpeg支持rrweb使用rrvideo对视频文件转mp4格式遇到的一些问题及解决办法 1,ubuntu系统上安装ffmpeg4.4.1稳定版本1,ubuntu系统上安装ffmpeg4.4.1稳定版本 按照ChatGPT3.5来 sudo apt updatesudo apt install build-essential git sudo apt-get instal…

Qt 中的项目文件解析和命名规范

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、Qt项目文件解析 1、.pro 文件解析 2、widget.h 文件解析 3、main.cpp 文件解析 4、widget.cpp…

智慧公厕:提升城市管理效率,改善居民生活体验

智慧公厕作为城市基础设施的重要组成部分,正逐渐成为改善城市品质和提升居民生活体验的一项关键措施。通过智能化管理、数字化使用和信息化运行,智慧公厕不仅可以为城市居民带来更舒适便利的使用体验,而且对于城市的高质量发展、宜居性和包容…

解决Django中的UnicodeDecodeError问题

在使用Django进行Web开发时,有时会遇到一些由于编码不一致引起的问题,特别是在处理文件读写操作时。一个常见的错误是UnicodeDecodeError,其表现为gbk codec cant decode byte 0xa6 in position 9737: illegal multibyte sequence。这个问题通…

CSS3如何实现雷达扫描图(动态样式)

动态样式控制雷达扫描和暂停&#xff1a; //html部分&#xff1a; <view class"radar" :style"{--state:animationPlayState}"></view>data部分&#xff1a; animationPlayState: paused, methods: changeStatus(){this.animationPlayState …