Linux中rsync使用与inotify实时同步配置指南

一、rsync 简介

rsync(Remote Sync)是 Linux 系统下的一款高效数据镜像和备份工具,用于在本地或远程同步文件和目录。

支持本地复制、基于 SSH 的远程同步,以及使用自有 rsync 协议的同步方式。且仅传输文件中发生变化的部分,极大提高了备份效率。

二、rsync 特性

  1. 支持整个目录树和文件系统的镜像备份
  2. 保留文件权限、时间戳、软硬链接等属性
  3. 无需特殊权限即可安装和使用
  4. 高效:首次全量备份,后续仅传输修改部分,支持压缩传输
  5. 安全:支持 SSH、SCP 等加密传输方式,也可直接使用 socket
  6. 支持匿名传输,适用于网站镜像等场景

三、rsync 的认证协议

rsync 同步系统文件之前要先登录 remote 主机认证,支持两种认证协议:

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

若使用 SSH 协议,无需在服务端配置文件/etc/rsyncd.conf,只需具备远程主机的登录权限即可。

示例:使用 SSH 认证

rsync -avz /SRC root@192.168.100.20:/DEST
# 默认使用 SSHrsync -avz /SRC -e ssh root@192.168.100.20:/DEST
# 指定 SSHrsync -avz /SRC -e "ssh -p2222" root@192.168.100.20:/DEST
# 指定非默认 SSH 端口,默认端口为22

四、rsync 常用选项

选项说明
-a, --archive归档模式,保留所有属性,递归同步
-v, --verbose显示详细信息
-q, --quiet不输出信息
-r, --recursive递归同步目录
-p, --perms保留权限
-z, --compress压缩传输
--delete删除目标服务中源服务器没有的文件,在源服务器上做的删除操作同理

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

1、本地复制
rsync [OPTION]... SRC DEST
# 例:rsync -a a afile
2、推送到远程(本地 → 远程)
rsync [OPTION]... SRC [USER@]HOST:DEST
# 例:rsync -avz a root@192.168.100.20:/tmp/b
3、从远程拉取(远程 → 本地)
rsync [OPTION]... [USER@]HOST:SRC DEST
# 例:rsync -avz root@192.168.100.20:/tmp/file1 /tmp/

六、rsync + inotify 实现实时同步

1、环境说明
服务器类型IP地址角色系统
源服务器192.168.100.20rsync + inotifyCentOS 7
目标服务器192.168.100.30rsync 服务端CentOS 7
2、配置步骤

前提:

关闭防火墙和seLinux

systemctl stop firewalld.service
systemctl disable firewalld.servicesetenforce 0
vim /etc/selinux/configSELINUX=disabled

到阿里源复制并下载CentOS 7 的镜像

