Rsync服务详解

1. 备份服务器说明

1.1 作用

  1. 数据备份的服务器
  2. 进行日志统一保存

1.2 如何部署搭建

利用rsync服务

1.3 扩展

在某个目录下所有文件中 查找 特殊字符串

grep -r "xxx" /data/

-r 递归查找

2. rsync 介绍

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具

2.1 rsync 软件使用方法

2.1.1 rsync 命令

实现 1v4

  1. 本地备份数据

rsync 命令可以 顶替 cp 命令 实现本地备份数据

# 001 - cp 命令备份过程
# 备份目录
[root@sec01 ~]# ll /tmp/
total 0
# 使用 cp 命令备份,并查看结果
[root@sec01 ~]# cp /etc/hosts /tmp
[root@sec01 ~]# ll /tmp/
total 4
-rw-r--r--. 1 root root 158 Nov 11 10:52 hosts

# 002 - rsync 命令备份过程
# 备份目录
[root@sec01 ~]# ll /tmp/
total 0
# 使用 rsync 命令进行备份,并查看结果
[root@sec01 ~]# rsync /etc/hosts /tmp
[root@sec01 ~]# ll /tmp
total 4
-rw-r--r--. 1 root root 158 Nov 11 10:53 hosts
  1. 远程备份数据

rsync 命令可以 顶替 scp 命令 实现远程备份数据

# scp 命令实现远程备份数据

# 远程主机备份目录
[root@NeoKylin ~]# mkdir /backup
[root@NeoKylin ~]# ll /backup
total 0

# 本地主机进行备份
[root@sec01 ~]# scp -rp /etc/hosts 10.1.1.101:/backup
The authenticity of host '10.1.1.101 (10.1.1.101)' can't be established.
ECDSA key fingerprint is SHA256:GLYtRcs9toG4qNkP9CJWbSIVXTiRJnC9+Ce/LW+5opk.
ECDSA key fingerprint is MD5:ca:79:89:e1:a2:b9:f3:6d:cf:4a:bf:c8:9e:03:9d:c2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.1.1.101' (ECDSA) to the list of known hosts.
[email protected]'s password: 
hosts                                                                                                                                                                          100%  158    50.8KB/s   00:00  

# 远程主机查看结果
[root@NeoKylin ~]# ll /backup
total 4
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts

# scp命令 参数说明
1. -r       递归复制传输数据
2. -p       保持文件属性信息不变
# rsync 命令实现远程备份数据

# 远程主机备份目录
[root@NeoKylin ~]# ll /backup
total 4
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts

# 本地主机备份
[root@sec01 ~]# rsync -rp /etc/hosts 10.1.1.101:/backup/hosts_rsync
[email protected]'s password: 

# 远程主机查看结果
[root@NeoKylin ~]# ll /backup
total 8
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
# 扩展 - rsync命令 备份目录

# 环境部署
[root@sec01 ~]# mkdir /data
[root@sec01 ~]# touch /data/{01..03}.txt
[root@sec01 ~]# ll /data/
total 0
-rw-r--r--. 1 root root 0 Nov 11 11:10 01.txt
-rw-r--r--. 1 root root 0 Nov 11 11:10 02.txt
-rw-r--r--. 1 root root 0 Nov 11 11:10 03.txt

# 001

# 远程主机环境
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
# 开始远程备份
[root@sec01 ~]# rsync -rp /data 10.1.1.101:/backup
[email protected]'s password: 
# 查看结果
[root@NeoKylin ~]# ll /backup
total 8
drwxr-xr-x. 2 root root  48 Nov 11 11:11 data
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
[root@NeoKylin ~]# tree /backup
/backup
├── data
│   ├── 01.txt
│   ├── 02.txt
│   └── 03.txt
├── hosts
└── hosts_rsync

1 directory, 5 files

# 002

