Linux - Rsync
一、 Linux -Rsync
Rsync 介绍
Rsync
是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构中式备份或异地备份等应用。
- Rsync 官方地址:https://Rsync.samba.org
- Rsync 监听端口:873
- Rsync 运行模式:C / S
备份方式:
假设客户端上有 file1
file2
file3
文件,服务端上有 file1
文件,现要将客户端的数据备份至服务器。
全量备份:
会将 客户端所有的数据
file1
file2
file3
全部备份至服务端(效率慢,重复备份浪费时间,占用空间)增量备份:
将客户端的
file2
file3
增量备份至服务端(不会重复备份文件,提高了备份效率,节省空间时间,适合异地备份)
Rsync 应用场景
Rsync
的数据同步有以下两种模式:
push:
- 所有主机推送本地数据至
Rsync
备份服务器,会导致数据同步缓慢(适合少量数据备份) - webserver (推送) —> Rsync备份服务器(接收)
- 所有主机推送本地数据至
pull:
- 在Rsync 备份服务端主动拉取所有主机上的数据,会导致备份服务器开销大
- webserver —> Rsync 备份服务器(主动拉取,接受)
大量服务器备份场景
- 多 Server 备份
异地备份场景
- 本地
Push
至本地备份服务器 —> 本地备份服务器 同步至 云端备份
- 本地
Rsync 传输模式
Rsync 使用三种主要的数据传输方式
本地方式
远程方式
守护进程
本地传输方式:
单个主机本地之间的数据传输( 类似 Linux 中的 cp
命令 )
1 | 本地拷贝数据命令 |
远程通道传输方式:
通过 SSH
通道传输数据,类似 scp
命令
1 | pull 拉取数据命令 |
1 | push 推送数据命令 |
Rsync
借助 SSH
协议同步数据存在的缺陷
- 使用系统用户(有安全隐患)
- 使用普通用户(导致权限不足情况)
- 守护进程传输方式:
rsync
自身非常重要的功能(不使用系统用户,更加安全)
1 | pull 拉取数据命令 |
1 | push 推送数据命令 |
Rsync 服务实践
主机角色 | 外网 IP(NAT) | 内网 IP (LAN) | 主机名称 |
---|---|---|---|
Rsync 服务端 | 10.0.0.1 | 192.168.1.1 | datarc-backup |
Rsync 客户端 | 10.0.0.2 | 192.168.1.2 | datarc-nfs |
Rsync 服务端
1 | 1. 安装 rsync |
客户端
1 | 1. rsync 客户端 仅需配置虚拟用户的密码,并授权为 600 安全权限 |
实践
1 | 1. 客户端推送 backup 目录下的所有内容 至 Rsync 服务端 |
1 | 2. 客户端 拉取 rsync 服务端 backup 模块数据至本地客户端的 /backup 目录 |
1 | 3. rsync 实现数据无差异同步 |
1 | 4. rsync 的 Limit 限速 |
Rsync 备份案例
已知 3 台服务器主机名分别为 web01
backup
nfs
主机信息见下表:
角色 | 外网IP (NAT) | 内网IP (LAN) | 主机名 |
---|---|---|---|
WEB | eth0:10.0.0.1 | eth1:192.168.1.1 | web01 |
NFS | eth0:10.0.0.2 | eth1:192.168.1.2 | nfs01 |
Rsync | eth0:10.0.0.3 | eth1:192.168.1.3 | backup |
客户端需求
- 客户端提前准备存放的备份的目录,目录规则如下:
/backup/nfs_192.168.1.2_2020-0101
- 客户端在本地打包备份(系统配置文件、应用配置等)拷贝至
/backup/nfs_192.168.1.2_2020-0101
- 客户端最后将备份的数据进行推送至备份服务器
- 客户端每天凌晨 1 点定时执行该脚本
- 客户端服务器本地保留最近 7 天的数据,避免浪费磁盘空间
服务端需求
- 服务端部署
rsync
,用于接收客户端推送过来的备份数据 - 服务端需要每天校验客户端推送过来的数据是否完整
- 服务端需要将每天校验的结果通知给管理员
- 服务端仅保留 6 个月的备份数据,其余的数据全部删除
注意: 所有服务器的备份目录必须为 /backup
1 | 建议备份的数据内容如下: |
客户端实现
1 | 1. 客户端备份实现思路,脚本每天凌晨 01 点定时执行一次 |
服务端实现
1 | 1. 服务端校验客户端推送的数据的完整性 |