zoukankan      html  css  js  c++  java
  • Rsync同步过程中遇到的常见问题


    一、Rsync服务介绍

    Rsync属于一款实现全量及增量同步数据的软件工具,适用于unix/linux/windows等多种操作系统平台。
    Rsync软件能实现本地复制,远程复制,或者远程守护进程方式复制。它以其delta-transfer算法闻名,减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。

    二、Rsync工作方式

    1. 本地数据备份方式
    2. 远程传输数据方式
    3. 守护进程传输数据方式

    以rsync守护进程方式实现为主,通过man rsync帮助,查看用法。

    #拉取数据的命令参数用法
    Pull:rsync [OPTION...] [USER@]HOST::SRC... [DEST]
          rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
    参数解释:
          [USER@]HOST::       --- 指定远程连接的认证用户
          SRC                 --- 指定相应的模块信息
          [DEST]              --- 将远程数据保存到本地的路径信息
    
    #推送数据的命令参数用法
    Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
    参数解释:
          [USER@]HOST::       --- 指定远程连接的认证用户
          SRC                 --- 指定本地要进行推送的数据信息
          [DEST]              --- 远程进行保存数据的模块信息
    

    三、守护进程部署流程

    3.1 服务端部署

    1)主机环境检查

    [root@backup ~]# cat /etc/redhat-release 
    CentOS release 6.8 (Final)
    [root@backup ~]# uname -r
    2.6.32-642.el6.x86_64
    [root@backup ~]# uname -m
    x86_64
    

    2)检查软件是否安装

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

    3)编辑配置文件
    配置文件默认不存在,需要在/etc目录下创建rsyncd.conf。
    参数用法:man rsyncd.conf。

    #created by user at 2018
    ###rsyncd.conf start###
    uid = www                                 #管理备份目录的用户(需要在linux系统下创建虚拟用户)
    gid = www                                 #管理备份目录的用户组
    use chroot = no                           #保护模式,一般内网使用,可以选择禁用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                             #备份传输过程中,忽略一些I/O产生的传输错误
    read only = false                         #对备份目录开启读写权限,默认为true,只读模式
    list = false                              #禁止通过客户端查询服务端配置的模块信息
    hosts allow = 172.16.1.0/24               #允许指定网段或主机来访问备份目录
    auth users = rsync_backup                 #认证用户(虚拟认证用户),不是真实存在的,非linux系统管理的虚拟用户
    secrets file = /etc/rsync.pass            #设置免交互方式用户认证文件
    [data]                                    #指定备份目录的模块名称
    comment = "sersync dir by myself"
    path = /data                              #以绝对路径方式,设置备份目录路径信息
    

    4)创建备份目录管理用户

    [root@backup ~]# useradd www -M -s /sbin/nologin
    

    5)创建备份目录

    [root@backup ~]# mkdir /data
    [root@backup ~]# chown -R www.www /data
    

    6)创建用户认证文件

    [root@backup ~]# echo 'rsync_backup:123456' >>/etc/rsync.pass
    [root@backup ~]# chmod 600 /etc/rsync.pass
    

    追加内容"认证用户:密码"到认证文件中,在追加前先切换为英文输入法,行尾不添加空格或tab等内容,防止认证出错。
    可以通过vim编辑器尾行模式,输入:set list检查,或者使用命令cat -A /etc/rsync.pass检查。

    7)启动Rsync服务

    [root@backup ~]# rsync --daemon
    [root@backup ~]# netstat -lntp|grep rsync
    tcp        0      0 0.0.0.0:873              0.0.0.0:*                LISTEN        12805/rsync         
    tcp        0      0 :::873                   :::*                     LISTEN        12805/rsync
    [root@backup ~]# echo '/usr/bin/rsync --daemon' >>/etc/rc.local
    

    如果rsync服务默认端口873被其他服务占用,使用rsync --daemon --port=PORT命令启动测试,更多帮助查看rsync --daemon --help。

    3.2 客户端部署

    1)主机环境检查

    [root@nfs ~]# cat /etc/redhat-release 
    CentOS release 6.8 (Final)
    [root@nfs ~]# uname -r
    2.6.32-642.el6.x86_64
    [root@nfs ~]# uname -m
    x86_64
    

    2)检查软件是否安装

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

    3)创建认证文件

    [root@nfs ~]# echo '123456' >>/etc/rsync.pass
    [root@nfs ~]# chmod 600 /etc/rsync.pass
    

    客户端认证文件只需要添加密码即可,认证用户在客户端通过rsync命令进行设置。

    4)进行数据备份测试

    #客户端备份数据
    [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass 
    sending incremental file list
    hosts
    
    sent 180 bytes  received 27 bytes  414.00 bytes/sec
    total size is 294  speedup is 1.42
    
    #服务端检查备份数据
    [root@backup ~]# ll /data/hosts
    -rw-r--r-- 1 www www 294 Nov  6  2018 /data/hosts
    

    四、Rsync备份过程中常见的错误问题总结

    1. 客户端执行rsync命令发生错误问题

    • 错误提示
      ERROR: The remote path must start with a module name not a /
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/data --password-file=/etc/rsync.pass
      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命令语法错误,::/data错误的语法,data为模块,而不是目录,正确写法::data。

    2. 配置了免交互方式备份数据,客户端依旧需要输入密码问题

    • 错误提示
      password file must not be other-accessible

    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      password file must not be other-accessible
      continuing without password file
      Password:
      sending incremental file list

      sent 26 bytes received 8 bytes 9.71 bytes/sec
      total size is 294 speedup is 8.65

    • 问题解决
      Rsync客户端的认证文件不是600权限。

    3. Rsync服务端防火墙问题

    • 错误提示
      No route to host
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      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服务端开启了防火墙功能,关闭即可。

    4. Rsync用户认证失败问题

    • 错误提示
      ERROR: auth failed on module data
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      @ERROR: auth failed on module data
      rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    • 问题解决
      1.客户端rsync命令认证用户没写对,或者认证文件密码所在行的结尾有多余的空格或tab(cat -A /etc/rsync.pass检查)
      2.客户端认证文件/etc/rsync.pass配置错误,不需要rsync_backup认证用户,只需要设置认证密码即可。
      3.服务端认证文件中rsync_backup:123456后有空行或tab,需要注意。
      4.服务端认证文件/etc/rsync.pass权限不是600。
      5.服务端rsyncd.conf配置文件中,secrets file参数设置的认证文件名称与系统中创建的认证文件名称不一致。
      6.服务端rsyncd.conf配置文件中,uid和gid设置的管理用户与备份目录管理用户不一致。

    5. Rsync服务权限阻止问题

    • 错误提示
      Permission denied

    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      sending incremental file list
      hosts
      rsync: mkstemp ".hosts.dGfSQ1" (in data) failed: Permission denied (13)

      sent 180 bytes received 27 bytes 414.00 bytes/sec
      total size is 294 speedup is 1.42
      rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

    • 问题解决
      1.服务端/etc/rsyncd.conf文件中,uid和gid设置的管理用户与备份目录的属主和属组不一致。
      2.备份目录的文件权限不是755。

    6. Rsync服务备份目录异常问题

    • 错误提示
      ERROR: chdir failed
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      @ERROR: chdir failed
      rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    • 问题解决
      服务端/etc/rsyncd.conf文件中,备份目录模块path路径设置存在问题,检查目录是否存在,或者path路径是否填写正确。

    7. Rsync服务备份模块异常问题

    • 错误提示
      ERROR: Unknown module 'data'
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      @ERROR: Unknown module 'data'
      rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    • 问题解决
      1.客户端rsync命令执行时,指定的模块名称不正确。
      2.服务端/etc/rsyncd.conf文件中,指定的备份目录的模块名称不正确。

    8.Rsync无效的用户问题

    • 错误提示
      ERROR: invalid uid mine
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      @ERROR: invalid uid mine
      rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
    • 问题解决
      服务端管理备份目录的虚拟用户不存在,通过“useradd 用户 -M -s /sbin/nologin”进行创建即可。

    9. Rsync服务未开启问题

    • 错误提示
      Connection refused
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass
      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]
    • 问题解决
      1.检查服务:ps -ef|grep [r]sync
      2.开启服务:rsync --daemon

    10. Rsync服务连接超时问题

    • 错误提示
      Connection timed out
    • 演示过程
      [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.51::data --password-file=/etc/rsync.pass
      rsync: failed to connect to 172.16.1.51: Connection timed out (110)
      rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
    • 问题解决
      检查目标主机IP地址,ping目标主机检查链路是否正常。
      [root@nfs ~]# ping 172.16.1.41
      PING 172.16.1.41 (172.16.1.41) 56(84) bytes of data.
      64 bytes from 172.16.1.41: icmp_seq=1 ttl=64 time=0.438 ms
      64 bytes from 172.16.1.41: icmp_seq=2 ttl=64 time=0.543 ms

    11. Rsync服务连接慢的问题

    • 日志分析
      [root@backup ~]# tailf /var/log/rsyncd.log
      2019/06/27 12:49:35 [22251] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
      --- 未对rsync客户端主机在服务端进行host解析,导致反向解析域名,使得连接缓慢。
      2019/06/27 12:49:55 [22251] name lookup failed for 172.16.1.31: Temporary failure in name resolution
      2019/06/27 12:49:55 [22251] connect from UNKNOWN (172.16.1.31)
      2019/06/27 12:49:55 [22251] rsync to data/ from rsync_backup@unknown (172.16.1.31)
      2019/06/27 12:49:55 [22251] receiving file list
      2019/06/27 12:49:56 [22251] sent 76 bytes received 81 bytes total size 294
    • 问题解决
      [root@backup ~]# echo -e '172.16.1.31 nfs' >>/etc/hosts
      [root@backup ~]# tailf /var/log/rsyncd.log
      2019/06/27 12:55:06 [22268] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
      --- 可以查看到服务端对nfs主机进行了正确的反向解析过程。
      2019/06/27 12:55:06 [22268] connect from nfs (172.16.1.31)
      2019/06/27 12:55:06 [22268] rsync to data/ from rsync_backup@nfs (172.16.1.31)
      2019/06/27 12:55:06 [22268] receiving file list
      2019/06/27 12:55:06 [22268] sent 76 bytes received 81 bytes total size 294
  • 相关阅读:
    django 模型ManyToMany 关联的添加,删除,查询
    js 购物车的数量加减,对应的总价也随机变化
    `Java`中`abstract class`与`interface`区别
    基于Netty的IdleStateHandler实现Mqtt心跳
    由MQTT topic的正则表达式匹配引发的特殊字符"/"匹配思考
    Maven项目配置Logback输出JSON格式日志
    MySql定时备份脚本
    使用tcpdump监控http流量
    Linux磁盘信息查询及删除文件操作
    基于Morphia实现MongoDB按小时、按天聚合操作
  • 原文地址:https://www.cnblogs.com/theboy/p/11106092.html
Copyright © 2011-2022 走看看