通过自动安装 epel-release 软件包,启用 EPEL 软件仓库的命令、

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
  1. 配置时钟同步,将源服务器当作时钟服务器

    在源服务器

    vim /etc/chrony.conflocal stratum 10systemctl restart chronyd
    systemctl enable chronyd
    hwclock -w
    

    在这里插入图片描述

    在目标服务器

    vim /etc/chrony.confserver 192.168.100.20 iburstsystemctl restart chronyd
    systemctl enable chronyd
    hwclock -w
    chronyc sources
    

    在这里插入图片描述

    在这里插入图片描述

  2. 在目标服务器上配置rsync服务

    安装rsync服务端软件

    yum -y install rsync
    rpm -q rsync
    

    设置rsyncd.conf配置文件

    vim /etc/rsyncd.confEOFlog file = /var/log/rsyncd.log# 指定 rsync 守护进程的日志文件路径pidfile = /var/run/rsyncd.pid# 指定存储 rsync 守护进程 PID (进程ID) 的文件路径lock file = /var/run/rsync.lock# 指定锁文件路径,用于防止多个 rsync 守护进程实例同时运行,确保数据一致性secrets file = /etc/rsync.pass# 指定包含用户名和密码的认证文件路径[etc_from_client]# 定义一个模块(或称为共享),连接时需要指定此模块名path = /tmp/# 此模块对应的目标服务器端实际目录路径comment = sync etc from client# 模块的注释描述uid = root# 指定用户IDgid = root# 指定组IDport = 873# 指定端口号,873 是 rsync 的默认端口ignore errors# 指示 rsync 在传输过程中忽略 I/O 错误use chroot = no# rsync 在传输前是否会将根目录切换到 'path' 指定的目录,增强安全性read only = no# 是否为只读list = no# 当客户端请求列出可用模块时,是否显示此模块max connections = 200# 设置允许同时连接到此模块的最大客户端数量timeout = 600# 设置空闲连接超时时间,超过这个时间没有数据传输,连接将被断开auth users = admin# 指定允许连接到此模块的用户名hosts allow = 192.168.100.20# 设置允许连接的白名单hosts deny = 192.168.1.1# 设置拒绝连接的黑名单EOF
    

    在这里插入图片描述

    创建用户认证文件

    vim /etc/rsync.passadmin:wiltjercat /etc/rsync.pass
    

    在这里插入图片描述

    设置文件权限

    chmod 600 /etc/rsync*
    ll /etc/rsync*
    

    在这里插入图片描述

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

    rsync --daemon
    # 在本地或通过网络在不同主机之间同步文件和目录,让 rsync 以守护进程(daemon)模式运行
    vim /etc/rc.d/rc.local
    # 这是一个传统的系统启动脚本文件rsync --daemon --config=/etc/rsyncd.conf# 以守护进程模式启动 rsync ,配置文件路径为 /etc/rsyncd.conf(默认路径)netstat -tulnp | grep 873
    

    在这里插入图片描述

  3. 在源服务器上配置rsync服务

    安装rsync服务端软件,只需要安装,不要启动,不需要配置

    yum -y install rsync
    rpm -q rsync
    

    创建认证密码文件

    echo 'wiltjer' > /etc/rsync.pass
    cat /etc/rsync.pass
    

    在这里插入图片描述

    设置文件权限,只设置文件所有者具有读取、写入权限即可

    chmod 600 /etc/rsync.pass
    ll -d /etc/rsync.pass
    

    在这里插入图片描述

    在源服务器上创建测试目录,然后在源服务器运行以下命令

    mkdir -pv /root/etc/test 
    rsync -avH --port 873 \
    # 端口号为 873
    --progress \
    # 显示同步进度
    --delete \
    # 删除目标服务器上那些在源服务器不再存在的文件
    /root/etc admin@192.168.100.30::etc_from_client \
    # 本地源目录的路径 指定远程目标
    --password-file=/etc/rsync.pass
    # 包含 rsync 认证密码的文件路径
    

    在目标服务器上查看,在/tmp目录下有/etc/test目录,说明数据同步成功

    在这里插入图片描述

  4. 安装inotify-tools,进行实时同步

    查看服务器内核是否支持inotify

    有这三个max开头的文件则表示服务器内核支持inotify

    ll /proc/sys/fs/inotify/
    

    在这里插入图片描述

    安装inotify-tools

    yum -y install make gcc gcc-c++
    yum -y install inotify-tools
    

    写同步脚本

    让脚本自动去检测我们制定的目录下文件发生的变化

    然后再执行rsync的命令把它同步到我们的服务器端去

    mkdir /jiaoben
    touch /jiaoben/inotify.sh
    chmod +x /jiaoben/inotify.sh
    vim /jiaoben/inotify.shhost=192.168.100.30# 目标服务器的ipsrc=/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>&1done
    

    在这里插入图片描述

    启动脚本

    nohup bash /jiaoben/inotify.sh &
    ps -ef | grep inotify
    

    在这里插入图片描述

  5. 测试

    在源服务器上生成一个新文件

    touch /root/etc/luoqi123
    

    去目标服务器验证

    在这里插入图片描述

    查看inotify生成的日志

    tail /tmp/rsync.log
    

    在这里插入图片描述

  6. 设置脚本开机自启

    chmod +x /etc/rc.d/rc.local
    ll /etc/rc.d/rc.local
    vim /etc/rc.d/rc.localnohup /bin/bash /chenyu/inotify.sh &tail /etc/rc.d/rc.local
    

    在这里插入图片描述

    在这里插入图片描述

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

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

