关于RSYNC,个人理解传送大量资源文件或较多小文件时适合使用传输,具有数据验证、断点续传、增量传输、差异传输等特性。优于scp及ftp等工具。

rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输。rsync中一项与其他大部分类似程序或协定中所未见的重要特性是镜像是只对有变更的部分进行传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。rsync利用由Andrew Tridgell发明的算法…

摘自Rsync的核心算法

服务器端

  • 安装服务
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    yum install xinetd -y
    yum install rsync -y
    mkdir /etc/rsyncd
    touch /etc/rsyncd/rsyncd.pwd
    chmod 600 /etc/rsyncd/rsyncd.pwd
    #创建密码文件并更改权限
    touch /etc/rsyncd/rsyncd.motd
    echo "---Hello It's Rsync---" > /etc/rsyncd/rsyncd.motd
    #创建欢迎信息
    touch /etc/rsyncd/rsyncd.conf
    #创建配置文件
    
  • 配置文件实例
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    #vim /etc/rsyncd/rsyncd.conf
    pid file = /var/run/rsyncd.pid
    port = 873
    #address = 192.168.1.11 #监听地址,可不填
    uid = root
    gid = root
    #为避免权限问题,此处使用root,此用户操作的是xinted
    use chroot = yes
    read only = no
    #只读选择,只让客户端从服务器上读取文件
    #write only = yes #只写选择,只让客户端到服务器上写入
    hosts allow = xxxxxxxx/24
    max connections = 5
    motd file = /etc/rsyncd/rsyncd.motd
    log file = /var/log/rsync.log
    transfer logging = yes
    log format = %t %a %m %f %b
    syslog facility = local3
    timeout = 0
    # 设置为0为无限制,简易为600
    #----Mode rsync---
    [binlogshome]
    path = /data/bilogs_S3_haiwai/userinfo_guildinfo_zip/
    list = no
    #当查看服务器上提供了哪些目录时是否列出来,no比较安全
    ignore errors
    #忽略I/O错误
    secrets file = /etc/rsyncd/rsyncd.pwd
    #exclude = error_log httpd.pid #忽略的文件或目录
    #comment this is my log #本模块注释
    
  • 编辑密码文件
    1
    2
    
    #vim /etc/rsyncd/rsyncd.pwd
    arvon123:A35q3FhoXTJ4FRMqm
    

启动Rsync服务

  • 命令行启动
    1
    
    /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
    
  • xinetd方式启动
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#vim /etc/xinetd.d/rsync
#service rsync
#{
#        disable = no
#        socket_type     = stream
#        wait            = no
#        user            = root
#        server          = /usr/bin/rsync
#        server_args     = --daemon
#        log_on_failure  += USERID
#}
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf
#xinted 默认会去/etc下查找配置,所以做个软链就可以了
/etc/init.d/xinted start

客服端命令

  • 安装rsync命令
  • 设置密码文件
    1
    
    echo "A35q3FhoXTJ4FRMqm" >/etc/rsync.password
    
  • 同步命令
    1
    
    rsync -avzP arvon123@xxxxxx::binlogshome /data/bilogs_S3_haiwai/ --password-file=/etc/rsync.password
    

常用优化相关

  • 传输大量备份文件

    半夜花了一个多小时查看了rsync的文档,发现有一个参数能快速恢复大文件的增量同步,–append。设置–append参数会在增量同步时计算文件大小并直接追加新的数据到文件,这样就省了费IO校验的过程。不过这个参数最好只在源文件和目标文件都不会更改的时候使用比较安全,比如备份的文件。

  • 使源目录保存较少文件

    这是一个传统优化办法,因为rsync虽然是同步所有文件,但和同步最近更新的文件是一个道理,因此将源服务器上的目录删除,仅仅保持最近更新的文件,文件数量就变得不但很少,而且是稳定的,随着时间推移,这数量也不会涨得很快。但这样做有个缺点,就是rsync不能使用删除模式,如果有文件要删除,可以将其弄成空文件,假如有更严格要求,可以另一个程序来删除。

参考文献

关于rsync命令 John_ABC的博客 传输优化相关 常见错误处理