【综合架构】备份服务 rsync

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 守护进程模式(重点)

服务使用流程:

  1. 部署
  2. 配置
  3. 启动,使用
  4. 优化
  5. 故障
  6. 自动化(监控、日志、安全、自动部署、容器

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 传输方式

方式一:手动输入密码

bash 复制代码
rsync -avz /etc/hosts rsync_backup@10.0.0.41:data

方式二:设置密码文件,运行时读取(推荐)

步骤1:创建密码文件

bash 复制代码
echo 'a' >/etc/rsync.client

步骤2:修改密码文件权限

注意:必须设置为 600

bash 复制代码
chmod 600 /etc/rsync.client

步骤3:免密传输测试

bash 复制代码
rsync -avz /etc/hosts rsync_backup@10.0.0.41:data --password-file=/etc/rsync.client

方式三:添加环境变量

步骤1:定义环境变量

bash 复制代码
export RSYNC_PASSWORD=a

步骤2:同步

bash 复制代码
rsync -avz /etc/hosts rsync_backup@10.0.0.41:data

8 同步

脚本同步(常用于客户端配置)

步骤1:编写脚本

【shell脚本】rsync同步文件-CSDN博客

步骤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\

相关推荐
蜜獾云5 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维7 分钟前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
Hacker_Oldv11 分钟前
WPS 认证机制
运维·服务器·wps
bitcsljl20 分钟前
Linux 命令行快捷键
linux·运维·服务器
ac.char23 分钟前
在 Ubuntu 下使用 Tauri 打包 EXE 应用
linux·运维·ubuntu
Cachel wood42 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Youkiup1 小时前
【linux 常用命令】
linux·运维·服务器
qq_297504611 小时前
【解决】Linux更新系统内核后Nvidia-smi has failed...
linux·运维·服务器
_oP_i1 小时前
.NET Core 项目配置到 Jenkins
运维·jenkins·.netcore
weixin_437398211 小时前
Linux扩展——shell编程
linux·运维·服务器·bash