# 远程主机环境
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
# 开始远程备份
[root@sec01 ~]# rsync -rp /data/ 10.1.1.101:/backup
[email protected]'s password: 
# 查看结果
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root   0 Nov 11 11:22 01.txt
-rw-r--r--. 1 root root   0 Nov 11 11:22 02.txt
-rw-r--r--. 1 root root   0 Nov 11 11:22 03.txt
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync
[root@NeoKylin ~]# tree /backup/
/backup/
├── 01.txt
├── 02.txt
├── 03.txt
├── hosts
└── hosts_rsync

0 directories, 5 files

# 总结:以上 001 和 002 两种方式都实现了目录远程备份。区别在于,备份命令中,如果备份目录后面跟 '/' ,则会将目录下的文件全部备份到目标主机,若不跟 '/',则会将整个目录备份至目标主机。
  1. rsync 可以替代删除命令(实现无差异同步数据)
# 远程主机 目录情况
[root@NeoKylin ~]# ll /backup/
total 8
-rw-r--r--. 1 root root   0 Nov 11 11:22 01.txt
-rw-r--r--. 1 root root   0 Nov 11 11:22 02.txt
-rw-r--r--. 1 root root   0 Nov 11 11:22 03.txt
-rw-r--r--. 1 root root 158 Oct 13 21:23 hosts
-rw-r--r--. 1 root root 158 Nov 11 11:08 hosts_rsync

# 本地主机
[root@sec01 ~]# ll /tmp/
total 0
[root@sec01 ~]# rsync -rp --delete /tmp/ 10.1.1.101:/backup
[email protected]'s password: 

# 查看目标主机结果
[root@NeoKylin ~]# ll /backup/
total 0

# 注意:
rsync -rp --delete /tmp/ 10.1.1.101:/backup 
要想清空目标目录,命令中 空目录(/tmp) 后面一定要跟 '/',否则会将该目录备份到对方目录中。
# 扩展 - 面试题目
有一个存储数据信息的目录,目录中数据存储了约50GB,如何快速删除该目录
rsync -rp --delete 空目录 目标目录
  1. 替代查看文件命令 ls
[root@sec01 ~]# ls /etc/hosts
/etc/hosts
[root@sec01 ~]# rsync /etc/hosts
-rw-r--r--            158 2021/10/13 21:23:51 hosts
[root@sec01 ~]# rsync /etc/hosts000
rsync: link_stat "/etc/hosts000" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

2.1.2 rsync 语法及格式

SYNOPSIS
# 本地备份数据
       Local:  rsync [OPTION...] SRC... [DEST]
# 远程备份数据
       Access via remote shell:
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
# 守护进程方式备份数据,备份服务
       Access via rsync daemon:
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
         # 拉取:客户端恢复数据
         # 推送:客户端备份数据
  • 守护进程方式备份数据
  1. 可以进行一些配置管理
  2. 可以进行安全策略管理
  3. 可以实现自动传输备份数据

2.2 rsync 服务部署安装过程

2.2.1 扩展 - Linux 系统安装部署服务流程

  1. 下载安装软件
  2. 编写配置文件
  3. 搭建服务环境
  4. 启动服务程序(开机自启)
  5. 测试服务功能

2.2.2 rsync 守护进程部署方式(服务端)

2.2.2.1 下载安装软件
# 检查是否安装
[root@backup ~]# rpm -qa|grep rsync
rsync-3.1.2-4.el7.x86_64
[root@backup ~]# rpm -qa rsync
rsync-3.1.2-4.el7.x86_64

# 若未安装,进行安装
yum install rsync -y
2.2.2.2 编写配置文件

配置文件帮助说明

man rsyncd.conf

备份原文件

cp /etc/rsyncd.conf{,.bak}

编写配置文件

vim /etc/rsyncd.conf

# rsync_config
# created by yunxuan at 2021
# rsyncd.conf start 

