环境:CentOS 5.4,rsync-3.0.8

一、软件简介

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具。

二、安装软件

      2.1、下载安装
               方式1: yum 安装
                            yum install rsync
           
               方式2:  源码安装
                               cd /qeedoodb/setup
                           wget http://rsync.samba.org/ftp/rsync/rsync-3.0.8.tar.gz
                           cd rsync-3.0.8
                            ./configure
                           make
                           make install


   2.2 配置文件rsyncd.conf
      vi /etc/rsyncd.conf

      #全局参数设置:这部分设置的参数影响整个程序的运行
      uid = root       #rsync运行时的用户ID (关于用户ID和用户组ID的设置只要保证具有读取要同步文件和文件夹的权限即可)
      gid = root        #rsync运行时的用户组ID
      max connections = 0  #同时最大的连接数,0为不限制
      pid file = /var/log/rsync/rsyncd.pid   #记录rsync运行时的进程ID
      lock file = /var/log/rsync/rsync.lock  #以文件的方式锁的方式,保证rsync的一次运行
      log file = /var/log/rsync/rsyncd.log   #rsync日志信息包括启动信息同步信息等
      port = 873                             #可以指定rsync运行时使用的端口,默认使用873(不指定则使用默认)
      use chroot = no                        #不使用chroot
      #同步模块配置
      [test]               #要同步的文件夹的别名,此处直接写的accounts,只是一个名称方便记忆即可,客户端同时要用到
      path = /data #指定要同步的具体文件夹,此处为实际同步的文件夹
      comment = backup data  #备注信息,主要是一些说明信息,用来帮助记忆等
      ignore errors           #忽略一些无关的错误信息
      read only = false       #是否设置以只读的方式运行,本工具支持对外同步和回传哟
      list = false            #是否允许客户端查看文件列表
      hosts allow = 192.168.189.141 #允许同步的客户机IP,多个用","隔开
      auth users = test           #同步认证时使用的用户名,可以任意指定,但必需存在于下一项的密码文件中
      secrets file = /etc/rsyncd.scrt  #密码认证文件,此文件中包含客户端认证时的用户名和密码的对应关系 ,配置文件名可以任意

  2.3 编辑密码文件:
      vi /etc/rsyncd.scrt
      test:123456    #密码格式:[用户名:密码] 如果想设置多个认证用户名和密码对的话,要写成多行.一行保存一对
      这里需要注意的rsync对于密码文件的权限要求比较严格,只能root用户对该文件具有读写权限
      chmod 600 /etc/rsyncd.scrt
 
  2.4 启动rsync
      方式一:作为守护进程启动
       /usr/local/bin/rsync --daemon
       /var/log/rsync/rsyncd.pid  机器重启后,需要删掉rsyncd.pid 再启动 rsync
       查看rsync是整正常运行
       [root@localhost html]# ps -ef|grep rsync
       root      2861     1  0 17:04         00:00:00 /usr/local/bin/rsync --daemon
      
      方式二:用xinetd启动rsync
       vi /etc/xinetd.d/rsync
       service rsync
      {
       disable = no
       socket_type = stream
       wait = no
       user = root
       server = /usr/local/bin/rsync
       server_args = --daemon
       log_on_failure += USERID
       }
    
      service xinetd restart
      查看rsync是整正常运行
      netstat -ant|grep :873
      tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN

   2.5 开启防火墙
      vi /etc/sysconfig/iptables
      -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
      service iptables restart

   2.6 关闭SELinux
  SELINUX=disabled   或则  setsebool -P rsync_disable_trans on
      2.7  添加指定网卡
               在服务端网卡(eth1)上添加客户端IP(192.168.189.141)
               route add  -host 192.168.189.141  eth1

三.客户端配置及验证测试

   客户端安装参数服务端

   3.1 编辑密码文件
       vi /etc/rsyncd.scrt
       123456 #本配置文件只记录密码即可
       修改权限
       chmod 600 /etc/rsyncd.scrt

    3.2 同步测试
        /usr/bin/rsync -vlzrtogp --progress --delete test@192.168.189.140::test /backup --password-file=/etc/rsyncd.scrt
       
        写成脚本的方式方便调用
        vi rsync.sh
        #!/bin/bash
        /usr/bin/rsync -vlzrtogp --progress --delete test@192.168.189.140::test /backup --password-file=/etc/rsyncd.scrt
        简单说明:
        -vlzrtogp 具体意思参看后面的参数解释
        --pprogress 显示同步进度信息
        --delete  如果服务器删除的文件在客户端同样删除
        test 为认证的用户名
        192.168.189.140为服务器IP
        ::accounts 为认证的模块
        /var/www/html/test  为本地要存放同步文件的文件夹
        --password-file=/etc/rsyncd.scrt 指定密码认证文件,这样在执行同步命令时不需要再输入密码
       
     3.3 恢复服务端备份数据(若是服务器文件少了文件,这个依据情况而定,小心使用)
         /usr/local/bin/rsync -vlzrtogp --progress /var/www/html/test test@192.168.189.140::test


问题:

        问题一:
              @ERROR: chroot failed
              rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
              原因:
              服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。
        问题二:
              @ERROR: auth failed on module tee
              rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
              原因:
              服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。
              提供正确的用户名密码解决此问题。
        问题三:
              @ERROR: Unknown module ‘tee_nonexists’
              rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
              原因:
              服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。
        问题四:
              @ERROR: chdir failed
              rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]
              原因及解决办法:
  SELinux;
  setsebool -P rsync_disable_trans on

附:
rsync命令参数
-v表示verbose详细显示
-z表示压缩
-r表示recursive递归
-t表示保持原文件创建时间
-o表示保持原文件属主
-p表示保持原文件的参数
-g表示保持原文件的所属组
-a存档模式
-P表示代替-partial和-progress两者的选项功能
-e ssh建立起加密的连接。
--partial阻止rsync在传输中断时删除已拷贝的部分(如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷贝的部分文件
--progress是指显示出详细的进度情况
--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
--exclude不包含/ins目录
--size-only 这个参数用在两个文件夹中的差别仅是源文件夹中有一些新文件,不存在重名且被修改过的文件,因为这种文件有可能会因为内容被修改可大小一样,而被略过。这个参数可以大大地提高同步的效率,因为它不需要检查同名文件的内容是否相同。
--password-file来指定密码文件,内容包含server端指定认证用户的密码.这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读