文章目录
- 理论知识
- 1、什么是Rsync
- 2、备份方式
- Rsync应用场景
- 在大量服务器进行备份的场景
- Rsync数据传输方式
- Rsync同步实验操作
- 实验环境
- 实验需要
- 实验步骤
- 服务端操作
- 1、安装软件包
- 2、编辑配置文件
- 3、创建虚拟用户密码文件(用于客户端连接时使用的用户)
- 4、创建目录
- 5、创建程序用户并授权
- 6、启动rsyncd
- 客户端操作
- 1、配置客户端的密码并且设置权限
- 验证
理论知识
1、什么是Rsync
rsyncs是开源的备份工具,可以在不同的主机之间进行同步,可以实现全量备份和增量的备份,合适架构集中备份或者进行异地备份
官方:https://rsync.samba.org/
监听端口: 873/tcp
运行模式是c/s架构
2、备份方式
有两种方式进行备份,完全备份和增量的备份
**案例:**如果客户端上有file1、file2、file3这3个文件,服务端目前只有file1文件,现在需要把客户端的数据备份到服务器
完全备份
完全备份,将客户端所有的数据内容 file1 file2 file3 全部备份至服务端 (效率低下, 占用空间),因为file1是已经有过的数据,但是还是需要同步备份
增量备份
增量备份,将客户端的 file2 file3 增量备份至服务端 (提高备份效率,节省空间, 适合异地备份 )
Rsync应用场景
数据同步的两种方式 推送和拉取
Rsync 服务端是一个 “被动监听的服务”,它不会主动发起任何数据同步操作,所有的推 / 拉行为都必须由客户端主动触发
推:所有的主机自己推送本地的数据到Rsync备份服务器上,缺点是数据同步缓慢。比较合适数据少的备份场景
拉:客户端进行拉取服务端的数据进行备份,缺点是备份服务器的开销比较大
在大量服务器进行备份的场景
需要多个server进行备份,多个客户端的情况下,可以进行规划,客户端侧主机推同步数据到备份服务器1,2,3,最终由一个备份服务器定时的主动去拉取数据下来完成同步
异地怎么进行备份??
步骤①(推模式):左侧黄色 WebServer 作为Rsync 客户端,主动将数据 ** 推(上传)** 到「本地备份」(此时「本地备份」是 Rsync 服务端,被动接收数据);
中间同步:「本地备份」再通过 Rsync 同步到「云端备份」(通常是「本地备份」作为客户端,将数据推到「云端备份」服务端);
步骤③(拉模式):右侧红色 WebServer 作为Rsync 客户端,主动从「云端备份」(Rsync 服务端)** 拉(下载)** 数据,完成异地数据获取。
Rsync数据传输方式
主要有三种方式:
1、本地方式:同一台机器里面的文件 目录同步 不依赖网络,高效拷贝比cp多了增量同步、校验等功能的
2、远程方式:基于shh,跨机器传输,不需要单独启动Rsync,使用ssh服务即可,比较合适小规模的跨机器同步,使用shh系统用户、必须使用真实路径不安全,使用普通用户要考虑权限问题
3、守护进程:跨机器同步,依赖单独启动的Rsync服务端服务,比较合适于多客户端访问,高频 自动化同步
rsync参数的选项 -a#归档模式传输, 等于-tropgDl-v#详细模式输出, 打印速率, 文件数量等-z#传输时进行压缩以提高效率-r#递归传输目录及子目录,即目录下得所有目录都同样传输。-t#保持文件时间信息-o#保持文件属主信息-p#保持文件权限-g#保持文件属组信息-l#保留软连接-P#显示同步的过程及传输时的进度等信息-D#保持设备文件信息-L#保留软连接指向的目标文件-e#使用的信道协议,指定替代rsh的shell程序--exclude=PATTERN#指定排除不需要传输的文件模式--exclude-from=file#文件名所在的目录文件--bwlimit=100#限速传输 KBytes每秒--partial#断点续传--delete#让目标目录和源目录数据保持一致1、本地方式 语法:rsync 选项 src 备份文件路径 dest 备份到哪里 例如:rsync -avz /etc/passwd /tmp2、远程方式: pull 语法:rsync 选项[user@]HOST:src destrsync-avz root@10.0.0.41:/etc ./ push 语法rsync选项 推src[user@]HOST:destrsync-azv /backup root@10.0.0.41:/tmp3、守护进程:非常重要的功能,不使用系统用户安全 pull 拉取 语法:rsync 选项[user@]HOST:src destrsync-avz rsync_user@10.0.0.41::src dest --password-file=/etc/rsync.password[OPTION...]---选项[USER@]---远程主机用户(虚拟用户)HOST:: ---远程主机地址 SRC... ---远程主机模块(不是目录)[DEST]---将远程主机数据备份至本地什么位置 push 推送rsync选项 src[user@]HOST:destRsync备份、Scp拷贝、nfs网络文件系统之间的区别
| 对比维度 | Scp(跨机拷贝工具) | Rsync(增量同步 / 备份工具) | NFS(网络文件共享服务) |
|---|---|---|---|
| 核心用途 | 临时、一次性的跨机文件 / 目录拷贝 | 增量同步、定时备份、多轮次数据一致化 | 多机器实时共享同一远程目录(像本地目录一样操作) |
| 传输 / 访问逻辑 | 全量拷贝:不管目标文件是否存在,都传完整文件 | 增量同步:仅传 “源和目标不一致的部分”(新增 / 修改内容) | 实时挂载:客户端直接读写远程文件,修改立即同步到服务端 |
| 操作方式 | 执行<font style="color:rgb(0, 0, 0);">scp</font>命令触发单次传输,完成后断开连接 | 执行<font style="color:rgb(0, 0, 0);">rsync</font>命令(手动 / 定时)触发同步,完成后断开 | 客户端挂载远程目录,持续保持连接,实时访问 |
| 功能特性 | 功能单一:仅支持基础拷贝,无增量 / 压缩 / 校验 | 功能丰富:支持增量、压缩(<font style="color:rgb(0, 0, 0);">-z</font>)、文件校验、删除冗余文件( <font style="color:rgb(0, 0, 0);">--delete</font>) | 功能聚焦:实现目录实时共享,依赖文件系统权限控制 |
| 资源占用 | 传输时占带宽(全量传输,大文件耗时久) | 仅传增量,带宽 / 时间消耗远低于 Scp | 持续占用网络连接(挂载后),服务端需承载多客户端实时访问压力 |
| 数据一致性 | 仅保证 “这次拷贝完成”,无后续一致性 | 同步完成后数据一致;同步间隔内可能不一致 | 实时一致:多客户端访问的是同一远程目录,修改立即生效 |
Rsync同步实验操作
实验环境
| 主机名 | IP地址 | 功能 |
|---|---|---|
| backup | 10.0.0.41 | 部署rsync独立服务 |
| m01 | 10.0.0.61 | 客户端,需要将文件备份到backup上 |
实验需要
1.部署rsync独立服务
2.要求rsync的认证用户为rsync_user,密码1234563.同步数据目录为backup
4.实现客户端主动上传数据同步、拉取同步、增量数据同步
实验步骤
服务端操作
1、安装软件包
rsync包,已经安装[root@backup~]# yum -y install rsync2、编辑配置文件
[root@backup~]# cat /etc/rsyncd.confuid=rsync gid=rsync port=873fake super=yesusechroot=no max connections=200timeout=600ignore errors read only=falselist=falseauth users=rsync_user secrets file=/etc/rsync.passwd log file=/var/log/rsyncd.log[backup]#这里就是定义的共享模块,提供客户端访问的,大小写敏感comment=welcome to softeem backup!path=/backup uid=rsync---运行进程的用户 gid=rsync---运行进程的用户组 port=873---监听端口 fake super=yes---无需让rsync以root身份运行,允许存储文件的完整属性usechroot=no---关闭假根功能 max connections=200---最大连接数 timeout=600---超时时间 ignore errors---忽略错误信息 read only=false---对备份数据可读写list=false---不允许查看模块信息 auth users=rsync_user---定义虚拟用户,作为连接认证用户 secrets file=/etc/rsync.passwd---定义rsync服务用户连接认证密码文件路径3、创建虚拟用户密码文件(用于客户端连接时使用的用户)
[root@backup~]# echo "rsync_user:123456" > /etc/rsync.passwd注释: 要修改该密码文件的权限为600或400,否则会报认证失败的错[root@backup~]# chmod 600 /etc/rsync.password[root@backup~]# ls -l /etc/rsync.password-rw-------1root root18Dec1611:17/etc/rsync.password4、创建目录
[root@backup~]# mkdir -p /backup5、创建程序用户并授权
#创建运行rsync的用户,配置文件指定的uid[root@backup~]# useradd -r -s /sbin/nologin rsync#进行授权[root@backup~]# chown -R rsync.rsync /backup/6、启动rsyncd
[root@backup~]# systemctl restart rsyncd[root@backup~]# systemctl enable rsyncdCreated symlink from/etc/systemd/system/multi-user.target.wants/rsyncd.service to/usr/lib/systemd/system/rsyncd.service.客户端操作
1、配置客户端的密码并且设置权限
#安装rsync服务[root@m01 ~]# yum install -y rsync[root@m01 ~]# echo "123456" > /etc/rsync.password[root@m01 ~]# chmod 600 /etc/rsync.password验证
验证一:客户端推送数据到服务端
[root@m01 ~]# rsync -azv /etc/passwd rsync_user@10.0.0.41::backup/ --password-file=/etc/rsync.passwordsending incrementalfilelistpasswdsent995bytes received43bytes2,076.00 bytes/sec total size is2,304speedup is2.22检查服务器[root@backup backup]# lspasswd[root@backup backup]#验证二:客户端拉取rsync的数据到本地
#在服务器上的blackup目录创建文件[root@backup backup]# touch test[root@backup backup]# lspasswdtest#在客户端进行拉取[root@m01 ~]# rsync -azv rsync_user@10.0.0.41::backup /tmp/ --password-file=/etc/rsync.passwordreceiving incrementalfilelist ./passwdtestsent69bytes received1,097bytes2,332.00 bytes/sec total size is2,304speedup is1.98[root@m01 tmp]# lspasswdtesttest.txt 设置使用的是模块进行定义目录,所以命令的地方是使用::模块验证三:数据无差异同步
拉取的方式#远程没有的文件本地有也会被删除,导致客户数据丢失#先在/data下创建几个文件[root@m01 data]# touch txt{1..3}[root@m01 data]# lspasswdtesttxt1 txt2 txt3[root@m01 data]##使用差异备份,把远程和本地统一[root@m01 data]# rsync -avz --delete rsync_user@10.0.0.41::backup /data --password-file=/etc/rsync.passwordreceiving incrementalfilelist deleting txt3 deleting txt2 deleting txt1 ./ sent27bytes received115bytes284.00bytes/sec total size is2,304speedup is16.23[root@m01 data]# lspasswdtest[root@m01 data]#--delete参数实现 “无差异同步” 的作用,以及对应的风险,让目标端和源端数据完全一致,但目标端多余的文件会被删除,因此存在数据丢失风险” 推送的方式