# 指定管理备份目录的用户
uid = rsync
# 指定管理备份目录的用户组
gid = rsync
# 定义rsync备份服务的端口号,默认为873
port = 873
# 将rsync虚拟用户伪装成一个超级管理员用户
#fake super = yes
# 和安全相关的配置
use chroot = no
# 最大连接数,同时只有200个客户端连接至服务端
max connections = 200
# 超时时间,单位为秒
timeout = 300
# 记录进程号码信息 1. 让程序快速结束进程(kill杀死进程) 2. 判断服务是否运行
pid file = /var/run/rsyncd.pid
# 锁文件,第201个连接请求时拒绝
lock file = /var/run/rsync.lock
# rsync服务的日志文件,用于排错分析问题
log file = /var/log/rsyncd.log
# 忽略传输中的简单错误
ignore errors
# 指定备份目录可读可写
read only = false
# 列表功能,使客户端可以查看服务端的模块信息
list = false
# 允许传输备份数据的主机(白名单)
hosts allow = 172.16.1.0/24
# 禁止传输备份数据的主机(黑名单)
hosts deny = 0.0.0.0/32
# 指定认证用户
auth users = rsync_backup
# 指定认证用户密码文件(用户名称:密码信息)
secrets file = /etc/rsync.password

# 模块信息
[backup]
comment = "backup dir by yunxuan"
# 指定备份目录
path = /backup
2.2.2.3 搭建服务环境
  1. 创建 rsync 服务的虚拟用户
[root@backup ~]# id rsync
id: rsync: no such user
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) groups=1001(rsync)
  1. 创建备份服务 认证密码文件
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
[root@backup ~]# ll /etc/rsync.password
-rw-r--r-- 1 root root 20 Nov 11 17:09 /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 20 Nov 11 17:09 /etc/rsync.password
  1. 创建备份目录
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 Nov 11 17:11 /backup/
2.2.2.4 启动备份服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@backup ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2021-11-11 17:12:47 CST; 1min 37s ago
 Main PID: 8021 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─8021 /usr/bin/rsync --daemon --no-detach

Nov 11 17:12:47 backup systemd[1]: Started fast remote file copy program daemon.
[root@backup ~]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      8021/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      8021/rsync 

2.2.3 rsync 客户端部署方式

  1. 创建密码文件
[root@nfs01 ~]# echo "123456">/etc/rsync.password
[root@nfs01 ~]# cat /etc/rsync.password
123456
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ll /etc/rsync.password
-rw------- 1 root root 7 Nov 11 18:42 /etc/rsync.password
  1. 进行免交互数据传输
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list

sent 47 bytes  received 20 bytes  134.00 bytes/sec
total size is 320  speedup is 4.78

2.2.4 rsync 服务功能测试

2.2.4.1 语法格式介绍
  1. 推送方式 - 客户端向服务端备份数据
Access via rsync daemon:
     Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
           rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
           

SRC:要推送的备份数据
[USER@]:指定认证用户信息
HOST:指定远程主机的IP地址或者主机名称
::DEST:备份服务器的模块信息
2.2.4.2 测试
  1. 测试001
# 客户端数据推送
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::backup
Password: 
sending incremental file list
hosts
rsync: chgrp ".hosts.wsQmU0" (in backup) failed: Operation not permitted (1)

sent 210 bytes  received 124 bytes  133.60 bytes/sec
total size is 320  speedup is 0.96
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

# 服务端检查结果
[root@backup ~]# ll /backup/
total 4
-rw------- 1 rsync rsync 320 Nov 11 17:26 hosts
  • 报错说明
详见4.4章节
  • 错误溯源
[root@nfs01 tmp]# ll
total 0
-rw-r--r--  1 root root 0 Nov 11 18:47 t01
[root@nfs01 tmp]# id yunxuan
uid=1000(yunxuan) gid=1000(yunxuan) groups=1000(yunxuan)
[root@nfs01 tmp]# su - yunxuan
[yunxuan@nfs01 ~]$ cd /tmp/
[yunxuan@nfs01 tmp]$ chgrp yunxuan t01
chgrp: changing group of ‘t01’: Operation not permitted

