当前位置: 首页 > news >正文

rsync 备份工具(附rsync+inotify 实时同步部署实例)

rsync 备份工具(附rsync+inotify 实时同步部署实例)

  • 1、rsync概述
    • 1.1关于rsync
    • 1.2rsync 的特点
    • 1.3工作原理
  • 2、rsync相关命令
    • 2.1基本格式和常用选项
    • 2.2启动和关闭rsync服务
    • 2.3下行同步基本格式
    • 2.4上行同步基本格式
    • 2.5免交互
      • 2.5.1指定密码文件
      • 2.5.2rsync-daemon方式
      • 2.5.3rsync-ssh方式
    • 2.6定期同步
  • 3、部署rsync定期同步
    • 3.1配置rsync源服务器(节点1)
    • 3.2发起端(节点2)
    • 3.3发起端配置 rsync+inotify
  • 4、使用rsync快速删除大量文件

1、rsync概述

1.1关于rsync

Rsync ( Remote sync)是一个远程数据同步工具,一款快速增量备份工具,使用于unix/Linux/windows等多种平台。

Rsync 使用所谓的“Rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

运行 Rsync server 的机器也叫 backup server,一个 Rsync server 可同时备份多个 client 的数据;也可以多个Rsync server 备份一个 client 的数据。

Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。

Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。
连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。

第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

官方网站: http://rsync.samba.org

1.2rsync 的特点

  • 可以镜像保存整个目录树和文件系统;
  • 可以很容易做到保持原来文件的权限、时间、软硬链接等;
  • 无须特殊权限即可安装;
  • 优化的流程,文件传输效率高;
  • 可以使用 rcp、ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
  • 支持匿名传输。

1.3工作原理

在这里插入图片描述
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为rsync同步源。

首先服务器B(发起源)向服务器A(同步源)进行数据备份,将自己的数据备份到服务器A中。

当服务器B中的数据遭到损失或者增量的时候,都会从服务器A中进行数据同步。

服务器B数据丢失则从服务器A中同步数据丢失的部分。

当服务器B数据增多了,就会再次向服务器A进行数据备份,但是备份的不是完整备份,而是增量备份,即备份同步源中没有的数据。

2、rsync相关命令

2.1基本格式和常用选项

#基本格式
rsync [选项] 原始位置 目标位置

在这里插入图片描述

2.2启动和关闭rsync服务

  • 启动服务
//启动 rsync 服务,以独立监听服务的方式(守护进程)运行 
rsync --daemon				
  • 关闭服务
//关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid

2.3下行同步基本格式

从源服务器拉数据

rsync [选项] 源服务器位置 本地位置

##举个例子#
#格式一
rsync -avz test@192.168.2.102::message /opt/					#格式二
rsync -avz rsync://test@192.168.2.102/message /opt/#test为配置文件中的授权账户
#IP地址为同步源地址
#message 为配置文件中定义的共享模块

2.4上行同步基本格式

推数据到源服务器

rsync [选项] 本地位置 源服务器位置

2.5免交互

2.5.1指定密码文件

echo "abc123" > /etc/server.pass
chmod 600 /etc/server.pass

2.5.2rsync-daemon方式

rsync -avz --delete --password-file=/opt/userlist yiliangchen@192.168.80.30::wwwky31  /opt/data/          #rsync-daemon方式

2.5.3rsync-ssh方式

rsync -avz --delete -e 'sshpass -p abc1234 ssh -p 22' /etc/yum.repos.d root@192.168.80.20:/opt/data       #rsync-ssh方式

2.6定期同步

结合crontab计划任务,可以实现定期同步。

#举个例子 
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.80.10::wwwroot /opt/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。
#在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。systemctl restart crond
systemctl enable crond

3、部署rsync定期同步

3.1配置rsync源服务器(节点1)

yum install -y rsync
//安装rsync服务

在这里插入图片描述

rpm -qc rsync		//查看rsync配置文件位置#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf	//添加以下配置项uid = root
gid = root
use chroot = yes		#禁锢在源目录
max connections = 4
address = 192.168.190.100	#监听地址
port = 873	#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log	#日志文件位置
pid file = /var/run/rsyncd.pid	#存放进程 ID 的文件位置
hosts allow = 192.168.190.0/24	#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型[wwwroot]			#共享模块名称
path = /var/www/html			   #源目录的实际路径
comment = document Root of www
read only = no		#是否为只读
auth users = fsj	#授权账户,多个账号以空格分隔
secrets file = /opt/rsyncd_userlist#存放账户信息的数据文件
#如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
#为备份账户创建数据文件

在这里插入图片描述
在这里插入图片描述

vim /opt/rsyncd_userlist
fsj:abc123  #无须建立同名系统用户

在这里插入图片描述

chmod 600 /etc/rsyncd_users.db

在这里插入图片描述

mkdir -p /var/www/html  //创建文件夹rsync --daemon		#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 