相关文章

Unicode 字符串转 UTF-8 编码算法剖析

📊 Unicode 字符串转 UTF-8 编码算法剖析 ——从 C# char 到 C wchar_t 的编码转换原理 引用:UTF-8 编解码可视化分析 🔍 1. 算法功能概述 该函数将 Unicode 字符串(C# string)转换为 UTF-8 编码的字节数组&#xf…

php的安全性到底怎么样

PHP作为一种流行的服务器端脚本语言,被广泛应用于Web开发。然而,由于PHP是一种较为灵活的语言,其安全性议题一直备受争议。在这篇文章中,我将从多个方面来讨论PHP的安全性,包括常见的安全漏洞、防范措施以及最佳实践。…

mapbox高阶,结合threejs(threebox)添加建筑glb模型,添加阴影效果,设置阴影颜色和透明度

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言 1.1 ☘️mapboxgl.Map 地图对象 1.2 ☘️mapboxgl.Map style属性 1.3 ☘️threebox loadObj加载模型 二、🍀…

SSM从入门到实战:1.6 Spring数据访问与JDBC模板

👋 大家好,我是 阿问学长!专注于分享优质开源项目解析、毕业设计项目指导支持、幼小初高的教辅资料推荐等,欢迎关注交流!🚀 06-Spring数据访问与JDBC模板 📖 本文概述 本文是SSM框架系列Spri…

下一代IT服务管理:ITIL5会是什么样?

ITIL4发布到现在也就5年多时间,按照以往的更新节奏,ITIL5最早也得2027年之后。但现在IT发展的速度,跟以前完全不是一个量级。AI都快把我们的饭碗抢了(开个玩笑),ITIL要是还按部就班,估计真要被时…

最新研究进展:2023-2025年神经机器翻译突破性成果

文章目录 一、模型架构创新 1.1 混合架构的崛起 1.2 多模态翻译的突破 1.3 大语言模型与NMT的深度融合(2023-2024) 1.4 非自回归翻译(NAT)的效率革命(2024) 二、数据与训练策略优化 2.1 低资源语言翻译的飞跃 2.2 动态数据增强技术 三、效率与部署 3.1 模型压缩与加速 3.…

OpenTelemetry WebSocket 监控终极方案:打通最后一公里

概述 OpenTelemetry,以下简称 OTEL,是由 CNCF 托管的“一站式可观测性标准”,把指标、链路、日志三大信号统一为单一 SDK/API,零侵入地采集从浏览器、移动端到后端、容器、云服务的全栈遥测数据,并支持 40 后端一键导…

VS Code 出现的 Web 视图加载错误和服务工作者注册失败问题解决方案

针对 VS Code 或 Cursor (vscode系)中出现的 Web 视图加载错误和服务工作者注册失败问题,以下是永久性解决方案的完整操作指南:解决方案步骤打开命令面板 使用快捷键 CtrlShiftP(Windows/Linux)或 CmdShift…

【qml-4】qml与c++交互(类型多例)

背景: 【qml-1】qml与c交互第一次尝试(实例注入) 【qml-2】尝试一个有模式的qml弹窗 【qml-3】qml与c交互第二次尝试(类型注册) 【qml-4】qml与c交互(类型多例) 【qml-5】qml与c交互&#…