2.3 rsync 命令参数详细说明

2.3.1 命令参数详解

参数 说明
-v --verbose 显示详细的传输信息
-a --archive 命令的归档参数 包含:rtopgDl
-r --recursive 递归参数
-t --times 保持文件属性信息时间信息不变(修改时间)
-o --owner 保持文件的属主信息不变
-g --group 保持文件的属组信息不变
-p --perms 保持文件权限信息不变
-D -- 保持设备文件信息不变
-l --links 保持链接文件属性不变
-L 保持链接文件数据信息不变
-P 显示数据传输的进度信息
--exclude=PATTERN 排除指定数据不被传输(单个文件排除)
--exclude-from=file 排除指定数据不被传输(批量排除)
--bwlimit=RATE 限制传输的速率(100Mb/s <==> 12.5MB/s)
--delete 无差异同步参数(慎用)

2.3.2 扩展

2.3.2.1 如何使得参数 o 和 g 生效

要使得参数 o 和 参数 g 生效,即客户端服务器上文件的属主和属组信息,同步至备份服务器依旧和客户端服务器保持一致。

修改 rsyncd.conf 配置文件

uid = root
gid = root
fake super = no

修改完配置文件,需要重启服务

2.3.2.2 慎用
rsync -avz --delete /null/ [email protected]:/

# 慎用
若 /null 目录为空,执行此命令对端服务器根目录直接清空。

3. rsync 传输数据的原理

image-20211115192841082.png

4. rsync 服务传输数据过程中常见的报错及解决方案

4.1 认证用户名错误或者密码错误

image-20211111175737522.png
# 查看服务端认证用户及密码配置
01. 查看 /etc/rsyncd.conf 配置文件中,认证用户及密码文件保存位置配置
02. 查看相关配置文件,确认认证用户和密码,再次进行数据传输

## 可能原因
1.密码真的输入错误,用户名真的错误
2.secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
3.letc/rsync.password文件权限不是600
4.rsync backup:123456 密码配置文件后面注意不要有空格
5.rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称

4.1.1 扩展 - 如何确认文件内容行尾有空格

  • 001
vim 目标文件

01. 行底模式搜索
02. 行底模式输入命令 set list,如果有空格行尾会显示$符号
image-20211111183504910.png
  • 002
[root@nfs01 tmp]# cat -A t01 
123 $

4.2 服务端未创建备份目录

image-20211111180102191.png
# 服务端执行
01. 查看服务配置中,备份目录是什么
02. 创建备份目录
03. 设置目录属主和属组

mkdir /backup
chown -R rsync.rsync /backup

4.3 服务端备份目录权限问题

image-20211111180343334.png
查看服务端备份目录权限
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 root root 6 Nov 11 18:03 /backup/
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 Nov 11 18:03 /backup/

4.4 rsync虚拟用户无权限修改文件属主和属组信息报错

image-20211111180541506.png
问题:
由于rsync服务同步数据原理造成

同步的文件属主和属组均为root用户或者其他用户,客户端同步过去之后,以rsync配置文件中设置的虚拟用户的身份修改文件的属主和属组信息(改为rsync配置文件中设置的虚拟用户)
# 解决方法(两种)
001. 同步之前修改文件的属主和属组信息,再进行同步
[root@nfs01 ~]# useradd rsync
[root@nfs01 ~]# chown rsync.rsync /etc/hosts
[root@nfs01 ~]# ll /etc/hosts
-rw-r--r--. 1 rsync rsync 320 Nov 11 01:19 /etc/hosts
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::backup
Password: 
sending incremental file list
hosts

sent 102 bytes  received 49 bytes  60.40 bytes/sec
total size is 320  speedup is 2.12


002. 修改 rsyncd.conf 配置文件
# 将rsync虚拟用户伪装成一个超级管理员用户
fake super = yes

