综合架构之备份服务-rsync

主要记录
1. 综合架构部署流程 2. 全量备份与增量备份
3. 备份服务传输原理 4. 备份服务工作方式
5. 守护进程模式部署 6. 守护模式常见错误
7. 备份服务命令参数


第一部分rsync知识体系内容

综合架构之备份服务-rsync_第1张图片
image

备份服务概念的介绍

#备份服务重要性:  企业中所有要进行操作的数据文件,一定操作前备份。
企业备份数据方法:重要数据需要保存在专门备份服务器上,或者是在第三方网盘上存储,或自己搭建备份服务器。

如何部署搭建备份服务器:rsync

rsync介绍
rsync - a fast, versatile, remote (and local) file-copying tool
快速 多功能 远程(scp)和本地(cp)文件拷贝工具
centos6(3.0.9)centos7(3.1.2) 默认就有rsync软件
特点:可以实现全量和增量备份


综合架构之备份服务-rsync_第2张图片
全量备份与增量备份
增量备份:备份时,先跟自己的数据内容进行比对,将不一样的地方进行传输备份。(推荐)
全量备份:就是将之前已经备好的数据加上新产生的数据重新进行一次备份(一般企业不常用)。
实现的方式:
方式一: 对源数据和目标目录中的数据进行比对属性信息
             /oldboy/oldboy.txt    ---   远程主机  /oldboy/oldboy.txt 
                属性信息:大小 修改时间 
    方式二: 利用文件指纹进行判断文件是否相同
             指纹方式多种多样 利用md5运算生成数值信息(指纹信息)
[root@localhost ~]# md5sum /etc/hosts
9b227ad1017a60a8f62435f4c77edeb8  /etc/hosts 生成指纹信息
[root@localhost ~]# md5sum /etc/hosts
37fcc2a587e1c876ea48400b4b499863  /etc/hosts
#和本地的文件或目录进行比对,如有变化,增量备份

rsync的使用方法--1v4命令

cp命令:cp /etc/hosts /tmp/hosts_cp
   备份文件  备份目录
   rsync /etc/hosts /tmp/hosts_bak02
#主要是学习远程的备份

scp命令:
    传输文件
    scp /etc/hosts [email protected]:/tmp/hosts_oldboy
#需要知道密码 (不加用户的时候就以系统当前用户)
#指定是什么用户最后传输文件的内容的属者、属组就是此用户

    rsync /etc/hosts 172.16.1.41:/tmp/hosts_root_rsync
传输目录:
    scp -rp /oldboy  172.16.1.41:/tmp
    rsync -rp /oldboy  172.16.1.41:/tmp
利用rsync传输目录数据 
    目录数据后面有/  /oldboy/   将目录下面的数据内容进行传输
    目录数据后面没/  /oldboy    将目录本身和目录下面的数据内
容进行传输
ls 命令
    [root@oldboyedu62 ~]# rsync /etc/hosts
    -rw-rw-rw-             10 2019/07/12 15:42:49 hosts
    [root@oldboyedu62 ~]# rsync /oldboy
    drwxr-xr-x              6 2019/07/12 15:58:39 oldboy
rm命令
首先创建一个空目录 mkdir /null
rsync -avz --delete /null/  /oldboy
sending incremental file list
deleting oldboy03/
deleting oldboy01/
./
sent 42 bytes  received 45 bytes  174.00 bytes/sec
total size is 0  speedup is 0.00
--delete 无差异同步参数  将两个目录中的数据保持高度一致
    我有的东西     /null  你也有  
    我没有的东西 /null  你也不能有
ls命令
    [root@oldboyedu62 ~]# rsync /etc/hosts
    -rw-rw-rw-             10 2019/07/12 15:42:49 hosts
    [root@oldboyedu62 ~]# rsync /oldboy
    drwxr-xr-x              6 2019/07/12 15:58:39 oldboy

rsync命令详细用法说明

第一种:Local:  rsync [OPTION...] SRC... [DEST]
    本地复制备份文件 == cp 
    SRC  要备份的数据
    Dest 要备份到什么路径中

