美文网首页LinuxLinux
Rsync服务详解

Rsync服务详解

作者: 小屁孩云熙 | 来源:发表于2021-11-15 19:39 被阅读0次

    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.
    root@10.1.1.101'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
    root@10.1.1.101'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
    root@10.1.1.101'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
    root@10.1.1.101'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
    root@10.1.1.101'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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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/ root@172.16.1.41:/
    
    # 慎用
    若 /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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@10.1.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::
    backup          "backup dir by yunxuan"
    dev             "backup dir by yunxuan"
    dba             "backup dir by yunxuan"
    

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

    相关文章

      网友评论

        本文标题:Rsync服务详解

        本文链接:https://www.haomeiwen.com/subject/irgqtrtx.html