保存,重启服务,同步将会正常。

[root@backup ~]# vim /etc/rsyncd.conf
[root@backup ~]# grep fake /etc/rsyncd.conf
fake super = yes
[root@backup ~]# systemctl restart rsyncd

[root@nfs01 ~]# ll /etc/hosts
-rw-r--r--. 1 root root 320 Nov 11 01:19 /etc/hosts
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::backup
Password: 
sending incremental file list

sent 50 bytes  received 23 bytes  29.20 bytes/sec
total size is 320  speedup is 4.38

4.5 对端安全设备阻断

image-20211111182153233.png
检查防火墙等安全设备或者安全策略
01. 修改安全策略
02. 关闭防火墙

4.6 命令输入错误

image-20211111182425390.png
正确姿势
rsync -avz /etc/hosts [email protected]::backup

3. 扩展部分

3.1 守护进程多模块功能配置

sa      sa_data.txt
dev     dev_data.txt
dba     dba_data.txt

3.1.1 配置

vim /etc/rsyncd.conf
# 其中,底行模式中 23,25copy31 解释为下:
将23行至25行的内容 复制到 31行之后
image-20211115162738166.png
# 改完配置,重启服务
[root@backup ~]# systemctl restart rsyncd
# 创建备份目录
[root@backup ~]# echo /{dba,dev_data}
/dba /dev_data
[root@backup ~]# mkdir /{dba,dev_data}
# 给相应备份目录授权
[root@backup ~]# chown -R rsync.rsync /{dba,dev_data}
[root@backup ~]# ll -d /{dba,dev_data}
drwxr-xr-x 2 rsync rsync 6 Nov 15 16:31 /dba
drwxr-xr-x 2 rsync rsync 6 Nov 15 16:31 /dev_data

3.1.2 测试

# 进行测试

# 01. 测试之前备份服务器环境
[root@backup ~]# ll /{backup,dba,dev_data}
/backup:
total 0

/dba:
total 0

/dev_data:
total 0

# 02. 数据同步
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
hosts

sent 210 bytes  received 43 bytes  506.00 bytes/sec
total size is 320  speedup is 1.26
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::dev --password-file=/etc/rsync.password
sending incremental file list
hosts

sent 210 bytes  received 43 bytes  506.00 bytes/sec
total size is 320  speedup is 1.26
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::dba --password-file=/etc/rsync.password
sending incremental file list
hosts

sent 210 bytes  received 43 bytes  506.00 bytes/sec
total size is 320  speedup is 1.26

# 03. 查看结果
[root@backup ~]# ll /{backup,dev_data,dba}
/backup:
total 4
-rw-r--r-- 1 rsync rsync 320 Nov 11 01:19 hosts

/dba:
total 4
-rw-r--r-- 1 rsync rsync 320 Nov 11 01:19 hosts

/dev_data:
total 4
-rw-r--r-- 1 rsync rsync 320 Nov 11 01:19 hosts

3.2 守护进程的排除功能

3.2.1 环境准备

[root@nfs01 ~]# mkdir -p /data/{a..c}
[root@nfs01 ~]# touch /data/{a..c}/{1..3}.txt
[root@nfs01 ~]# tree /data
/data
├── a
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── b
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
└── c
    ├── 1.txt
    ├── 2.txt
    └── 3.txt

3 directories, 9 files

3.2.2 实验1(以单个文件排除)

需求:备份 a 目录所有文件,b目录除 1.txt 之外的所有文件,c目录不备份。

  • 以绝对路径的方式
# 01. 备份
[root@nfs01 ~]# rsync -avz /data --exclude=/data/b/1.txt --exclude=/data/c/ [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
data/
data/a/
data/a/1.txt
data/a/2.txt
data/a/3.txt
data/b/
data/b/2.txt
data/b/3.txt

