【综合架构】备份服务 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\

相关推荐
Lary_Rock1 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮4 小时前
Linux 使用中的问题
linux·运维
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
wclass-zhengge6 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱7 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
小林熬夜学编程8 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
力姆泰克8 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节