1.系统环境

服务端:CentOS7_64(192.168.178.46)

客户端:CentOS7_64(192.168.0.146)

2.目的

利用crontab和rsync,自动将服务端下的/home/backup备份到客户端的/home/backup/192_168_178_46目录下

3.配置服务端(192.168.178.46)

  1. 安装rsync

    yum -y install rsync
  2. 在/etc/目录下创建rsyncd/目录,在该目录下创建相关配置文件并修改权限

    /etc/rsyncd/
    ├── rsyncd.conf(rsync服务器配置文件)
    ├── rsyncd.motd(自定义用户登录后显示的服务器信息)
    └── rsyncd.secrets(用户密码文件,客户端使用其中的账号密码访问,需要 600 权限)

    mkdir /etc/rsyncd
    touch /etc/rsyncd/rsyncd.conf
    touch /etc/rsyncd/rsyncd.secrets
    touch /etc/rsyncd/rsyncd.motd
    chmod 600 /etc/rsyncd/rsyncd.secrets
  3. 编辑rsyncd.conf配置文件

    uid = root
    gid = root
    use chroot = yes
    read only = yes
    write only = no
    max connections = 4
    port = 873
    
    pid file = /var/run/rsyncd.pid
    secrets file = /etc/rsyncd/rsyncd.secrets
    motd file = /etc/rsyncd/rsyncd.motd
    
    log file = /var/log/rsync.log    #rsync 服务器的日志;
    transfer logging = yes           #记录传输文件的日志
    log format = %t %a %m %f %b      #日志格式
    syslog facility = local3         #日志级别
    timeout = 900
    
    [backup]
            path = /home/backup
            auth users = rsync
            secrets file = /etc/rsyncd/rsyncd.secrets
  4. 编辑rsyncd.secrets文件,用户名和密码以冒号分隔,多个用户名和密码需要换行

    rsync:123456
  5. 编辑rsyncd.motd 登录公告,内容随意

    ++++++++++++++++++++++++++++++++++++
    +       rsyncd backup start        +
    ++++++++++++++++++++++++++++++++++++
  6. 防火墙开放873端口

    firewall-cmd --permanent --zone=public --add-port=873/tcp 
    firewall-cmd --permanent --zone=public --add-port=873/udp 
    firewall-cmd --reload 
  7. 启动rsync服务端并添加到开机自启

    /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

    将此条命令添加到/etc/rc.local

4.配置客户端(192.168.0.146)

  1. 安装rsync

    yum install -y rsync
  2. 添加密码文件并修改权限

    mkdir /etc/rsyncd/
    touch /etc/rsyncd/rsyncd.pass
    chmod 600 /etc/rsyncd/rsyncd.pass

    在rsyncd.pass文件中写入在服务端的rsyncd.secrets文件中配置的密码

    123456
  3. 编辑脚本文件

    vim /root/bash/backup_files_in_46.sh

    内容为

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    
    # rsync 使用进行同步 
    # rsync的-a选项是archive的意思,加了之后有以下作用:
    # • 递归模式
    # • 同步软链接
    # • 同步权限
    # • 同步时间戳
    # • 同步属主和属组
    # 远程同步时,Rsync可以指定使用某一shell进行安全传输、使用rsync –e ssh选择ssh进行安全连接。
    # 删除在源位置不存在而在目标位置存在的文件,使用-delete选项
    # topg       # 保持原文件属性如属主、时间的参数。
    # --progress # 显示详细的同步进度情况。
    # IP地址后为两个冒号,冒号后紧跟服务端rsyncd.conf配置的模块名,而不是以/开头的路径
    /usr/bin/rsync -avzrtopg --progress --delete --password-file=/etc/rsyncd/rsyncd.pass rsync@192.168.178.46::backup /home/backup/192_168_178_46
  4. 执行脚本文件

    ./backup_files_in_46.sh

    执行后,会弹出在服务端编写的rsyncd.motd公告内容,并开始备份数据,第一次备份需要较长时间,之后执行实现增量备份

  5. 添加crontab任务,自动执行备份

    vim /etc/crontab

    内容为

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
     30  0  *  *  *   root      bash  /root/bash/backup_files_in_46.sh >> /root/log/rsync/rsync_$(date '+%Y_%m_%d').log
    

    更新crontab任务

    crontab /etc/crontab

5.常见报错

  1. rsync: failed to connect to 192.168.178.46: No route to host (113)

    rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

    解决方法:在服务端开启873的tcp/udp端口

  2. 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]

    解决方法:详情见客户端脚本文件最后一条注释内容

  3. ERROR: Unknown module 'backup'

    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

    解决方法:检查服务端配置文件中的模块名是否有错误,修改完成后,重启服务端rsync进程