sent 376 bytes  received 135 bytes  1,022.00 bytes/sec
total size is 0  speedup is 0.00

# 02. 查看结果
[root@backup backup]# tree /backup/
/backup/
└── data
    ├── a
    │   ├── 1.txt
    │   ├── 2.txt
    │   └── 3.txt
    └── b
        ├── 2.txt
        └── 3.txt

3 directories, 5 files
  • 以相对路径的方式
# 01. 备份
[root@nfs01 ~]# rsync -avz /data --exclude=b/1.txt --exclude=c/ [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
data/
data/a/
data/a/1.txt
data/a/2.txt
data/a/3.txt
data/b/
data/b/2.txt
data/b/3.txt

sent 376 bytes  received 135 bytes  1,022.00 bytes/sec
total size is 0  speedup is 0.00

# 02. 查看结果
[root@backup backup]# tree /backup/
/backup/
└── data
    ├── a
    │   ├── 1.txt
    │   ├── 2.txt
    │   └── 3.txt
    └── b
        ├── 2.txt
        └── 3.txt

3 directories, 5 files
  • 注意:备份目录加不加 '/' 的区别

以上两种都是在备份目录结尾未加 '/'

# 备份目录(/data/),末尾加'/'
[root@nfs01 ~]# rsync -avz /data/ --exclude=/data/b/1.txt --exclude=/data/c/ [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
a/
a/1.txt
a/2.txt
a/3.txt
b/
b/1.txt
b/2.txt
b/3.txt
c/
c/1.txt
c/2.txt
c/3.txt

sent 591 bytes  received 214 bytes  1,610.00 bytes/sec
total size is 0  speedup is 0.00

# 结果(将/data目录下的文件备份过去,不会将/data目录也备份过去。因此,按需使用)
[root@backup backup]# tree /backup
/backup
├── a
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── b
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
└── c
    ├── 1.txt
    ├── 2.txt
    └── 3.txt

3 directories, 9 files

3.2.3 实验2(将排除的文件名写入到一个文件,统一排除)

需求:备份 a 目录所有文件,b 目录除 1.txt 之外的所有文件,c 目录只备份 2.txt 文件

3.2.3.1 绝对路径
  1. 编辑排除文件
[root@nfs01 data]# cat exclude_file.txt 
/data/b/1.txt
/data/c/1.txt
/data/c/3.txt
/data/exclude_file.txt
[root@nfs01 data]# pwd
/data
  1. 数据同步
[root@nfs01 ~]# rsync -avz /data --exclude-from=/data/exclude_file.txt [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
data/
data/a/
data/a/1.txt
data/a/2.txt
data/a/3.txt
data/b/
data/b/2.txt
data/b/3.txt
data/c/
data/c/2.txt

sent 450 bytes  received 158 bytes  1,216.00 bytes/sec
total size is 0  speedup is 0.00
  1. 查看结果
[root@backup backup]# tree /backup/
/backup/
└── data
    ├── a
    │   ├── 1.txt
    │   ├── 2.txt
    │   └── 3.txt
    ├── b
    │   ├── 2.txt
    │   └── 3.txt
    └── c
        └── 2.txt

4 directories, 6 files
3.2.3.2 相对路径
  1. 编辑排除文件
[root@nfs01 ~]# cat /data/exclude_file.txt 
b/1.txt
c/1.txt
c/3.txt
exclude_file.txt
  1. 数据同步
[root@nfs01 ~]# rsync -avz /data/ --exclude-from=/data/exclude_file.txt [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
a/
a/1.txt
a/2.txt
a/3.txt
b/
b/2.txt
b/3.txt
c/
c/2.txt

sent 435 bytes  received 157 bytes  1,184.00 bytes/sec
total size is 0  speedup is 0.00
  1. 查看结果
[root@backup backup]# tree /backup/
/backup/
├── a
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── b
│   ├── 2.txt
│   └── 3.txt
└── c
    └── 2.txt

