• Rsync备份服务


    一、Rsync 原理图

    二、Rsync 原理描述

      2.1:什么是Rsync

        Rsync是备份的一款软件,它可以实现全量备份、增量备份,也可以在不改变内容、属性的情况下进行同步备份,端口默认是873

      2.2:Rsync的三种工作模式

        Rsync支持本地备份(相当于本地的CP命令)、远程备份(通过SSH)、通过daemon模式(服务端、客户端)可以进行Pull拉取数据和Push推送数据

      2.3:Rsync原理阐述(针对常用的daemon模式)

        ① Rsync客户端执行Rsync命令,去向服务端认证

        ② 首先服务端会认证发送访问的虚拟用户(在服务端配置的auth users参数)

        ③ Rsync客户端告诉服务端虚拟用户,认证成功或者失败

        ④ 认证客户端发送的密码文件(客户端发送时--password-file = /etc/rsyncd.pas)

        ⑤ 认证成功同步数据

    三、Rsync 优缺点

      3.1:优点(使用它的理由)

        ①  增量备份,支持socket(daemon)集中备份(支持推拉,都是以客户端为参照物)

        ②  支持远程shell通道模式还可以密码ssh传输

        ③ 支持断点续传

        ④ 可以排除指定的文档或者目录,相当于tar的排除功能

        ⑤ 支持匿名认证远程模式传输,实现方便安全的数据传输

      3.2:缺点(什么时候要用其他的方法)

        ① 大量小文件同步时间长,有时候会出现进程突然的停止

        ② 同步大文件的时候会中断,没有完成同步前是隐藏文件(点开头的文件),但是可以通过它的断点续传来实现传输

    四、Rsync 什么环境使用

      ① 利用定时任务(crontab)+rsync实现定时同步数据,主要同步的信息一般是内部人员使用的文件

      ② 利用实时同步软件(inotify)+rsync实现实时的同步数据,主要同步的信息是用户或者客户上传到服务器的文件

    五、Rsync 搭建部署

      5.1:语法及常用参数

    常用参数:
    -avz:保持属性,输出详细信息
    -e:    隧道模式传输(SSH)
    --delete:删除(无差异同步,两个文件保持一致)
    --exclude=*.log: 要排除的文件
    --bwlimit=10: 限速同步
    --progress:在传输时显示传输的过程
    --partial:断点续传
    
    基于rsync daemon客户端同步语法:
    拉取: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
            rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
    推送: rsync [OPTION...] SRC... [USER@]HOST::DEST
            rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

      5.2:在服务端安装rsync软件

    安装:
    yum -y install rsync (Centos7 已经默认安装了)
    检查:
    rpm -qa rsync
    结果出现表示已安装 rsync-3.0.9-18.el7.x86_64

      5.3:在服务端修改rsync的主配置文件(/etc/rsyncd.conf)

    在etc下面有rsyncd.conf这个文件,这个文件中有一些注释信息,就是配置文件中的规则
    我们要进行自定义配置文件:
    cat >/etc/rsyncd.conf<<EOF
    uid = root                      # 用户,远端的命令使用rsync访问共享目录
    gid = root                      # 用户组
    port = 873                      # 服务端口
    address = 192.168.163.129       # 服务地址 一般使用内网地址
    
    pid file = /var/run/rsyncd.pid  # 进程号文件
    lock file = /var/run/rsyncd.lock# 锁文件
    log file = /var/log/rsync.log   # 日志文件
    
    auth users = rsyncadmin         # 虚拟用户
    secrets file = /etc/rsyncd.pas  # 密码文件
    motd file = /etc/rsyncd.motd    # 描述文件(这个配置可以写到每个模块中,每个不同的同步就会显示不同的描述信息了)
    
    transfer logging = yes          # 使 rsync 服务器将传输操作记录到传输日志文件。默认值为false
    log format = "%o [ %a ] %m (%u) %f %b %l %b"    # 日志格式
    syslog facility = daemon        # 指定 rsync 发送日志消息给 syslog 时的消息级别
    use chroot = no                 # 默认为 true,在传输文件之前首先 chroot 到 path 参数所指定的目录下;优点,安全;缺点,需要 root 权限,不能备份指向 path 外部的符号连接所指向的目录文件
    timeout = 900                   # 超时时间
    ignore nonreadable = yes        # 是否忽略错误
    dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  # 用来指定那些在传输之前不进行压缩处理的文件
    max connections = 20            # 最大连接数
    
    read only = false               # 手动推送 可写
    write only = true               # 可读
    list = false
    
    hosts allow = 192.168.163.0/24  # 允许访问地址
    hosts deny = *                  # 拒绝访问地址(这个最好是不用;allow 和 deny同时存在的时候会出现不生效的情况)
    
    
    # 模块配置
    [date_backup]                   # 模块名
    path = /opt/data_backup         # 备份目录绝对路径
    EOF

      5.4:在服务端创建身份认证文件

    生成身份认证文件(rsyncadmin虚拟用户123456密码)
    ehco "rsyncadmin:123456" >> /etc/rsyncd.pas
    特别重要的一点
    一定给这个文件600权限不然你会很惨的
    chmod 600 /etc/rsyncd.pas

      5.5:在服务端创建备份的目录(配置文件中模块path的目录)

    创建备份目录(同配置文件中模块的path路径)
    mkdir -p /opt/backup

      5.6:在服务端创建描述信息文件

    创建欢迎描述信息主要是在执行客户端推送的时候有个显示
    echo "welcome rsync server" >> /etc/rsyncd.motd

      5.7:在服务端启动rsync服务

    启动两种方式
    rsync --daemon
    systemctl start rsyncd
    检查
    ps -ef | grep rsync | grep -v grep
    netstat -lntup | grep rsync

      5.8:在客户端创建备份目录

    创建备份目录的主要原因是为了对客户端要备份的文件进行统一打包推送
    mkdir -p /opt/backup

      5.9:在客户端创建身份认证密码文件(只包含密码)

    和服务端的密码保持一致,因为传输数据需要进行密码的认证
    echo "123456" >> /etc/rsyncd.pas
    同样一定要给600权限
    chmod 600 /etc/rsyncd.pas

      5.10:在客户端测试往服务端推送拉取文件

    使用推送的方式,把数据推到服务端
            # 第一种方式(需要修改read only = false)
            rsync -avz --progress --delete /opt/backup/ rsyncadmin@192.168.163.129::date_backup/ --password-file=/etc/rsyncd.pas
     
            # 第二种方式(需要修改write only = false)
            rsync -avz --progress --delete /opt/backup/ rsync://rsyncadmin@192.168.163.129/date_backup/ --password-file=/etc/rsyncd.pas
     
            # 过滤所有得log文件
            rsync -avz --progress --exclude=*.log --delete /opt/backup/ rsyncadmin@192.168.163.129::date_backup/ --password-file=/etc/rsyncd.pas
            rsync -avz --progress --exclude={a,b} --delete /opt/backup/ rsyncadmin@192.168.163.129::date_backup/ --password-file=/etc/rsyncd.pas  # 排除多个文件
    使用拉取的方式
            # 方法一
            rsync -avz /opt/backup/ --progress --delete rsyncadmin@192.168.163.129::date_backup --password-file=/etc/rsyncd.pas
     
            # 方法二
             rsync -avz --progress /opt/backup/ rsync://rsyncadmin@192.168.163.129/date_backup/ --password-file=/etc/rsyncd.pas
     
    PS:接下来就可以设置计划任务crontab来定时的执行备份任务了(--delete 参数最好不要加 会出现血的惨案)
    其他参数:
        限速:
            rsync -avz --progress --exclude=*.log --bwlimit=10 --delete /opt/backup/ rsyncadmin@192.168.163.129::date_backup/ --password-file=/etc/rsyncd.pas

      5.11:其他的两种方式的使用

    本地方式:
    rsync -avz /etc/hosts /mut/
    
    远程ssh方式:
    rsync -avz /etc/hosts -e 'ssh -p 22' root@192.168.163.132:/mnt/
    如果慢可以在ssh配置中设置两个参数(ssh_config文件)
    GSSAPIAuthentication yes 改为 no
    UseDNS  yes 改为 no

    六、Rsync 扩展(实时同步)

      6.1:inotify+rsync

      6.2:sersync

      6.3:lsyncd

    七、Rsync 总结

      Rsync这个工具其实还是挺好用的在工作中用的也很多,它的优点完全大于缺点,所有事实上在工作中它的有点会得到充分的利用的,缺点也是可以使用其他的方式解决的,这个工具挺重要的 在linux属于5星软件的,还有就是想要快速的定位错误真的需要你对整个流程、原理要了解的,掌握它相当于掌握了linux的一款初级神器呦

    八、Rsync 错误总结

    1、密码输入错误,虚拟用户名错误
    
    2、secrets file = /etc/rsyncd.pad指定的密码文档和实际密码文档名称不一致
    
    3、/etc/rsyncd.pad文档权限不是600
    
    4、rsyncadmin:123456密码配置文档后面注意不要有空格
    
    5、rsync客户端密码文档中只输入密码信息即可,不要输入虚拟认证用户名称
    
    6、推送时双冒号后面为模块名date_backup,而不是路径/date_backup
    
    7、telnet连接rsync服务ip地址873端口,查看服务是否启动 telnet 192.168.163.129 873
    作者:朱敬志

    -------------------------------------------

    个性签名:在逆境中要看到生活的美,在希望中别忘记不断奋斗

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

    支付宝 微信

    也可以关注我的微信公众号,不定时更新技术文章(kubernetes,Devops,Python)等

    微信公众号
  • 相关阅读:
    创建者模式 -- 单例模式(反射&序列化)
    设计模式(总)
    并不是static final 修饰的变量都是编译期常量
    内部类和静态内部类的加载顺序
    所有的Java虚拟机必须实现在每个类或接口被Java程序 “ 首次主动使用 ” 时才初始化他们
    24 shell 管道命令与过滤器
    26 bash shell中的信号
    25 Linux中的信号
    23 shell 进程替换
    22 shell组命令与子进程
  • 原文地址:https://www.cnblogs.com/zhujingzhi/p/9574800.html
Copyright © 2020-2023  润新知