Linux基础26 rsync服务, 三种传输方式

发布时间 2023-06-26 18:08:45作者: 战斗小人

Rsync服务

一、备份

1.什么是备份?
备份就是把重要的数据或文件再次复制一份保存起来(给源文件增加一个副本)
2.为什么要备份?
数据很重要!!!
出现故障之后,需要恢复数据(软件服务出现问题几率很小,80%都是人为故障)
3.能不能不做备份
对于不重要的数据,可以不做备份
对于不必要的数据可以选择定时清理
4.备份常用工具
本地复制   cp
远程传输   scp   rsync

二、rsync服务概念

1.rsync简介
rsync英文成为remote synchronization,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、
远程备份的功能,这个功能类似ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync
还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这有类似cp命令。但是同样也优于cp命令,cp每次都是全量靠别,而rsync
可以增量拷贝。
在同步数据的时候,默认情况下,rsync通过其独特的"quick check"算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据
权限、属主等属性的变化同步,但是需要指定响应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据

rsync简称远程同步,可以实现不同主机之间的同步,同时支持增量和全量的备份
不同主机:windows --> linux    linux --> linux   mac  --> linux     mac --> windows
rsync监听的端口:873
rsync运行模式:C/S模式    client/server

2.rsync特性
支持拷贝特殊文件,如连接文件、设备等
可以排除指定文件或目录同步的功能,相当于打包命令tar的排除功能
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 -p
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)
可以通过socket(进程方式)传输文件和数据(服务端和客户端)******
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像

3.生产场景备份方案
1.借助cron+rsync把所有客户服务器数据同步到备份服务器
2.针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案
3.通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后在存储服务器上通过脚本监查并报警管理员备份结果
4.定期将IDC机房的数据,备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失
5.实时同步,解决存储服务器等的单点问题

4.rsync如何实现备份(备份方式)
1)全备:将数据完全的备份下来
2)增备:全备之后,把发生变化数据再备份一次

三、rsync应用场景

1.rsync的传输方式:pull拉  push推
推:
客户端将需要的数据上传到服务端
拉:
客户端将需要的数据下载下来

2.传输存在的问题
推:
如果推送的客户端机器过多,容易造成推送数据缓慢
拉:
如果客户端过多,下载数据会对服务端造成压力过大

3.rsync多server端
例:现在有20台机器,怎么有效快速的缓解推送和拉取的速度和压力问题


4.异地备份场景

 

四、Rsync传输模式*

传输模式:
本地方式
远程方式
守护方式

 

1.本地方式(类似cp,不支持推送和拉取,只是单纯复制)

# 本地传输语法
    命令    参数、选项    源文件    目标文件
Local:    rsync    [OPTION...]    SRC...    [DEST]
# 语法实例
[root@web01 ~]# rsync -avz 1.txt /mnt/
# 语法拆分
rsync    # 备份命令
-avz    # 参数、选项
./1.txt    # 源文件
/mnt/    # 目标位置

类似于cp,但是cp是全量复制,每次都显示覆盖,rsync是增量,只要文件没有变化就不会再传输,如果有任意改变就传输

2.远程传输方式(类似scp)

# pull拉取数据命令语法
Pull:    rsync    [OPTION...]    [USER@]HOST:SRC...    [DEST]
# pull拉取数据命令语法实例
web02到web01拉取文件
rsync -avz root@172.16.1.7:/root/1.txt ./    # 从172.16.1.7上拉取1.txt到当前目录下
# pull拉取数据命令语法拆分
rsync    # 命令
-avz    # 参数
root    # 远端服务器用户
@    # 分隔符
172.16.1.7:    # 远端服务器主机IP
/root/1.txt    # 源地址文件
./        # 目标地址

注意:
[root@web02 ~]# rsync -avz root@172.16.1.7:/var/log/ ./    # 拉取远程目录下的文件
[root@web02 ~]# rsync -avz root@172.16.1.7:/var/log ./    # 拉取远程目录下的文件及目录

# push推送数据命令语法
Push: rsync    [OPTION...]    SRC...    [USER@]HOST:DEST
# push推送数据命令语法示例
web02推送文件至web01
[root@web02 ~]# rsync -avz ./log/ root@172.16.1.7:/mnt/    # 推送目录下的文件到远端位置
[root@web02 ~]# rsync -avz ./log root@172.16.1.7:/mnt/    # 推送目录及目录下的文件到远端
# push推送数据命令语法拆分
rsync    # 命令
-avz    # 参数
./log    # 本地文件或目录
root    # 远端服务器用户
172.16.1.7:    # 远端主机ip
/mnt/    # 远端服务器位置

