• 使用Rsync同步备份数据

    Posted on 一月 16th, 2009 inetdemon No comments

    使用rsync的优点:可通过ssh进行网络加密传输,也可以利用ssh客户端密钥建立信任关系。当在两台计算机之间保持大型、复杂目录结构的同步时候,比tar或wget等方式都要快。而且可以做到精确同步。

    首先,安装rsync

    yum install rsync
    以上方法默认安装2.6.8, 建议安装3.0.X,据张宴博客介绍3.0.X的有比较更新(希望是比较智能的)
    wget http://rsync.samba.org/ftp/rsync/rsync-3.0.5.tar.gz
    tar -xvzf rsync-3.0.5.tar.gz; cd rsync-3.0.5;
    ./configure; make; make install

    使用rsh或ssh方式同步数据

    在没有建立rsync服务器的情况下,我们可以利用rsync命令直接进行快速的差异备份:

    命令格式:
    #rsync [option] 源路径 目标路径
    其中[option]为:
    a:使用archive模式,等于-rlptgoD,即保持原有的文件权限
    z:表示传输时压缩数据
    v:显示到屏幕中
    e:使用远程shell程序(可以使用rsh或ssh)
    –delete:精确保存副本,源主机删除的文件,目标主机也会同步删除
    –include=PATTERN:不排除符合PATTERN的文件或目录
    –exclude=PATTERN:排除所有符合PATTERN的文件或目录
    –password-file:指定用于rsync服务器的用户验证密码

    源路径和目标路径可以使用如下格式:

    rsync://[USER@]Host[:Port]/Path     <–rsync服务器路径
    [USER@]Host::Path                         <–rsync服务器的另一种表示形式
    [USER@]Host:Path                          <–远程路径
    LocalPath                                       <–本地路径

    注意:来源或目的路径最少要有一个是本地路径,如果忽略本地路径,则只会列出远端的文件列表。
    把远端机器ssh上789端口下的/home/www/logs/目录中的内容,通过rsync同步到本地的/home/www/logs/目录下:
    #rsync -ave “ssh -p 789″ backup@192.168.1.98:/home/www/logs/ /home/www/logs/
    注意:源路径结尾时候的/号,后缀/通知rsync复制该目录的内容,但不复制目录本身。

    例如,下面命令会把pub目录整个同步到本地/home/ftp/路径中:

    #rsync -ave ssh backup:/home/ftp/pub /home/ftp/

    使用rsync服务器方式同步数据

    当服务器没有开通ssh,或备份方没有ssh权限的时候,我们可以通过建立rsync服务器,进行匿名的数据同步。

    要使用rsync服务,需要建立服务端和客户端:

    1. 配置rsync服务器:
    创建rsyncd的配置文件/etc/rsyncd.conf,内容如下:
    uid = nobody
    gid = nobody
    use chroot = no
    max connections = 4
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    [logs]
    path = /home/www/logs
    ignore errors
    read only = true
    list = false
    hosts allow = 192.168.1.200
    hosts deny = 0.0.0.0/32
    auth users = backup
    secrets file = /etc/backserver.pas
    [app1]
    path = /app/application1/
    ignore errors
    read only = true
    list = false
    hosts allow = 192.168.1.200
    hosts deny = 0.0.0.0/32
    uid = dev01
    gid = dev01
    auth users = backup
    secrets file = /etc/backserver.pas

    帐号密码文件:
    #vi /etc/backserver.pas

    #格式:帐号:密码 (每行一组,帐号和密码用:号分开)

    backup:jeff

    保存后,需要保证用户是root,权限是600

    #chown root:root /etc/backserver.pas
    #chmod 600 /etc/backserver.pas

    2.启动rsync服务

    /usr/bin/rsync –daemon

    服务启动后侦听873/TCP端口

    要置开机启动rsync服务, 编辑/etc/rc.d/rc.local,在最后添加上述命令

    3.设置rsync客户端设置

    如果rsync服务器需要密码验证,可以增加–password-file参数:

    #rsync -azv --delete rsync://linuxing@192.168.1.100/test /var/www/html --password-file=/etc/test
    crontab -e
    00 04 * * * /usr/bin/rsync -arv backup@192.168.1.200::logs /home/www/logs --password-file=/etc/rsync.pass --exclude "*log"
    #vi /etc/rsync.pass

    #指定访问密码
    jeff
    #chmod 600 /etc/rsync.pass

    rsync是较为传统的代码同步方式,绝大多数网站已经足够使用,当然对于一些文件量大,访问量在千万以上级别的网站可以参考Amazon Dynamo和一篇豆瓣开发人员推荐的大量小文件的实时同步方案

    Leave a reply