第二种:Access via remote shell:
    远程复制备份文件
    Pull(拉): rsync [OPTION...] [USER@]HOST:SRC... [DEST]  远端数据  拉取  本地
    [USER@]: 指定以什么用户身份登录到远程主机(默认是当前系统用户)
    HOST:    远程主机IP地址或者主机名称
    SRC:      远程要拉取的数据信息
    DEST:     保存到本地路径信息
    
    Push(t推): rsync [OPTION...] SRC... [USER@]HOST:DEST    本地数据  推送  远端
    [USER@]: 指定以什么用户身份登录到远程主机(默认是当前系统用户)
    HOST:    远程主机IP地址或者主机名称
    SRC:     本地要推送的数据信息
    DEST:     保存到远程路径信息
 #了解知道即可

推和拉的示意图

综合架构之备份服务-rsync_第3张图片
推和拉的示意图
(掌握)第三种: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
          src:    本地要推送的数据信息
          [USER@]  认证用户名称信息
          HOST:   备份服务器IP地址或者主机名称  host后面需要有两个冒号
          DEST:   指定模块信息  backup
          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

    01. 控制备份传输数据连接数
    02. 可以实现免交互传输数据
    03. 可以实现认证访问功能
    04. 可以实现安全访问控制  限制一些ip无法访问
守护进程推和拉的用法(注:一定是在客户端操作。)
推:客户端(操作)  将本地数据推送远程服务端进行备份
拉:客户端(操作)  在客户端上操作(backup)拉取到本地备份服务器

服务部署流程

以后部署服务的时候 都要有服务端部署 还要有客户端部署
先部署服务端 再部署客户端
服务以后部署的时候再记记

第一个历程:安装服务软件
    yum install -y rsync(已经安装完毕)
    rpm -qa rsync
    rsync-3.1.2-4.el7.x86_64 (版本过低升级一下)