图数据库如何构筑 Web3 风控防线 聚焦批量注册与链上盗转 悦数图数据库

随着 Web3 生态的不断演进,链上风险呈现出团伙化、隐蔽化和动态化的趋势,传统的单点风控手段已难以应对复杂多变的攻击模式。尤其在批量注册薅羊毛与链上交易盗转洗钱等高频风险场景中,攻击者往往通过伪造身份、跨链操作、多层嵌套转账等方式…

恒流源电路学习

恒流源的设计原理: 如图所示你可以看到右边的的推到公式得到红点处的电压是一个和左边相关的定值,所以呢右边的电流就是电压除以那个4Ω,所以得到右边的电路的电流大体是一个定值,不管你再加什么东西都可以保持这个电流&#xff…

基于生成对抗网络的模糊图像恢复原理与技术实现

1. 引言图像模糊是数字图像处理中的常见问题,其成因包括相机抖动、物体运动、聚焦不良等。传统方法如维纳滤波、Lucy-Richardson 算法等依赖于模糊核估计和逆滤波,在复杂场景下性能有限。生成对抗网络(Generative Adversarial Networks, GAN&…

【Doris 系列】Doris IP 变更修复

FE 恢复 异常日志 查看 fe.out 会有以下报错,此时 fe 进程是无法启动的,操作前注意备份所有 fe 的元数据并停止上游读写动作! java.io.IOException: the self host 192.168.31.78 does not equal to the host in ROLE file 192.168.31.81. Yo…

安卓14系统应用收不到开机广播

安卓14系统应用收不到开机广播 - Wesley’s Blog 前段时间有测试反馈在安卓14 上面某系统应用恢复出厂设置后没有自启动,究竟是什么原因呢? 回顾 Android 从3.1开始,会将新安装并且从未被启动的应用置为“STOPPED”状态,或者被…

C# Attribute 方法扩展

场景 刚写完一个干净利落的方法,比如保存数据到数据库,逻辑清晰、结构优雅, 第二天,“嘿,保存完数据,记得给客户发个邮件哦~” 第三天,“能不能再发个消息通知其他系统?” 第四天&am…

【URP】[法线贴图]为什么主要是蓝色的?

【从UnityURP开始探索游戏渲染】专栏-直达 法线贴图呈现蓝紫色调(尤其以蓝色为主)是由其‌存储原理、切线空间坐标系设计及颜色编码规则共同决定的‌。 核心原因:法线向量的存储规则‌ ‌法线向量的物理范围‌ 法线是单位向量,…

驱动开发系列63 - NVIDIA 开源GPU驱动open-gpu-kernel-modules编译调试

目录 一:通过apt方式安装nvidia 驱动 二:通过 .run 方式安装nvidia驱动 三:编译安装nvidia开源内核驱动 四:验证和调试 五:卸载驱动 1. 以apt方式安装nvidia 驱动的卸载方法 2. 以.run方式安装nvidia驱动的卸载方法 六:安装CUDA环境 一:通过apt方式安装nvidia 驱动…

对KingbaseES架构的解析:从读写分离到异地灾备的技术实现与保障机制

声明:文章为本人真实测评博客,非广告,并没有推广该平台 ,为用户体验文章 本人旨在分享最真实的用户体验,为关注此类产品的朋友们提供一个客观的参考。 文章目录一、架构全景:四级高可用构建数字基础1.1 物…

Visual Studio中的常用调试功能(上)

1、利用断点进行调试添加断点的方式有以下几种1.键盘快捷键F92.通过菜单【Debug(调试)】-》【Toggle BreakPoint(切换断点)】3.点击代码行左边的空白处(推荐)设置断点后,按F5运行程序&#xff0…

Linux -- 线程同步

1.1条件变量 (1)当⼀个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。 (2)例如⼀个线程访问队列时,发现队列为空,它只能等待,只到其它线程将⼀个节点添加到队列 中。这种情况就需要⽤到…