Linux高效备份:rsync + inotify实时同步

一、rsync 简介

rsync(Remote Sync)是 Linux 系统下的数据镜像备份工具,支持本地复制、远程同步(通过 SSH 或 rsync 协议),是一个快速、安全、高效的增量备份工具。


二、rsync 特性

  • 支持镜像保存整个目录树和文件系统;
  • 保留文件权限、时间、软硬链接等属性;
  • 无须特殊权限即可安装;
  • 增量备份:仅传输修改过的文件,支持压缩传输,节省带宽;
  • 安全:支持 SSH、SCP 等方式加密传输;
  • 支持匿名传输,常用于网站镜像。

三、rsync 的认证协议

rsync 同步前需认证,支持两种协议:

  1. SSH 协议(常用)
  2. rsync 协议(需启动 rsyncd 服务)

若使用 SSH 认证,无需启动 rsync 服务端守护进程,只需远程主机的用户名和密码即可同步。若不想每次输入密码,可使用 ssh-keygen -t rsa 设置免密登录。

常用命令示例:
# 默认使用 SSH 协议(省略 -e ssh)
rsync -avz /SRC root@192.168.100.20:/DEST# 指定 SSH 端口,默认是22
rsync -avz /SRC -e "ssh -p2222" root@192.168.100.20:/DEST
常用选项说明:
选项说明
-a, --archive归档模式,保留所有属性
-v, --verbose显示详细输出
-q, --quiet静默模式,不输出信息
-r, --recursive递归传输目录
-p, --perms保留权限
-z, --compress压缩传输
--delete删除目标端有而源端没有的文件

四、rsync 命令格式与工作模式