3 directories, 6 files
3.2.3.3 扩展(注意:此种方式无法排除相应文件)
# 排除文件
[root@nfs01 ~]# cat /data/exclude_file.txt 
/data/b/1.txt
/data/c/1.txt
/data/c/3.txt
/data/exclude_file.txt
# 数据同步
[root@nfs01 ~]# rsync -avz /data/ --exclude-from=/data/exclude_file.txt [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
exclude_file.txt
a/
a/1.txt
a/2.txt
a/3.txt
b/
b/1.txt
b/2.txt
b/3.txt
c/
c/1.txt
c/2.txt
c/3.txt

sent 707 bytes  received 237 bytes  629.33 bytes/sec
total size is 65  speedup is 0.07
# 查看结果
[root@backup backup]# tree /backup/
/backup/
├── a
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── b
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── c
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
└── exclude_file.txt

3 directories, 10 files

3.3 守护进程创建备份目录

3.3.1 实验1

需求:将 web01 服务器和 nfs01 服务器上的 hosts 文件备份至 备份服务器

  1. 数据同步
# web01 服务器同步数据
[root@web01 ~]# rsync -avz /etc/hosts [email protected]::backup/10.1.1.7/ --password-file=/etc/rsync.password
sending incremental file list
created directory 10.1.1.7
hosts

sent 210 bytes  received 74 bytes  568.00 bytes/sec
total size is 320  speedup is 1.13

# nfs01 服务器同步数据
[root@nfs01 ~]# rsync -avz /etc/hosts [email protected]::backup/10.1.1.31/ --password-file=/etc/rsync.password
sending incremental file list
created directory 10.1.1.31
hosts

sent 210 bytes  received 75 bytes  570.00 bytes/sec
total size is 320  speedup is 1.12
  1. 查看结果
[root@backup backup]# ll
total 0
drwxr-xr-x 2 rsync rsync 19 Nov 15 17:55 10.1.1.31
drwxr-xr-x 2 rsync rsync 19 Nov 15 17:54 10.1.1.7
[root@backup backup]# tree
.
├── 10.1.1.31
│   └── hosts
└── 10.1.1.7
    └── hosts

2 directories, 2 files

注意: rsync 客户端无法在服务端创建多级目录,只能创建一级目录

[root@web01 ~]# rsync -avz /etc/hosts [email protected]::backup/10.1.1.7/a/b/c --password-file=/etc/rsync.password
sending incremental file list
rsync: change_dir#3 "/10.1.1.7/a/b" (in backup) failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(695) [Receiver=3.1.2]

3.4 守护进程的访问控制

3.4.1 守护进程的白名单和黑名单

host allow = 172.16.1.0/24
host deny = 0.0.0.0/32

# 允许172.16.1.0/24 网段内的主机均可以在服务端同步数据
# 不禁止任何地址进行数据同步

如果 host deny = 0.0.0.0/0 ,除了白名单之外,其余任何地址阻止

3.4.2 配置安全控制

3.4.2.1 只有白名单

如何白名单中有对应IP允许,则可以传输。否则,拒绝连接。

3.4.2.2 只有黑名单

如果黑名单中没有对应IP信息,则可以传输数据。如果黑名单中有对应IP信息,则拒绝连接。

3.4.2.3 黑白名单均有

白名单优先级高于黑名单,若出现黑白名单冲突。

3.5 守护进程的列表功能

使得客户端可以查看服务端的模块信息

  1. 编辑配置文件并重启服务
# 01. 编辑配置文件
vim /etc/rsyncd.conf

list = true

# 02. 重启服务
systemctl restart rsyncd
  1. 客户端查看服务端模块信息
[root@nfs01 ~]# rsync [email protected]::
backup          "backup dir by yunxuan"
dev             "backup dir by yunxuan"
dba             "backup dir by yunxuan"

总结:建议设置 list = false ,否则不安全。

你可能感兴趣的:(Rsync服务详解)