在这里插入图片描述

netstat -anpt | grep rsync

在这里插入图片描述

cd /var/www/htmlcp /etc/fatab ./

在这里插入图片描述

3.2发起端(节点2)

yum install -y rsync
//安装rsync服务

在这里插入图片描述

启动 rsync 服务程序
rsync --daemon		
#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 netstat -anpt | grep rsync

在这里插入图片描述

cd /opt  //切换到opt目录
ls
mkdir data //在opt目录下创建data目录
cd data  //切换到data目录
ls

在这里插入图片描述

#将指定的资源下载到本地/opt 目录下进行备份。
格式一:
rsync -avz fsj@192.168.190.100::wwwky31 /opt/data	#密码abc123

在这里插入图片描述

格式二:
rsync -avz rsync://fsj@192.168.190.100/wwwky31 /opt/data

在这里插入图片描述

免交互格式配置:
echo "abc123" > /etc/server.pass
chmod 600 /etc/server.pass

在这里插入图片描述

rsync -avz --delete --password-file=/opt/rsync_passwd fsj@192.168.190.100::wwwky31 /opt/data

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3发起端配置 rsync+inotify

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

修改rsync源服务器配置文件
vim /etc/rsyncd.conf
......
read only = no											#关闭只读,上行同步需要可以写
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon	
netstat -anpt | grep rsyncchmod 777 /var/www/html/
调整 inotify 内核参数
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

在这里插入图片描述

安装 inotify-tools 用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。
inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。

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

在这里插入图片描述
在这里插入图片描述

然后另外再开启一个新终端向 /var/www/html 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /var/www/html

在这里插入图片描述
在这里插入图片描述

在另外一个终端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效)

yum install -y rsync
//安装rsync服务

在这里插入图片描述

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

在这里插入图片描述

vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/opt/rsync_passwd /vopt/data/fsj@192.168.190.100::wwwky31/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
doif [ $(pgrep rsync | wc -l) -le 0 ] ; then#如果rsync未在执行,则立即启动$RSYNC_CMDfi
done

在这里插入图片描述

chmod +x inotify.sh

在这里插入图片描述

echo admin123 > /opt/rsync_passwd
chmod 600 /opt/rsync_passwd

在这里插入图片描述
在这里插入图片描述

4、使用rsync快速删除大量文件

使用rm -rf *删除大量文件时,效率较低。

此时,利用rsync的替换原理,结合–delete选项,可以实现快速删除大量文件,比如服务的缓存。

相关文章:

rsync 备份工具(附rsync+inotify 实时同步部署实例)

rsync 备份工具(附rsyncinotify 实时同步部署实例) 1、rsync概述1.1关于rsync1.2rsync 的特点1.3工作原理 2、rsync相关命令2.1基本格式和常用选项2.2启动和关闭rsync服务2.3下行同步基本格式2.4上行同步基本格式2.5免交互2.5.1指定密码文件2.5.2rsync-daemon方式2.…...

Java架构师缓存性能优化

目录 1 缓存的负载策略2 缓存的序列化问题3 缓存命中率低4 缓存对数据库高并发访问5 缓存数据刷新的策略5.1. 实时策略5.2. 异步策略5.3. 定时策略6 何时写缓存7 批量数据来更新缓存8 缓存数据过期的策略9 缓存数据如何恢复10 缓存数据如何迁移11 缓存冷启动和缓存预热想学习架…...

探索服务器潜能:创意项目、在线社区与其他应用

目录 一、部署自己的创意项目 优势: 劣势: 结论: 二、打造一款全新的在线社区 优势: 劣势: 结论: 三、其他用途 总结: 随着互联网的发展,越来越多的人开始拥有自己的服务器…...

「网络编程」网络层协议_ IP协议学习_及深入理解

「前言」文章内容是网络层的IP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、IP协议简介二、IP协议报头三、IP网段划分(子网划分)四、特殊的IP地址五、IP地址的数量限制六、私有IP地址和公网IP地址七、路由八、分…...

Go 1.21 新内置函数:min、max 和 clear

max 函数 func max[T cmp.Ordered](x T, y …T) T 这是一个泛型函数,用于从一组值中寻找并返回 最大值,该函数至少要传递一个参数。在上述函数签名中,T 表示类型参数,它必须满足 cmp.Ordered 接口中定义的数据类型要求&#xff0…...

家居行业如何打破获客困局?2023重庆建博会现场,智哪儿AI营销第一课给出了答案

10月12日-14日,2023中国(重庆)建筑及装饰材料博览会(简称:2023中国重庆建博会)正在重庆国际博览中心如火如荼地进行。「智哪儿」携手2023中国重庆建博会主办方共同主办的《2023家居行业AI营销第一课&#x…...

Spring framework Day11:策略模式中注入所有实现类