第二个历程:编辑配置文件(通过配置文件进行下一步)
    vi /etc/rsyncd.conf
    
    #rsync_config
    #created by HQ at 2017
    ##rsyncd.conf start##
    uid = rsync                       --- 虚拟用户rsync,管理备份目录 原理(为什么要用这个用户去管理)
    gid = rsync                       --- 虚拟用户组rsync,管理备份目录
    port = 873                        --- 服务默认端口号873
    fake super = yes                  --- 伪装管理员功能开启  便于可以执行chgrp命令
    use chroot = no                   --- 安全配置 (不用去研究,没意义!)
    max connections = 200             --- 最大连接数  同时支持200个客户端连接
    timeout = 300                     --- 连接超时时间 秒
    pid file = /var/run/rsyncd.pid    --- 进程信息文件 记录进程号 
                                          作用:便于获取进程号停止进程
                                          kill -9837 `/var/run/rsyncd.pid 
centos6中有体现, centos 6 直接是 / 启动某个服务 启动之后会有这个文件。
如果在启动会提示已有这个文件。便于判断服务是否启动  避免反复启动。
    lock file = /var/run/rsync.lock   --- 锁文件达到最大连接数,就将锁起来,避免访问。(开发考虑)
    log file = /var/log/rsyncd.log    --- 服务运行时日志文件
    ignore errors                     --- 忽略传输过程一些小错误
    read only = false                 --- 指定备份目录的权限为可读可写 
    list = false                      --- ???
    hosts allow = 172.16.1.0/24       --- 安全策略配置  设置一个白名单(黑名单相反) 只允许172.16.1.0/24这个网段访问
    hosts deny = 0.0.0.0/32           --- 安全策略配置  设置一个黑名单
    auth users = rsync_backup         --- 定义认证用户
    secrets file = /etc/rsync.password    --- 密码文件 用户密码信息 
                                             (铭文) rsync_backup:oldboy123
    [backup]                          --- 模块 名称
    comment = "backup dir by oldboy"
    path = /backup                    --- 定义一个备份目录

方便搭建服务的时候复制

#rsync_config
#created by HQ at 2017
##rsyncd.conf start##

uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
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 oldboy"
path = /backup
第三个历程:创建一个虚拟用户 rsync 
    useradd rsync -M -s /sbin/nologin
第四个历程:创建密码文件并修改权限为600
    echo "rsync_backup:oldboy123" >/etc/rsync.password
    chmod 600 /etc/rsync.password
第五个历程:创建备份目录/修改目录属主和属组信息
    mkdir /backup
    chown rsync.rsync /backup
第六个历程:启动服务程序/重启服务程序
    systemctl start rsyncd
    systemctl restart rsyncd (只要配置程序有修改,都要重启服务。)
    systemctl enable  rsyncd
第七个历程:客户端备份存储测试(能否备份成功)
    rsync -avz /etc/hosts [email protected]::backup

客户端部署流程

第一个历程:创建密码文件 并修改权限
    echo oldboy123 >/etc/rsync.password
    chmod 600 /etc/rsync.password
第二个历程:免交互传输数据测试
    [root@oldboyedu62 ~]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password(增量传输)
    sending incremental file list
    hosts
    
    sent 102 bytes  received 43 bytes  290.00 bytes/sec
    total size is 10  speedup is 0.07

rsync守护进程数据备份传输原理示意图

综合架构之备份服务-rsync_第4张图片
备份服务原理过程
       1)客户端  发送要传输数据的请求
                  rsync -avz /etc/hosts  [email protected]::backup --password-file=/etc/rsync.password
       2)服务端  接收到传输数据请求    进行用户认证操作
                  服务端确认用户信息是否正确    确认客户端输入的用户 == 服务端配置文件用户
                  服务端确认用户密码是否正确    确认客户端输入的密码 == 服务端相应用户的密码信息 oldboy:oldboy123
                  在进行用户认证时,需要判断两个文件的权限是否是600
       3)客户端  将数据传输到服务端     会转换传输者的身份(rsync)  将数据信息权限改动 rsync
#如果客户端是普通用户进行传输时,加上avz的参数,服务端配置文件中的用户和组变为root,同样模块的属主和属组也变为root后,当客户端普通用户备份的数据属主和属组都为普通用户。
       4)服务端  如果想让数据正确保存   修改备份目录      

rsync守护进程数据备份传输原理及出现报错的原因

  • 1.由图所示:当部署好了一台rsync备份服务器,由客户端向服务端备份传输数据时,根据输入的命令rsync -avz /etc/hosts [email protected]::backup,客户端会以当前用户root和认证用户rsync_backup向备份服务器的备份目录(/backup)中传输数据。
  • 2.当到达备份服务器时,首先做一个认证,验证认证用户及输入的密码是否正确。
  • 3.当认证用户和密码验证正确时,会将客户端传输数据的用户变为服务端配置文件中的rsync普通用户的身份去向backup目录去备份数据。
  • 4.但是因为备份目录backup是root管理的目录,所以普通用户rsync无法在root管理的目录去备份数据,所以这时候需要更改backup的所有者、所属组。
  • 5.改完后发现似乎可以传输了,但还是会报chgrp权限拒绝的错误。
  • 原因:因为客户端以root用户的属主、属组权限向服务端发送备份数据,到达服务端时,因为身份变为了普通用户rsync,所以无法修改备份文件的属组信息,这时需要将服务端配置文件的伪装root用户功能开启,这样可以正常修改属组信息,不会出现报错。

rsync常见操作问题

 1. rsync服务端开启的iptables防火墙
  【客户端的错误】
   No route to host
  【错误演示过程】
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   rsync: failed to connect to 172.16.1.41: No route to host (113)
   rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
  【异常问题解决】
   关闭rsync服务端的防火墙服务(iptables)
   [root@backup mnt]# /etc/init.d/iptables stop
   iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
   iptables: Flushing firewall rules:                         [  OK  ]
   iptables: Unloading modules:                               [  OK  ]
   [root@backup mnt]# /etc/init.d/iptables status
   iptables: Firewall is not running.

2. rsync客户端执行rsync命令错误
  【客户端的错误】
   The remote path must start with a module name not a / 
  【错误演示过程】
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::/backup
   ERROR: The remote path must start with a module name not a /
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  【异常问题解决】
   rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)

3. rsync服务认证用户失败
  【客户端的错误】
   auth failed on module oldboy
  【错误演示过程】
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   @ERROR: auth failed on module backup
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  【异常问题解决】
   1. 密码真的输入错误,用户名真的错误
   2. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致 信息复制粘贴
   3. /etc/rsync.password文件权限不是600
   4. rsync_backup:123456  密码配置文件后面注意不要有空格
      如何看出文件结尾空格信息:
      方法一:在vim编辑中查看
      底行模式---:set list 
      方法二:在cat命令中查看
      [root@backup ~]# cat -A /etc/rsync.password 
      rsync_backup:oldboy123 $
   5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称

4. rsync服务位置模块错误
  【客户端的错误】
   Unknown module 'backup'   
  【错误演示过程】  
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   @ERROR: Unknown module 'backup'
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  【异常问题解决】
   1. /etc/rsyncd.conf配置文件模块名称书写错误
   
5. rsync服务权限阻止问题
  【客户端的错误】
   Permission denied
  【错误演示过程】 
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   sending incremental file list
   hosts
   rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13) 
   sent 196 bytes  received 27 bytes  63.71 bytes/sec
   total size is 349  speedup is 1.57
   rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]   
  【异常问题解决】
   1. 备份目录的属主和属组不正确,不是rsync
   2. 备份目录的权限不正确,不是755
   
6. rsync服务备份目录异常
  【客户端的错误】
   chdir failed   
  【错误演示过程】   
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   @ERROR: chdir failed
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  【异常问题解决】  
   1. 备份存储目录没有建立
   2. 建立的备份存储目录和配置文件定义不一致
   说明:如果没有备份存储目录

7. rsync服务无效用户信息
  【客户端的错误】
   invalid uid rsync 
  【错误演示过程】    
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   @ERROR: invalid uid rsync
   rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  【异常问题解决】  
   rsync服务对应rsync虚拟用户不存在了
    
8. 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
  【客户端的错误】
   password file must not be other-accessible
  【错误演示过程】 
   [root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
   password file must not be other-accessible
   continuing without password file
   Password: 
   sending incremental file list
   sent 26 bytes  received 8 bytes  5.23 bytes/sec
   total size is 349  speedup is 10.26
  【异常问题解决】  
   rsync客户端的秘钥文件也必须是600权限

9. rsync客户端连接慢问题
  【错误日志信息】   名称或者域名 --- IP  dns解析
   错误日志输出      IP  --- 名称或者域名 反向dns解析
   2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
   2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known
   2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.31)
   2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31)
   2017/03/08 20:14:43 [3422] receiving file list
   2017/03/08 20:14:43 [3422] sent 76 bytes  received 83 bytes  total size 349
   正确日志输出
   2017/03/08 20:16:45 [3443] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
   2017/03/08 20:16:45 [3443] connect from nfs01 (172.16.1.31)
   2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31)
   2017/03/08 20:16:45 [3443] receiving file list
   2017/03/08 20:16:45 [3443] sent 76 bytes  received 83 bytes  total size 349
  【异常问题解决】
   查看日志进行分析,编写rsync服务端hosts解析文件

10 rsync服务没有正确启动
  【错误日志信息】 
   Connection refused (111)
  【错误演示过程】 
   [root@oldboy-muban ~]#  rsync -avz /etc/hosts [email protected]::backup
   rsync: failed to connect to 172.16.1.41: Connection refused (111)
   rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
  【异常问题解决】
   [root@oldboy-muban ~]# rsync --daemon
   [root@oldboy-muban ~]# ss -lntup |grep rsync
   tcp    LISTEN     0      5                     :::873                  :::*      users:(("rsync",1434,5))
   tcp    LISTEN     0      5                      *:873                   *:*      users:(("rsync",1434,4))
   [root@oldboy-muban ~]# rsync -avz /etc/hosts [email protected]::backup
   Password: 
   sending incremental file list
   hosts  
   sent 196 bytes  received 27 bytes  49.56 bytes/sec
   total size is 349  speedup is 1.57

rsync命令参数说明

      显示数据传输过程信息
 -z   compress file data during the transfer
      将传输的数据进行压缩处理
 -a   archive mode
      归档参数:等价于输入了 -rlptgoD
 -r   递归传输数据信息(传输目录)
 -l   copy symlinks as symlinks  最没有意义参数
      保持链接文件属性
-rptgoD -L 保存链接文件的源文件
 -L   将链接文件指向的源文件进行备份传输
 -p   保持文件权限不变
 -t   保持文件时间信息不变 (修改时间不变)
 -g   保持文件属组信息不变  
 -o   保持文件属主信息不变
 -D   保持设备文件属性信息不变
 --delete   实现无差异同步参数  
远程模式 实现 
 让服务器目录中数据信息  和  备份目录中的数据信息   保持高度一致
 #不要和/作比较
 --exclude=PATTERN       exclude files matching PATTERN     tar
 --exclude-from=FILE     read exclude patterns from FILE
                         排除指定数据信息不做备份传输


你可能感兴趣的:(综合架构之备份服务-rsync)