IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    【转载】rsync实现文件备份全攻略

    rock发表于 2014-12-09 10:56:37
    love 0
    rsync实现文件备份全攻略

    简介

    rsync=remote sync,即远程数据同步备份工具,最大的优势就是快速

    特性

    • 可以镜像保存整个目录树和文件系统;

    • 可以很容易做到保持原来文件的权限、时间、软硬链接等等;

    • 无须特殊权限即可安装;

    优势

    • 快速:

      • 第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件;

      • rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽;

    • 安全:

      • 可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接;


    工作模式

    • shell模式:也称本地模式,类似cp;

    • 远程shell模式:此时可以使用ssh协议承载其数据传输过程;

    • 列表模式:仅列出源的内容,使用选项-nv即可,类似ls;

    • 服务器模式:此时rsync工作为守护进程,能够接受客户端的数据传输请求;在使用时,可以在客户端使用rsync命令把文件发送给守护进程,也可以向服务器请求获取文件;


    常用使用选项一级

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -n:# 测试指令,在不确定命令能否能按照意愿执行时,务必要先进行测试
    -v:--verbose # 详细输出模式
    -q:--quiet # 静默模式
    -c:--checksum # 开启校验功能,强制对文件传输进行校验
    -r:--recursive # 递归复制
    -a:--archive # 归档,保留文件的原有属性,等同于-rlptgoD,一般都使用此选项
    -p:perms # 保留文件的权限
    -t:times # 保留文件的时间戳,很重要,保持源端文件和目的端文件的mtime一致能避免重复同步问题
    -l:links # 保留文件的符号链接
    -g:group # 保留文件的属组
    -o:owner # 保留文件的属主
    -D:--devices # 保留设备文件

    注:对-r选项的重点解释

    wKiom1NFKRyR2GNEAAL72OtFfn8117.jpg


    常用使用选项二级

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -e ssh # 表示使用ssh协议作承载(rsync不具备加密功能)
    -z # 对文件压缩后传输
    --progress # 显示每个文件传输进度条
    --stats # 显示传输文件的统计信息
    --existing # 不同步新文件,只同步已存在目的端的文件
    --ignore-existing # 不更新已存在文件,只同步新文件
    --delete # 目的端删除源端不存在的文件,即保持和源端一致
    --delete-before # 默认删除策略,同步前删除目的端文件
    --delete-after # 删除策略,同步后删除目的端文件
    --delete-excluded # 专门指定需在目的端删除的文件,后跟--exclude选项
    --exclude=PATTERN # 源端匹配PATTERN模式的文件,屏蔽其同步
    --exclude-from=FILE # 从文件中读取PATTERN


    配置rsync以daemon方式运行

    设定rsync服务器端

    安装并启动xinetd

    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
    # 安装程序
    yum -y install xinetd rsync
    # 配置文件设置
    # vi /etc/rsyncd.conf
    # Global Settings
    uid = nobody # 运行rsync的用户
    gid = nobody # 运行rsync的组
    use chroot = no # 关闭chroot
    max connections = 2 # 最大连接数
    strict mode = yes # 开启对密码文件权限的严格限制,不能被除rsync运行用户以外的用户访问,即密码文件权限一般得是600
    pid file = /var/run/rsyncd.pid # pid文件
    log file = /var/log/rsyncd.log # 日志文件
    # Directory Settings
    [mydata] # 对于备份目录的模块名,在同步时使用
    path = /mydata/data # 需备份的数据目录
    ignore errors = yes # 同步时,忽略错误
    read only = no # 非只读
    write only = no # 非只写
    hosts allow = 172.16.0.0/16 # 访问控制,允许访问的来源IP段
    hosts deny = * # 访问控制,不允许访问的来源IP,此处*代表全部
    list = false # 不允许列出目录
    uid = root # 会覆盖global settings的相关配置
    gid = root # 同上
    auth users = jason # 允许同步数据的用户,在此只有一个jason
    secrets file = /etc/rsyncd.passwd # 密码文件目录

    配置密码文件/etc/rsyncd.passwd

    1
    2
    3
    4
    # 格式:username:password,
    # vi /etc/rsyncd.passwd
    jason:jason123
    chmod 600 /etc/rsyncd.passwd

    配置服务启动

    1
    2
    3
    chkconfig rsync on
    service xinetd start
    # 注:rsync被xinetd调用后监听在873/tcp端口


    客户端配置

    客户端也必须配置密码文件,但格式略有不同

    1
    2
    3
    4
    格式:password
    # vi /etc/rsyncd.passwd
    jason123
    chmod 600 /etc/rsyncd.passwd

    测试数据同步的用法

    wKiom1NFK66QhPqHAAWiZRFoduw664.jpg

    如果需要做周期性操作,则需要将命令写入crontab中:

    1
    2
    # crontab -e
    */5 * * * * /usr/bin/rsync -a --password-file=/etc/rsyncd.passwd jason@172.16.251.182::mydata /data &>/dev/null

    高级应用:rsync+inotify实现数据实时同步

    简介

    • rsync和crontab结合虽然可以实现数据定时同步,但对于需要实时备份数据的场景就不适用了,此时就可借助于inotify了;

    • inotify实际上是Linux Kernel中的一个特性,可以监控文件系统,比如删除、读、写和卸载操作等;

    • 可以利用inotify的监控功能,当待备份文件出现改变(如新增,删除,修改等)时,及时通知rsync进行数据同步操作,就实现了实时同步的目的;

    原理说明

    因为是发起rsync的主动同步,而且是推送(即PUSH)数据,只能是从rsync客户端向rsync服务器端推送数据,这点与rsync+crontab形式的从服务器端拉取(即PULL)数据不同,区别如下

    wKiom1NFLa_TOibFAAEXSSwYCwQ311.jpg

    具体部署

    • rsync的服务器端和客户端的配置与上面所述基本相同,不再赘述;

    • 在rsync客户端不再是拉取数据,而是推送数据,首先安装inotify-tools,其中包含所需的inotifywait文件系统监控工具

      1
      yum -y install inotify-tools
    • 然后配置运行一个后台程序,用以实时监控待备份的数据目录,下面用例中监控本地/tmp目录,将数据同步至rsyns服务器的mydata模块对应的目录下

    wKiom1NFLiHxJYxyAARAZF6HJcw005.jpg

    更多技巧

    因为inotify是针对文件系统的监控,非常灵敏,为了防止一些临时文件或者大文件的不断同步问题,可利用如下技巧:

    • 解决编辑文件时产生临时文件同步:--exclude ".*(swp|swx|~)"

    • 解决写入大文件时不断同步的问题:-e close_write,delete,create,attrib



沪ICP备19023445号-2号
友情链接