zoukankan      html  css  js  c++  java
  • Linux三阶段之二:备份服务(rsync)

    二、备份服务(rsync)

    (一)rsync服务介绍

    Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。

    Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。

    (二)rsync服务命令简单应用

    1、Rsync复制同步数据原理

    在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的同步备份数据,即采用增量复制方法对数据信息进行同步,与传统cp,scp拷贝工具的全量拷贝复制截然不同,增量同步复制数据,在效率上远远高于全量复制。

    2、Rsync备份软件7大特性总结:

    支持拷贝普通文件与特殊文件如链接文件,设备等。
    
    支持排除指定文件或目录同步的功能,类似tar命令排除功能。
    
    支持保持原文件或目录的所有属性信息不变。
    
    支持增量同步,既只同步变化数据,提升数据传输效率。
    
    支持使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件。
    
    支持使用通过socket(守护进程方式)传输文件或目录数据信息。
    
    支持用户认证方式传输数据,提升数据同步安全性。
    

    3、Rsync服务命令在应用时,属于一个非常强大的命令,可以通过rsync一个命令,替换下面4个命令的操作:

    ①. 实现本地数据同步复制(等价命令cp)

    	[root@backup ~]# # rsync == cp效果
        [root@backup ~]# cp -a /etc/hosts /tmp/
        [root@backup ~]# ll /tmp/
        total 4
        -rw-r--r--. 1 root root 352 Jan 27 01:15 hosts
        [root@backup ~]# rsync -a /etc/sysconfig/network /tmp/
        [root@backup ~]# ll /tmp/
        total 8
        -rw-r--r--. 1 root root 352 Jan 27 01:15 hosts
        -rw-r--r--  1 root root  31 Jan 26 18:16 network
    

    ②. 实现远程数据同步复制(等价命令scp)

        rsync == scp
        [root@backup ~]# scp -rp /tmp/ 172.16.1.31:/tmp/
        The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
        RSA key fingerprint is 5b:9b:e6:79:a9:95:4f:be:06:41:e3:bb:7a:12:ee:b4.
        Are you sure you want to continue connecting (yes/no)? yes
        Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.
        root@172.16.1.31's password: 
        network                                                                                                                              100%   31     0.0KB/s   00:00    
        hosts                                                                                                                                100%  352     0.3KB/s   00:00    
        [root@backup ~]# ll /tmp/
        total 8
        -rw-r--r--. 1 root root 352 Jan 27 01:15 hosts
        -rw-r--r--  1 root root  31 Jan 26 18:16 network
    	[root@backup ~]# rsync -rp /tmp/ 172.16.1.31:/tmp/
        root@172.16.1.31's password: 
        [root@backup ~]# 
    	说明:同步数据时,/tmp/目录后有/信息,表示将目录下面的数据内容进行备份同步
    	     同步数据时,/tmp目录后没有/信息,表示将目录及目录下面的数据内容进行备份同步
    

    ③. 实现数据信息删除功能(等价命令rm)

    	说明:rsync实现删除目录中数据内容过程,就将一个空目录和一个有数据的目录进行同步
    	      最终,会将有数据的目录中的文件进行清空
        [root@backup ~]# mkdir /null
        [root@backup ~]# rsync --delete /null/ /tmp/
        rsync: --delete does not work without -r or -d.
        rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]
        [root@backup ~]# 
        [root@backup ~]# rsync -r --delete /null/ /tmp/
        [root@backup ~]# ll /tmp/
        total 0
    

    ④. 实现数据信息查看功能(等价命令ls)

    	[root@backup ~]# ls /etc/hosts
        /etc/hosts
        [root@backup ~]# ls -l /etc/hosts
        -rw-r--r--. 2 root root 352 Jan 27 01:15 /etc/hosts
        [root@backup ~]# rsync /etc/hosts
        -rw-r--r--         352 2018/01/27 01:15:59 hosts
    

    (三)rsync软件工作方式

    1. 本地数据备份方式
      
       Local:  rsync [OPTION...] SRC... [DEST]
       rsync    --- 数据备份传输命令
       option   --- 可以输入一下和rsync传输数据有关的参数
       src      --- 要进行备份的数据(文件/目录)
       dest     --- 将数据信息备份到什么位置(相应路径中)
        
       实践练习:
       [root@backup ~]# rsync -a /etc/hosts /tmp/ok.txt
       [root@backup ~]# ll /tmp/ok.txt 
       -rw-r--r-- 1 root root 352 Jan 27 01:15 /tmp/ok.txt
    
    1. 远程数据备份方式
    	Access via remote shell:
             Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
             Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
    
       pull方式语法说明:
       rsync    --- 数据备份传输命令
       option   --- 可以输入一下和rsync传输数据有关的参数
       [USER@]HOST:     --- 需要指定以什么用户身份登录到远程主机,
                            如果省略USER信息,表示以当前用户身份进行登录
    					  登录主机地址或域名信息
       SRC      --- 指定远程主机要传输过来到本地的数据信息
       dest     --- 将数据保存到本地的什么路径中
       
       push方式语法说明:
       rsync    --- 数据备份传输命令
       option   --- 可以输入一下和rsync传输数据有关的参数
       [USER@]HOST:     --- 需要指定以什么用户身份登录到远程主机,
                            如果省略USER信息,表示以当前用户身份进行登录
    						登录主机地址或域名信息
       SRC      --- 指定本地主机要传输到远程主机的数据
       dest     --- 将本地数据保存到远端的什么路径中
    
    1. 守护进程传输模式
       ③. 守护进程传输模式
       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
    			   
    	pull:rsync [OPTION...] [USER@]HOST::SRC... [DEST]
    	[USER@]HOST::       --- 指定远程连接的认证用户
    	SRC                 --- 指定相应的模块信息
    	[DEST]              --- 将远程数据保存到本地的路径信息
    
        Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
    	[USER@]HOST::       --- 指定远程连接的认证用户
    	SRC                 --- 指定本地要进行推送的数据信息
    	[DEST]              --- 远程进行保存数据的模块信息
    

    (四) rsync守护进程部署流程

    1、服务端部署流程
    第一里程:检查软件是否安装

    [root@backup ~]# rpm -qa rsync
    rsync-3.0.6-12.el6.x86_64	  
    

    ​ 第二里程:编写配置文件

    vim /etc/rsyncd.conf
      #rsync_config
      #created by HQ at 2017
      ##rsyncd.conf start##
      
      uid = rsync
      gid = rsync
      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
      read only = true
      [nfs]
      comment = "backup dir by oldboy"
      path = /nfs
    

    第三个里程:创建备份目录管理用户

    useradd rsync -M -s /sbin/nologin
    

    第四个里程:创建备份目录

    mkdir /backup
    chown -R rsync.rsync /backup
    

    第五个里程:创建认证文件

    echo "rsync_backup:oldboy123"  >>/etc/rsync.password
    chmod 600 /etc/rsync.password
    

    第六个里程:启动rsync服务

    rsync --daemon
    

    2、客户端部署流程
    第一个里程:确认软件是否安装

    [root@backup ~]# rpm -qa rsync
    rsync-3.0.6-12.el6.x86_64
    

    第二个里程:创建认证密码文件

    echo "oldboy123" >>/etc/rsync.password
    chmod 600 /etc/rsync.password
    

    第三个里程:进行数据备份测试

    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
    sending incremental file list
    hosts
    sent 189 bytes  received 27 bytes  432.00 bytes/sec
    total size is 352  speedup is 1.63
    

    (五) rsync服务错误排查方法

    1)检查错误日志
    2)可以在模拟环境下。模拟练习一些错误

    扩展说明:rsync启动服务扩展参数
    --port 指定rsync服务端口号信息,默认是873
    --config=xxx 指定识别的rsync服务配置文件信息

    (六) rsync服务扩展应用

    ① 守护进程多模块功能配置
    第一步:修改配置文件

    vim /etc/rsyncd.conf
    [backup01]
    comment = "backup dir by oldboy"
    path = /backup
    [backup02]
    comment = "backup dir by oldboy"
    path = /backup02
    

    第二步:创建多模块目录

     mkdir /backup02
     chown -R rsync.rsync /backup02
    

    第三步:重启服务程序

    killall rsync
    rsync --daemon
    

    第四步:进行测试检查

    ② 守护进程的排除功能实践

    第一种数据备份排除方式:--exclude
    rsync -avz /test_dir/ --exclude=b --exclude=d rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password 
    rsync -avz /test_dir/ --exclude={b,d} rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password  
    rsync -avz /test_dir/ --exclude={b..d} rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password  
    
     第二种数据备份排除方式:--exclude-from=file
    	 rsync -avz /test_dir/ --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password 
    
    

    ③ 守护进程来创建备份目录

         rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/sa/ --password-file=/etc/rsync.password
         rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/dev/ --password-file=/etc/rsync.password
         rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/dba/ --password-file=/etc/rsync.password
    

    ④ 守护进程的访问控制配置

    三种情况:
    1. 只有白名单,白名单网段或主机信息允许。其余阻止
    2. 只有黑名单,黑名单网段或主机信息阻止,其余允许
    3. 有黑名单也要白名单,白名单网段或主机信息允许,黑名单网段或主机信息阻止,其余允许
    建议只选择前两种方式配置
    hosts allow = 172.16.1.0/24
    hosts deny = 0.0.0./32
    


    ⑤ 守护进程无差异同步配置(--delete)

    我有的,你也有;我没有的,你也不能有
    rsync -avz /test_dir/ --delete rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
    说明:一定要谨慎使用,否则可能会清空备份目录;
    如果要快速清空目录数据,也可以使用无差异同步清空
    


    ⑥ 守护进程的列表功能配置

    list = false
    说明:表示是否列表显示rsync服务端所有模块信息
    [root@nfs01 test_dir]# rsync rsync_backup@172.16.1.41::
    backup01       	"backup dir by oldboy"
    backup02       	"backup dir by oldboy"
    

    (七)Rsync服务常见问题汇总

    1. rsync服务端开启的iptables防火墙

      【客户端的错误】
         No route to host
        【错误演示过程】
         [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::/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 rsync_backup@172.16.1.41::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]
        【异常问题解决】
        【客户端的错误】
         auth failed on module oldboy
        【错误演示过程】
         [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::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密码配置文件后面注意不要有空格
          5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
      
      
    4. rsync服务位置模块错误

      1. 【客户端的错误】
            Unknown module 'backup'   
           【错误演示过程】  
            [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
            @ERROR: Unknown module 'backup'
            rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
           【异常问题解决】
      2. /etc/rsyncd.conf配置文件模块名称书写错误
      
    5. rsync服务权限阻止问题

      1. 【客户端的错误】
            Permission denied
           【错误演示过程】 
            [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::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]   
           【异常问题解决】
      2. 备份目录的属主和属组不正确,不是rsync
      3. 备份目录的权限不正确,不是755
      
      
    6. rsync服务备份目录异常

      1. 【客户端的错误】
            chdir failed   
           【错误演示过程】   
            [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
            Password: 
            @ERROR: chdir failed
            rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
           【异常问题解决】  
      2. 备份存储目录没有建立
      3. 建立的备份存储目录和配置文件定义不一致
         说明:如果没有备份存储目录
      
      
    7. rsync服务无效用户信息

      【客户端的错误】
         invalid uid rsync
        【错误演示过程】    
         [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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解析
        【错误日志信息】 
      错误日志输出
      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 nfs02 (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 rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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
    
  • 相关阅读:
    C++纯虚函数调用
    C++编译期数据结构 在不同的地方声明全局数组的初始值
    用虚拟机把ubuntu安装到TF卡上
    点击a链接打开第三方页面变成下载页面问题
    SRAM和DRAM的区别
    真值表生成逻辑表达式程序
    大端 小端
    vhdl rising_edge(clk) (clk'event and clk='1')的区别
    ROM、RAM、DRAM、SRAM、FLASH的区别
    同一个主机头的多域名绑定多个ssl证书的方法
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12814157.html
Copyright © 2011-2022 走看看