1 概述
rsync英文称为 Remote synchronizetion,是一种开源、高速、可实现本地及远程,全量及增量的数据复制(拷贝)工具。这个功能类似于 ssh 自带的 scp 命令,但又优于 scp 命令的功能,scp 每次都是全量拷贝,而 rsync 可以增量拷贝。当然,rsync 还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似 cp 命令。但是同样也优于 cp 命令,cp 每次都是全量拷贝,而 rsync 可以增量拷贝。
监听端口:873
运行模式:client / server
2 特性
- 支持拷贝特殊文件,如连接文件、设备等。
- 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
- 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 --p。
- 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
- 可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
- 可以通过socket(进程方式)传输文件和数据(服务端和客户端)
- 支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
3 rsync应用场景
1 增量备份: 只推送修改、新建的文件。增量备份是针对于上一次备份(无论是哪种备份)备份上一次备份后(包含全量备份、差异备份、增量备份)所有发生变化的文件,耗时短。
2 全量备份:所有数据都进行推送备份。全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝,耗时长。
**3 差异备份:**备份自上一次完全备份之后有变化的数据。差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,也即备份后不标记为已备份文件。换言之,不清除存档属性。差异备份是指在一次全备份后到进行差异备份的这段时间内,对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全备份和最后一次差异备份进行恢复。
4 rsync传输方式
**推送:**备份(客户端将数据从本地上传至服务端)
**拉取:**下载(客户端将数据从服务端拉取至本地)
5 rsync传输模式
5.1 本地模式(类似cp,了解即可)
bash
# 例如
# /etc/ 和 /etc 区别
# /etc/ 是目录下面内容
# /etc 是目录+目录内容
rsync -a /etc/ /tmp/
rsync -a /etc /tmp/
5.2 远程模式
类似scp,又有别于scp
scp:只支持全量备份。
rsync:首次备份为全量备份,后续支持增量备份和差异备份。
5.3 守护进程方式
客户端与服务端
6 rsync实际使用
命令格式
|----------|------------------------------|---------------------|
| rsync -a | 源文件 | 目标 |
| 推送:rsync | /etc/hostname | root@10.0.0.31:/tmp |
| 拉取:rsync | root@10.0.0.31:/etc/hostname | /tmp |
|----|----------------------------------------------------------|
| 选项 | 含义 |
| -a | -r 递归复制 -l 复制软连接 -p 保持权限不变 -m 保持修改时间不变 -o 所有者不变 -g 用户组不变 |
| -v | 显示过程 |
| -z | 传输数据的时候进行压缩(公网) |
rsync常用命令
bash
# 查看用户
id rsync
# 查看用户信息
grep rsync /etc/passwd
# 查看端口信息
ss -lntup | grep rsync
# 查看日志信息
tail -f /var/log/rsyncd.log
# 查询命令
rpm -qa | grep rsync
参数 | 说明 |
---|---|
-a | 归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l |
-v | 详细模式输出, 打印速率, 文件数量等 |
-z | 传输时进行压缩以提高效率 |
-r | 递归传输目录及子目录,即目录下得所有目录都同样传输 |
-t | 保持文件时间信息(stat命令查看文件时间,a/m/ctime) |
-o | 保持文件属主信息 |
-g | 保持文件属组信息 |
-p | 保持文件权限 |
-l | 保留软连接 |
-P | 显示同步的过程及传输时的进度等信息 |
-D | 保持设备文件信息 |
-L | 保留软连接指向的目标文件 |
-e | 使用的信道协议,指定替代rsh的shell程序 |
--append | 指定文件接着上次传输中断处继续传输(断点续传) |
--append-verify | 使用参数续传(在断点续传之后,验证一下文件,如果不同,修复文件) |
--exclude=PATTERN | 指定排除不需要传输的文件 |
--exclude-from=[文件路径] | 按照文件指定内容排除 |
--bwlimit=100 | 限速传输(单位:MB) |
--delete | 让目标目录和源目录数据保持一致 |
--password-file=[密码文件路径] | 使用密码文件 |
--port | 指定端口传输 |
限速测试
步骤1:创建 500兆文件
bash
dd if=/dev/zero of=/tmp/500m bs=1M count=500
步骤2:确保服务器开启了 rsync 服务
步骤3:运行限速传输 限速每秒500kb
bash
rsync -a -P --bwlimit=500kb /tmp/500m-v2 rsync_backup@10.0.0.41::data --password-file=/etc/rsync.client
文件过滤
步骤1:创建多个文件
touch cherry-{01..10}.txt
步骤2:传输过滤
bash
rsync -av . rsync_backup@172.16.1.41::data --password-file=/etc/rsync.client --exclude=cherry-{01..09}.txt
保持源与目标数据一致(危险命令)
原本备份一般默认是增量备份,但是加上了 --delete 后,当前目录为源目录,另外需要备份的目录中假如有异于源目录的文件或者文件夹将被删除,并替换成源目录的文件。
bash
rsync -avP --delete . rsync_backup@10.0.0.31::data --password-file=/etc/rsync.client
7 守护进程模式(重点)
服务使用流程:
- 部署
- 配置
- 启动,使用
- 优化
- 故障
- 自动化(监控、日志、安全、自动部署、容器)
7.1 服务端
步骤1:安装(更新至最新版)
bash
yum install -y rsync
文件所属位置
bash
# 检查安装包内容
/etc/rsync.conf # 配置文件
/usr/bin/rsync #命令
/usr/lib/systemd/system/rsyncd.service #systemctl对应的配置文件
步骤2:配置文件
新建配置文件
bash
vim /etc/rsyncd.conf
添加所需配置信息
bash
#created by cherry 2024-8-2
###########rsyncd.conf start###########
fake super = yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
timeout = 600
ignore error
read only = false
list = false
#hosts allow = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#######################################
[data]
path = /data
步骤3:创建虚拟用户
bash
useradd -s /sbin/nologin -M rsync
步骤4:创建密码文件及授权
# 创建密码文件 命名规则(左用户名:右密码)
bash
echo 'rsync_backup:a' >/etc/rsync.password
# 授权 (只有管理员有读写权限,且必须设置为 600)
bash
chmod 600 /etc/rsync.password
步骤5:创建备份目录及授权
创建备份目录
bash
mkdir -p /data/
目录授权
bash
chown rsync.rsync /data/
步骤6:启动服务
开机自启
bash
systemctl enable rsyncd
启动服务
bash
systemctl start rsyncd
测试:测试客户端
bash
rsync -av /etc/hostname rsync_backup@10.0.0.41::data
7.2 客户端
7.2.1 传输方式
方式一:手动输入密码
bashrsync -avz /etc/hosts rsync_backup@10.0.0.41:data
方式二:设置密码文件,运行时读取(推荐)
步骤1:创建密码文件
bashecho 'a' >/etc/rsync.client
步骤2:修改密码文件权限
注意:必须设置为 600
bashchmod 600 /etc/rsync.client
步骤3:免密传输测试
bashrsync -avz /etc/hosts rsync_backup@10.0.0.41:data --password-file=/etc/rsync.client
方式三:添加环境变量
步骤1:定义环境变量
bashexport RSYNC_PASSWORD=a
步骤2:同步
bashrsync -avz /etc/hosts rsync_backup@10.0.0.41:data
8 同步
脚本同步(常用于客户端配置)
步骤1:编写脚本
步骤2:运行脚本
bash
sh /server/scripts/bak_conf.sh
定时同步
步骤1:进入 crontab 配置文件
bash
crontab -e
步骤2:设置定时任务(每天0点备份)
bash
# 2. backup sys conf
0 0 * * * sh /server/scripts/bak_conf.sh &>>/tmp/backup.log
实时同步
rsync 是不支持实时同步的,通常我们借助于 inotify 这个软件来实时监控 文件变化,一旦inotify 监控到文件变 ,则立即调用 rsync 进行同步。
9 项目/任务(用途)
项目要求:
1 定时备份nfs01,web01配置文件(etc,定时任务) /backup/ip地址/conf-时间.tar.gz 也可以说2个备份软件包。
2 定时备份nfs01,web01同步到backup服务器上 /backup/
3 定时备份服务nfs01,web01删除7天之前备份
4 在backup服务器,每天发送邮件备份结果(find或者tree)
5 检查:邮箱是否受到邮件,检查备份服务器上是否收到了备份。
bash
备份服务器
/backup/
172.16.1.31/xxx.tar.gz
172.16.1.7/xxx.tar.gz
提出问题
备份规划以及内容,如何备份?如何收集备份(统一存放备份)?保留多长时间?是什么系统?什么系统版本?等
备份什么?
- (用户)数据、数据库、存储
- 配置文件
- 脚本、代码...
- 日志收集
- ......
如何备份?
打包压缩 + 定时任务
如何收集?
rsync服务收集备份
**至此,**rsync 的大致需要掌握的已经完成!!!
如果觉得内容不错,请留下一个小小的点赞/V▲V\