一 Rsync 简介
1,rsync 是什么
rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
Rsync 是 Linux 系统下的数据镜像备份工具,使用快速增量备份工具 Remote Sync 可以远程同步, 可以在不同主机之间进行同步,可实现全量备份与增量备份,保持链接和权限,且采用优化的同步算法, 传输前执行压缩,因此非常适合用于架构集中式备份或异地备份等应用。同时Rsync支持本地复制,或者与其他 SSH、rsync 主机同步
2,rsync 中的发起端 同步源
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
3,同步方式
(1)完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地。
(2)差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)。
(3)增量备份:备份上次备份以后有变化的数据(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性
4,备份的方式
1、发起端:负责rsync 同步操作的客户机叫做发起端,通知服务器我要备份你的数据
2、备份源:负责响应来自客户机rsync 同步操作的服务器叫做备份源,需要备份的服务器
3、服务端:运行rsyncd服务,一般来说,需要备份的服务器
4、客户端:存放备份数据
5,常用Rsync命令
基本格式:rsync [选项] 原始位置 目标位置
常用选项:
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
6, 配置源的两种表达方法
格式一:
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.10.22::wwwroot /opt/
格式二:
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.10.22/wwwroot /opt/
7,rsync做本地复制时与cp 对比
cp: 将 我们源文件完整复制 到 指定路径下 “全备"
rsync 本地复制:
①首先就按那个源文件和目标位置的文件对比,找出差异部分
②根据目的位置的文件与源文件差异的部分,进行一致性的同步
即:
增量复制与全量复制
rsync
:在本地复制时,rsync
仍然保留了其核心特性——增量复制。它通过比较源文件和目标文件的内容,仅复制差异部分,这对于复制大型文件或频繁更新的目录非常高效,尤其是在多次重复复制同一源到同一目标时,只需传输变动部分,大大节省时间和带宽。cp
:相比之下,cp
执行的是全量复制。每次复制时,不论目标文件是否存在或是否与源文件有差异,cp
都会完整地重新复制整个文件内容。对于初次复制或源文件完全改变的情况,cp
和rsync
效果相当。但在后续的重复复制中,如果只有少量数据变动,cp
的效率较低,因为它会无差别地复制整个文件。
二,下行同步与 上行同步
rsync 上行同步(Upstream Sync)和 rsync 下行同步(Downstream Sync)是使用 rsync
工具进行数据同步时的两种不同方向的同步策略,它们分别描述了数据流动的方向:
1,上行同步
上行同步是指从本地(发起端)向远程(同步源)服务器推送数据的过程。在这种模式下:
- 本地机器作为数据的源头,通常包含需要更新或备份到远程服务器的文件和目录。
- 远程服务器作为数据的接收端,等待接收并整合来自本地机器的更改。
上行同步常见于以下场景
- 备份本地数据到云端:用户将个人计算机或服务器上的重要数据同步到云存储服务或远程备份服务器,确保数据的安全性和可用性。
- 代码版本控制提交:开发者将本地开发环境中的代码更改推送到中央代码仓库(如Git服务器),实现团队协作和版本控制。
- 日志或监控数据上传:设备或系统将生成的日志文件、监控数据等实时或定时上传到中心分析服务器,便于集中管理和分析。
实时上行同步可以通过结合 rsync
和 inotify
等工具实现。inotify
能够监控本地文件系统的事件(如文件创建、修改、删除),一旦检测到变化,立即触发 rsync
命令执行同步操作,确保远程服务器几乎实时地获得本地的最新数据。
2,下行同步
下行同步则是从远程(同步源)服务器拉取数据到本地(发起端)的过程。在这个过程中:
- 远程服务器作为数据的源头,存储着需要同步到本地机器的文件和目录。
- 本地机器作为数据的接收端,通过
rsync
命令请求并接收远程服务器上的数据更新。
下行同步常用于:
- 软件分发与更新:本地机器从中央软件仓库下载最新的软件包、更新文件或配置信息。
- 数据恢复与回滚:从备份服务器下载最近的备份数据到本地,用于恢复丢失的数据或回滚到先前的状态。
- 内容分发网络(CDN)刷新:边缘节点从源站下载更新的内容,确保 CDN 提供的服务始终与源站内容一致。
3,总结
rsync 上行同步和rsync 下行同步的主要区别在于数据流动的方向:
- 上行同步是从本地到远程,用于备份、提交更新或上传数据到中央服务器。
- 下行同步是从远程到本地,用于下载、恢复数据或更新本地内容至最新状态。
在实际使用中,根据业务需求和数据流向选择合适的同步方向,并可以结合定时任务、事件驱动机制(如 inotify
)等方式实现自动化、实时的同步过程。
4,架构图
5,如何记忆
记忆“rsync 上行同步”与“rsync 下行同步”的概念,可以借助以下几种方法来帮助您加深印象和理解:
类比网络流量
上行同步:类比互联网中的“上行流量”,即数据从您的计算机(本地)上传到互联网上的某个服务器(远程)。想象您正在上传一个文件到云存储服务或者提交代码到远程仓库,数据从您的电脑“向上”流向互联网上的目标位置。
下行同步:与此相反,类比互联网中的“下行流量”,即数据从互联网上的服务器(远程)下载到您的计算机(本地)。想象您正在下载一个软件更新或从备份服务器恢复数据,数据从互联网“向下”流向您的电脑。
三 实验模拟rsync 本地同步
类似cp 的用法
四 实验模拟rsync 远程同步
1,实验环境
此次搭建rsync 下行同步 99为服务端 77为客户端
即客户端同步服务端的数据
2,99服务端
2.1 改配置文件
代码如下:
vim /etc/rsyncd.conf #添加以下配置项 uid = root gid = root use chroot = yes #禁锢在源目录 address = 192.168.10.18 #监听地址 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.10.0/24 #允许访问的客户机地址 dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型 [wwwroot] #共享模块名称 path = /var/www/html #源目录的实际路径 comment = Document Root of www.kgc.com read only = yes #是否为只读 auth users = backuper #授权账户,多个账号以空格分隔 secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件 #如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。 #为备份账户创建数据文件
配置文件显示如下:
2.2 为备份账户创建数据文件
即放用户名和密码的
记得加权限 只能加600
2.3 保证所有用户对源目录/var/www/html 都有读取权限
2.4 启动 rsync 服务程序
#启动 rsync 服务,以独立监听服务的方式(守护进程)运行
查看是否启动
3, 77客户端 (发起端)
3.1 两种方式请求同步
格式一:
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.10.22::wwwroot /opt/
格式二:
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.10.22/wwwroot /opt/
方法1
方法2
3.2 做免密交互
每次客户端请求同步时都需要 输密码,很烦。这边做免密交互
第一步创建一个密码文件 并加读写权限
第二步 在请求同步的时候,指定密码从这个文件里,就可以了
3.3 请求同步中 delete 的用法
首先可以看到99 服务端中 有两个文件
77 客户端 去同步 当然也会变成两个文件
当我们把 99 服务端的1.txt 删除 正常同步时,77 客户端没变
需要加 --delete 即删除目标位置有而原始位置没有的文件
可以看到,他会把除了2.txt 之外的文件全部删了 (因为99服务端的 /var/www/html/ 里面只有2.txt)
五 rsync 常见报错
我们在使用rsync 时候 经常会出现下面的报错
@ERROR: auth failed on module wwwroot rsync error: error starting client-server protocol (code 5) at main.c(1516) [Receiver=3.0.9]
解决此问题的步骤可能包括:
- 检查认证凭据: 确认使用的用户名、密码、密钥等认证信息是否正确,是否适用于目标系统上的“wwwroot”模块。必要时,更新或重新配置凭据。
- 确认权限设置: 确保执行 rsync 操作的用户具有足够的权限访问和操作“wwwroot”模块。可能需要与系统管理员沟通,核实或调整权限设置。
- 检查防火墙和网络设置: 确保网络连接畅通,且防火墙规则没有阻止 rsync 协议的正常通信。如有必要,临时关闭防火墙或添加相应的允许规则进行测试。
- 查看 rsync 服务器配置: 如果您正在连接到一个专门的 rsync 服务器,检查其配置文件(如
/etc/rsyncd.conf
),确保“wwwroot”模块的相关配置(如auth users
、secrets file
、hosts allow
等)无误。 - 升级或降级 rsync 版本: 虽然版本 3.0.9 的问题不大可能,但如果怀疑是 rsync 版本兼容性问题,可以尝试升级或降级到其他稳定版本进行测试。
六 总结
1,请求同步语法
格式一:
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.10.22::wwwroot /opt/
格式二:
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.10.22/wwwroot /opt/
2,生产环境rsync 使用ssh 账户
例如,假设您有一个名为 user1
的 ssh
账户,要从远程主机 remote.example.com
上的 /home/user1/data
目录同步到本地的 /local-backup
目录,可以使用以下命令:
1rsync -avz user1@remote.example.com:/home/user1/data /local-backup
这里的 -avz
是 rsync
的常用选项,分别代表:
-a
:归档模式,保留文件属性(如权限、时间戳等)并递归同步目录。-v
:详细输出,显示同步过程中的详细信息。-z
:压缩传输,启用数据压缩以减少网络传输量。
在执行上述命令时,rsync
会利用 ssh
进行身份验证和数据传输。这意味着:
- 身份验证:
rsync
会使用您本地机器上与user1
对应的ssh
公钥私钥对(如果已配置无密码登录)或提示您输入user1
的密码来完成身份验证。 - 数据传输:一旦身份验证通过,
rsync
会在ssh
加密通道上进行数据同步,确保传输过程中数据的保密性。
综上所述,rsync
完全可以直接使用 ssh
账户来进行文件同步操作,只需在命令中正确指定 ssh
用户名、远程主机名和相应的路径即可。如果您已经设置了 ssh
密钥对以实现无密码登录,rsync
过程将更加便捷且无需人工干预。