3.守护进程传输模式

1)为什么要用守护进程模式
1.rsync传输时,使用系统用户和系统密码(极其不安全)
2.使用普通用户的时候,会出现权限不足的情况
2)守护进程传输模式语法
# pull拉取数据命令
Pull:    rsync    [OPTION...]    [USER@]HOST::SRC...    [DEST]    # USER可以不加,SRC模块名(如果是一个:SRC就是目录,USER就是真实用户),DEST目标地址
# pull拉取数据命令示例
# 客户端web01拉取backup服务器的数据
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup/ ./    # backup/相当于在模块的路径结尾加上/
rsync    # 命令
-avz    # 参数
rsync_backup    # 虚拟用户
@    # 分隔符
172.16.1.41    # 远端主机
::backup    # 模块名
./    # 当前位置

注意:
拉取服务器模块名对应的目录下的文件,拉取的文件可以使任意属主属组

# push推送数据命令语法
Push:    rsync    [OPTION...]    SRC...    [USER@]HOST::DEST
# 客户端web01推送数据
[root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup
rsync    # 命令
-avz    # 参数
backup/    # 本地文件
rsync_backup    # 虚拟用户
@    # 分隔符
172.16.1.41    # 远端主机
::backup    # 模块名

注意:
推送时,远端模块对应的目录权限一定是rsyncd服务配置的用户

4.守护进程模式实践

1)环境准备
主机角色        外网ip        内网ip        主机名
Rsync服务端    10.0.0.41        172.16.1.41    backup
Rsync客户端    10.0.0.7        172.16.1.7    web01
2)安装rsync(客户端和服务端都要操作)
yum install -y rsync

以下都在backup服务器上操作
3)配置rsync(服务端)*
rpm -qc rsync    # 查看配置文件路径
# 修改配置文件
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
############################
[backup]
comment = welcome to oldboyedu backup!
path = /backup


# 配置文件注释
# 运行进程的用户
uid = rsync
# 运行进程的用户组
gid = rsync
# 服务的监听端口
port = 873
# 无需让rsync以root身份运行,保证文件属性的安全机制
fake super = yes
# 操作那个目录就不允许跳出该目录
use chroot = no
# 最大连接数
max connections = 200
# 超时时间(单位秒)
timeout = 600
# 忽略错误信息
ignore errors
# 只读,配置成false,文件可读写(针对配置的path)
read only = false
# 查看模块信息
list = false
# 定义虚拟用户(rsync传输时使用的用户)(不是真实存在,不需要创建)
auth users = rsync_backup
# 定义虚拟用户的密码文件
secrets file = /etc/rsync.passwd
# 日志文件
log file = /var/log/rsyncd.log
############################
# 定义模块的名字
[backup]
# 注释,备注(没什么用,可以删)
comment = welcome to oldboyedu backup!
# 定义真实文件目录
path = /backup

4)创建系统用户
# 根据配置文件中运行进程的用户创建
useradd rsync -s /sbin/nologin -M    # 不需要登录,不需要家目录(可以直接useradd rsync, 但这样更好)

5)创建虚拟用户的密码文件并授权
echo "rsync_backup:123456" > /etc/rsync.passwd        # 用户名为设定的虚拟用户,密码为123456
# 建议echo写入,vim写入可能多写空格,也被识别

chmod 600 /etc/rsync.passwd        # 只要和密码相关设置为600

6)创建文件目录
mkdir /backup
chown -R rsync.rsync /backup/    # 文件目录授权(如不改,可以拉,但不能推,因为rsync无法对root权限文件夹操作)

7)启动服务
systemctl start rsyncd
# 查看服务有没有起来(看873端口)
netstat -lntp
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      15057/rsync

服务端设置完成!

8)客户端验证
方式一:输入密码的方式
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./
[root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup

方式二:指定密码文件的方式
客户端添加密码文件
echo "123456" > /etc/rsync.passwd    # 密码文件的名字随便定
chmod 600 /etc/rsync.passwd

rsync -avz rsync_backup@172.16.1.41::backup ./ --password-file=/etc/rsync.passwd
rsync -avz backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd

方式三:配置环境变量的方式
客户端添加
export RSYNC_PASSWORD=123456    (这样设置是临时的,服务器重启就没了)
rsync -avz rsync_backup@172.16.1.41::backup ./
rsync -avz backup/ rsync_backup@172.16.1.41::backup