三种命令格式:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
对应三种工作模式:
  1. 本地拷贝(SRC 和 DEST 均无冒号)
  2. 推送到远程(DEST 包含 user@host:
  3. 从远程拉取(SRC 包含 user@host:

五、rsync + inotify 实时同步

背景:

rsync 虽高效,但不实时。inotify 是 Linux 内核提供的文件系统事件监控机制,可监听文件/目录的创建、修改、删除等事件。

组合优势:
  • inotify 监控文件变化;
  • 触发 rsync 实时同步;
  • 解决 rsync 非实时性的问题。

六、实战配置:rsync + inotify 实时同步

环境说明:
服务器类型IP地址应用操作系统
源服务器192.168.100.10rsync + inotifyCentOS 7
目标服务器192.168.100.20rsync 服务端CentOS 7

目标:

将源服务器 /root/etc 实时同步到目标服务器的 /tmp 目录。


配置时钟同步,将源服务器当作时钟服务器

源服务器:

[root@server ~] vim /etc/chrony.conf# Serve time even if not synchronized to a time source.
local stratum 10[root@server ~] systemctl restart chronyd
[root@server ~] systemctl enable chronyd
[root@server ~] hwclock -w

目标服务器:

[root@YDH tmp] vim /etc/chrony.conf
server 192.168.100.10 iburst[root@YDH tmp] systemctl restart chronyd
[root@YDH tmp] systemctl enable chronyd
[root@YDH tmp] hwclock -w
[root@YDH tmp] chronyc sources
210 Number of sources = 1MS Name/IP address         Stratum Poll Reach LastRx Last sample===============================================================================^? 192.168.100.10                0   8     0     -     +0ns[   +0ns] +/-    0ns

步骤一:目标服务器配置(接收端)

关闭防火墙和 SELinux

[root@YDH ~] systemctl stop firewalld
[root@YDH ~] systemctl disable firewalld
[root@YDH ~] setenforce 0
[root@YDH ~] sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux

安装 rsync

yum -y install rsync

配置 /etc/rsyncd.conf

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass[etc_from_client]
path = /tmp/
comment = sync etc from client
uid = root
gid = root
port = 873
ignore errors = yes
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = admin
hosts allow = 192.168.100.10
hosts deny = 192.168.1.1

创建密码文件并设置权限

[root@YDH tmp] echo 'admin:redhat' > /etc/rsync.pass
[root@YDH tmp] cat /etc/rsync.pass 
admin:redhat
#设置文件权限
[root@YDH tmp] chmod 600 /etc/rsync*
[root@YDH tmp] ll /etc/rsync*
-rw-------. 1 root root 384 Sep 20 16:14 /etc/rsyncd.conf
-rw-------. 1 root root  13 Sep 20 16:15 /etc/rsync.pass

启动 rsync 服务并设置开机自启

[root@YDH ~] rsync --daemon --config=/etc/rsyncd.conf
[root@YDH ~] echo 'rsync --daemon --config=/etc/rsyncd.conf' >> /etc/rc.d/rc.local
[root@YDH ~] netstat -tulnp | grep 873
tcp        0      0 0.0.0.0:873            0.0.0.0:*               LISTEN      2043/rsync          
tcp6       0      0 :::873                 :::*                    LISTEN      2043/rsync 

步骤二:源服务器配置(发送端)

关闭防火墙和 SELinux

[root@server ~] systemctl stop firewalld
[root@server ~] systemctl disable firewalld
[root@server ~] setenforce 0
[root@server ~] sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux

安装 rsync 和 inotify-tools

[root@server ~] yum -y install rsync inotify-tools

创建密码文件

[root@server ~] echo 'redhat' > /etc/rsync.pass
[root@server ~] cat /etc/rsync.pass 
redhat
[root@server ~] chmod 600 /etc/rsync.pass

测试同步是否正常

[root@server ~] mkdir -p /root/etc/test
mkdir: created directory '/root/etc'
mkdir: created directory '/root/etc/test'[root@server ~] rsync -avH --port 873 --progress --delete /root/etc/ admin@192.168.100.20::etc_from_client --password-file=/etc/rsync.passsending incremental file list
deleting .font-unix/
deleting .esd-0/socket
deleting .esd-0/
deleting .XIM-unix/
deleting .X11-unix/X1024
deleting .X11-unix/
deleting .Test-unix/
deleting .ICE-unix/1486
deleting .ICE-unix/
deleting .viminfo
deleting .X1024-lock
./
test/sent 77 bytes  received 191 bytes  536.00 bytes/sec
total size is 0  speedup is 0.00
#运行完成后,在目标服务器上查看,在/tmp目录下有test目录,说明数据同步成功
[root@YDH ~] cd /tmp/
[root@YDH tmp] ls
test

步骤三:配置实时同步脚本

安装inotify-tools工具,实时触发rsync进行同步

#查看服务器内核是否支持inotify
[root@server ~] ll /proc/sys/fs/inotify
total 0
-rw-r--r--. 1 root root 0 Sep 20 16:54 max_queued_events
-rw-r--r--. 1 root root 0 Sep 20 16:54 max_user_instances
-rw-r--r--. 1 root root 0 Sep 20  2022 max_user_watches
#如果有这三个max开头的文件则表示服务器内核支持inotify#安装inotify-tools
[root@server ~] yum -y install make gcc gcc-c++[root@server ~] yum -y install inotify-tools#写同步脚本,此步乃最最重要的一步,请慎之又慎。让脚本自动去检测我们制定的目录下 \
#文件发生的变化,然后再执行rsync的命令把它同步到我们的服务器端去[root@server ~] mkdir /yangduhan
[root@server ~] touch /yangduhan/inotify.sh
[root@server ~] chmod +x /yangduhan/inotify.sh

创建监控脚本 /yangduhan/inotify.sh

[root@server ~] vim /yangduhan/inottify.sh#!/bin/bash	
host=192.168.100.20		# 目标服务器的ip(备份服务器)
src=/root/etc			# 在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在)
des=etc_from_client		# 自定义的模块名,需要与目标服务器上定义的同步名称一致
password=/etc/rsync.pass	# 执行数据同步的密码文件
user=admin				# 执行数据同步的用户名
inotifywait=/usr/bin/inotifywait$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' \-e modify,delete,create,attrib $src | while read files; dorsync -avzP --delete --timeout=100 --password-file=$password $src $user@$host::$desecho "${files} was rsynced" >> /tmp/rsync.log 2>&1
done

赋予执行权限并后台运行

[root@server ~] chmod +x /yangduhan/inotify.sh
[root@server ~] nohup /bin/bash /yangduhan/inotify.sh &
[1] 32503nohup: ignoring input and appending output to 'nohup.out'[root@server ~] ps -ef | grep inotify
root       32503    2458  0 17:05 pts/1    00:00:00 bash /yangduhan/inotify.sh
root       32504   32503  0 17:05 pts/1    00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib /root/etc
root       32505   32503  0 17:05 pts/1    00:00:00 bash /yangduhan/inotify.sh
root       32510    2458  0 17:05 pts/1    00:00:00 grep --color=auto inotify

设置开机自启

echo 'nohup /bin/bash /yangduhan/inotify.sh &' >> /etc/rc.d/rc.local

步骤四:验证实时同步

在源服务器创建文件:

[root@localhost ~] touch /root/etc/ydh123

查看日志:

[root@server ~] tail -f /tmp/rsync.log
20220920 17:06 /root/etc/ydh123CREATE was rsynced
20220920 17:06 /root/etc/ydh123ATTRIB was rsynced
#从日志上可以看到,我们生成了一个test文件,并且添加了内容到其里面

在目标服务器检查:

ls /tmp/etc/

源服务器中,设置脚本开机启动:

[root@server ~] chmod +x /etc/rc.d/rc.local 
[root@server ~] ll /etc/rc.d/rc.local 
-rwxr-xr-x. 1 root root 474 Mar 24  2020 /etc/rc.d/rc.local
[root@server ~] echo 'nohup /bin/bash /yangduhan/inotify.sh &' >> /etc/rc.d/rc.local
[root@server ~] tail /etc/rc.d/rc.local 
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.touch /var/lock/subsys/localnohup /bin/bash /yangduhan/inotify.sh &#到目标服务器上去查看是否把新生成的文件自动传上去了:
[root@YDH tmp] ls
etc  test
[root@YDH tmp] cd etc/
[root@YDH etc] ls
yangduhan123  test
[root@YDH etc] pwd
/tmp/etc#由此可见,已将源服务器的/root/etc目录整个同步到了目标服务器,且新增的test文件也自动同步了

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

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

相关文章

一种通过模板输出Docx的方法

起因在2个群里都有网友讨论这个问题,俺就写了一个最简单的例子。其实,我们经常遇到一些Docx的输出的需求,“用模板文件进行处理”是最简单的一个方法,如果想预览也简单 DevExpress 、Teleric 都可以,而且也支持 Web 、…

探索 List 的奥秘:自己动手写一个 STL List✨

📖引言大家好!今天我们要一起来揭开 C 中 list 容器的神秘面纱——不是直接用 STL,而是亲手实现一个简化版的 list!🎉你是不是曾经好奇过:list 是怎么做到高效插入和删除的?🔍迭代器…

mysql占用高内存排查与解决

mysql占用高内存排查-- 查看当前全局内存使用情况(需要启用 performance_schema) SELECT * FROM sys.memory_global_total; -- 查看总内存使用 SELECT * FROM sys.memory_global_by_current_bytes LIMIT 10; -- 按模块分类查看内存使用排行memory/perfor…

构建真正自动化知识工作的AI代理

引言:新一代生产力范式的黎明 自动化知识工作的人工智能代理(AI Agent),或称“智能体”,正迅速从理论构想演变为重塑各行各业生产力的核心引擎。这些AI代理被定义为能够感知环境、进行自主决策、动态规划、调用工具并持…

青少年机器人技术(四级)等级考试试卷-实操题(2021年12月)

更多内容和历年真题请查看网站:【试卷中心 -----> 电子学会 ----> 机器人技术 ----> 四级】 网站链接 青少年软件编程历年真题模拟题实时更新 青少年机器人技术(四级)等级考试试卷-实操题(2021年12月) …

最新短网址源码,防封。支持直连、跳转。 会员无广

最新短网址源码,防封。支持直连、跳转。 会员无广告1.可将长网址自动缩短为短网址,方便记忆和使用。2.短网址默认为临时有效,可付费升级为永久有效,接入支付后可自动完成,无需人工操作。3.系统支持设置图片/文字/跳转页…

缓存-变更事件捕捉、更新策略、本地缓存和热key问题

缓存-基础知识 熟悉计算机基础的同学们都知道,服务的存储大多是多层级的,呈现金字塔类型。通常来说本机存储比通过网络通信的外部存储更快(现在也不一定了,因为网络传输速度很快,至少可以比一些过时的本地存储设备速度…

报表工具DevExpress .NET Reports v25.1新版本亮点:AI驱动的扩展

DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。 DevExpress Reporting控件日前正式发布了v25.1…

kubernetes中pod的管理及优化

目录 2 资源管理方式 2.1 命令式对象管理 2.2 资源类型 2.2.1 常用的资源类型 2.2.2 kubectl常见命令操作 2.3 基本命令示例 2.4 运行和调试命令示例 2.5 高级命令示例 3 pod简介 3.1 创建自主式pod(生产环境不推荐) 3.1.1 优缺点 3.1.2 创建…

解释一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的区别

Linux 操作系统概述Linux 是一种开源的类 Unix 操作系统内核,由 Linus Torvalds 于 1991 年首次发布。作为现代计算的基础设施之一,它具有以下核心特征:多用户多任务特性允许多个用户同时操作系统资源,而模块化设计使其能够适应从…

Windows 系统中,添加打印机主要有以下几种方式

在 Windows 系统中,添加打印机主要有以下几种方式,我将从最简单到最复杂为您详细介绍。 方法一:自动安装(推荐首选) 这是 Windows 10 和 Windows 11 中最简单、最现代的方法。系统会自动搜索网络(包括无线和有线网络)上可用的打印机并安装驱动程序。 操作步骤: 进入…

Mixture of Experts Guided by Gaussian Splatters Matters

Mixture of Experts Guided by Gaussian Splatters Matters: A new Approach to Weakly-Supervised Video Anomaly Detection ICCV2025 https://arxiv.org/pdf/2508.06318 https://github.com/snehashismajhi/GS-MoEAbstract 视频异常检测(VAD)是一项具有…

SeaTunnel Databend Sink Connector CDC 功能实现详解

Databend 是一个面向分析型工作负载优化的 OLAP 数据库,采用列式存储架构。在处理 CDC(Change Data Capture,变更数据捕获)场景时,如果直接执行单条的 UPDATE 和 DELETE 操作,会严重影响性能,无…

算法230. 二叉搜索树中第 K 小的元素

题目:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。示例 1:输入:root [3,1,4,null,2], k 1 输出:1 示例 2&#xff1…

Seaborn数据可视化实战:Seaborn多变量图表绘制高级教程

Seaborn多变量图表实战:从数据到洞察 学习目标 本课程将带领学员深入了解Seaborn库中用于绘制多变量图表的高级功能,包括联合图(Joint Plot)、对角线图(Pair Plot)等。通过本课程的学习,学员将能…

【数智化人物展】首衡科技CTO李蒙:算法会过时,数据会贬值,只有系统智能才具未来性

李蒙本文由首衡科技CTO李蒙投递并参与由数智猿数据猿上海大数据联盟共同推出的《2025中国数智化转型升级先锋人物》榜单/奖项评选。大数据产业创新服务媒体——聚焦数据 改变商业“算法会过时,数据会贬值。”当我第一次在内部战略会上抛出这句话时,现场…

word——将其中一页变成横向

在word中如何将其中一页变成横向? 在需要横向的这一页和上一页插入分节符(连续) 1.点击布局→分隔符→分节符(连续) 2.在所需要横向页将纸张方向改为横向即可。

使用WORD实现论文格式的样式化制作【标题样式、自动序列、页号(分节)、自动目录(修改字体类型)】

背景 每家院校对论文的格式都有一系列的特定要求,相应的会有一份格式标准的说明文档,该说明文档中会罗列对文档各个项的格式标准要求(例如:题目、1级标题、2级标题、页号、每个级别的字体字号,行距,段前段…

分享一个免费开源的网站跟踪分析工具Open-Web-Analytics(和GoogleAnalytics一样)

做独立网站的福音,这个是免费开源的,可增改性强。 开源地址:https://github.com/Open-Web-Analytics/Open-Web-Analytics 下载源码包 接着下载PHP工具:我用XP小皮 phpstudy_pro 地址:phpStudy - Windows 一键部署 …

Maxscript如何清理3dMax场景?

在3ds Max的创作过程中,随着项目的推进,场景往往会积累许多冗余元素,如孤立帮助对象、隐藏对象以及空层等,它们不仅让场景显得杂乱无章,还会占用资源、降低视口性能,影响工作效率。别担心,在本教程中,我们将为大家带来实用妙招——通过简单的Maxscript脚本片段,快速清…