前言 什么是策略模式? 策略模式(Strategy Pattern)是一种面向对象设计模式,它定义了算法族(一组相似的算法),并且将每个算法都封装起来,使得它们可以互相替换。策略模式让算法的变…...

MBBF展示的奇迹绿洲:5G的过去、此刻与未来

如果你来迪拜,一定不会错过全世界面积最大的人工岛项目,这是被称为世界第八大奇迹的棕榈岛。多年以来,这座岛从一片砂石、一棵棕榈树开始,逐步建成了整个波斯湾地区的地标,吸引着全世界游人的脚步。 纵观整个移动通信发…...

加持智慧医疗,美格智能5G数传+智能模组让就医触手可及

智慧医疗将云计算、物联网、大数据、AI等新兴技术融合赋能医疗健康领域,是提高医疗健康服务的资源利用效率,创造高质量健康医疗的新途径。《健康中国2030规划纲要》把医疗健康提升到了国家战略层面,之后《“十四五”全面医疗保障规划》等一系…...

Stm32_标准库_14_串口蓝牙模块_手机与蓝牙模块通信_实现模块读取并修改信息

由手机向蓝牙模块传输时间信息,Stm32获取信息并将已存在信息修改为传入信息 测试代码: #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h"uint16_t num…...

UDP 的报文结构

UDP的报文结构: 其中前面的源端口号和目的端口号,UDP长度和UDP检验和,它们都是2个字节。 那么什么是UDP长度呢,它指的是后面的数据的长度,换算单位也就是64kb,因此一个数据报(数据)最…...

torch.hub.load报错urllib.error.HTTPError: HTTP Error 403: rate limit exceeded

在运行DINOv2的示例代码时,需要载入预训练的模型,比如: backbone_model torch.hub.load(repo_or_dir"facebookresearch/dinov2", modelbackbone_name) torch.hub.load报错“urllib.error.HTTPError: HTTP Error 403: rate limit…...

测试左移右移-理论篇

目录 前言一、浅解左移1.什么是测试左移?1.1对产品1.2对开发1.3对测试1.4对运维 二、浅解右移1.1对产品1.2对开发1.3对测试1.4对运维 三、总结 前言 测试左移右移,很多人说能让测试更拥有主动权,展示出测试岗位也是有很大的价值,…...

【TensorFlow2 之015】 在 TF 2.0 中实现 AlexNet

一、说明 在这篇文章中,我们将展示如何在 TensorFlow 2.0 中实现基本的卷积神经网络 \(AlexNet\)。AlexNet 架构由 Alex Krizhevsky 设计,并与 Ilya Sutskever 和 Geoffrey Hinton 一起发布。并获得Image Net2012竞赛中冠军。 教程概述: 理论…...

Python进阶之迭代器

文章目录 前言一、迭代器介绍及作用1.可迭代对象2. 迭代器 二、常用函数和迭代器1.常用函数2.迭代器 三、总结结束语 💂 个人主页:风间琉璃🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注…...

Vue鼠标右键画矩形和Ctrl按键多选组件

效果图 说明 下面会贴出组件代码以及一个Demo&#xff0c;上面的效果图即为Demo的效果&#xff0c;建议直接将两份代码拷贝到自己的开发环境直接运行调试。 组件代码 <template><!-- 鼠标画矩形选择对象 --><div class"objects" ref"objectsR…...

【MySQL JDBC】使用Java连接MySQL数据库

一、什么是JDBC&#xff1f; 理解API的概念 API&#xff1a;Application Programing Interface -- 应用程序编程接口写好一个程序&#xff0c;这个程序需要给别人提供哪些功能&#xff1f;这些功能就是通过一些 函数/类 这样的方式来提供的。例如 Random、Scanner、ArrayList..…...

字节码学习之常见java语句的底层原理

文章目录 前言1. if语句字节码的解析 2. for循环字节码的解析 3. while循环4. switch语句5. try-catch语句6. i 和i的字节码7. try-catch-finally8. 参考文档 前言 上一章我们聊了《JVM字节码指令详解》 。本章我们学以致用&#xff0c;聊一下我们常见的一些java语句的特性底层…...

Godot C#连接信号不能像GDScirpt一样自动添加代码

前言 我网上找了好久&#xff0c;发现Godot 对于C# 的支持还有待增强 使用c#脚本有办法像gds那样连接节点自带信号时自动生成信号吗&#xff1f; 百度贴吧 Godot C# How To, Episode 9. Signals With Parameters | Godot Mono 解决方案 把信号拉长&#xff0c;看他的属性 修…...

快速自动化处理JavaScript渲染页面

在进行网络数据抓取时&#xff0c;许多网站使用了JavaScript来动态加载内容&#xff0c;这给传统的网络爬虫带来了一定的挑战。本文将介绍如何使用Selenium和ChromeDriver来实现自动化处理JavaScript渲染页面&#xff0c;并实现有效的数据抓取。 1、Selenium和ChromeDriver简介…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...