• rsync远程同步



    引言:rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

    一.rsync概述

    1.1rsync服务器

    ①rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。

    ②rsync软件适用于unix/linux/windows等多种操作系统平台

    ③rsync是一个快速和非常同样的文件复制工具。它能本能复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制

    ④以其delta-transfer算法闻名。

    ⑤rsync监听端口:873

    ⑥rsync运行模式:C/S架构

    1.2 同步方式

    1.2.1全量备份

    原有的数据全部传送

    把原来的文件和新的文件一起统一传送

    全量复制,效率低

    1.2.2增量备份

    在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输

    增量复制,效率高

    1.3rsync源服务器的关系

    • rsync同步源
    • 指备份操作的远程服务器,也称为备份源

    1.4rsync特性

    • 可以镜像保存整个目录和文件系统
    • 可以很容易做到保持原文件的权限、时间、软硬连接等
    • 无须特殊权限即可安装
      快速

    第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件
    rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的宽带

    安全

    可以使用scp、ssh等方式来传输文件
    也可通过直接socket连接
    支持匿名传输,以方便进行网站镜像

    二.rsync命令

    常用选项描述
    -v,–verbose详细模式输出
    -q,–quiet精简输出模式
    -c,–checksum打开校验开关,强制对文件传输进行校验
    -a,–archive归档模式,表示以递归方式传输文件,并保持所有文件树形
    -z在传输文件时进行压缩
    -r,–recursive对子目录以递归模式处理,包含目录及子目录中的所有文件
    -H,–hard-links保留硬链接
    -l, --links保留软链接
    –delete删除目标位置有而原始位置没有的文件(一致性)
    –delete-after传输结束以后再删除
    -A保留ACL属性信息

    三.rsync本地复制实例

    • rsync -avz abc/ /opt/ :只会拷贝abc目录下面的文件,而不会拷贝abc这个目录

    • rsync -avz /abc /opt/:会连着目录一起拷贝到/opt下

    #如果是rsync -avz  test/ /opt/会是什么情况
    cd /opt
    mkdir test
    cd test/
    touch 1.txt 2.txt
    ls
    cd ..
    ls
    rsync -avz test/ /opt/
    ls
    #如果是rsync -avz /abc /opt/会是什么情况
    mkdir test1
    ls test
    rsync -avz test test1
    ls test1
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述
    在这里插入图片描述

    四.rsync同步源

    • 在远程同步任务中,负责发起 rsync 同步操作的客户机称为客户端,而负责响应来自客户端的 rsync 同步操作的服务器称为备份源,也称之为同步源
    • 在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限
    • 在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限

    4.1.配置源的两种表示方法

    格式一:

    #用户名@主机地址: :共享模块名
    rsync -avz xiayan@192.168.48.14: :wwwroot /root
    #xiayan指的是我在同步的时候用的哪个用户身份
    #wwwroot代表的是模块,模块下面会写同步的默认路径和一些特性,所以我们只需要写模块就好了
    #/root指的是本地节点
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    格式二:

    #rsync:/用户名@主机地址/共享模块名
    rsync -avz rsync: //xiayan@192.168.48.14/wwwroot /root
    #URL:具体的位置点,例如:http://www.baidu.com./class1/men/id01.html
    #URI:标识的是拥有同一类特性或类型的一个集合 ,例如http://www.baidu.com./class1/men
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.2配置 Rsync 下行同步

    • 192.168.48.14配置如下
    #查看服务是否安装 
    rpm -q rsync
    #如没有则需要自行下载
    yum -y install rsync 
    #关闭防护墙
    systemctl stop firewalld.service 
    setenforce 0
    #更改配置文件
    vim /etc/rsyncd.conf
    uid = root											#用户id,表示共享权限能执行的身份
    gid = root											#组id
    use chroot = yes									#开启,禁锢在源目录,表示允许在访问我备份的目录或文件的时候,使用的角色是root,同时你访问本地目录时拥有的也是root权限
    address = 192.168.48.14						        #监听地址
    port 873											#默认端口号为873
    log file = /var/log/rsyncd.log						#日志文件存放位置
    pid file = /var/run/rsyncd.pid						#存放进程id的文件位置
    hosts allow = 192.168.48.0/24						#允许访问的主机网段,有点类似于黑白名单
    [wwwroot]        									#共享模块的名称,rsync默认调用该模块,默认我调用的路径是该模块指定的路径
    path = /opt								            #源目录路径
    read only = yes										#是否为只读
    dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z	#同步时不再压缩的文件类型,因为同步时,-avz已经进行压缩
    auth users = xiayan									#授权用户,使用wwwroot模块的用户是哪个用户,多个账户以空格隔开
    secrets file = /etc/rsyncd_users.db					#存放账号信息的数据文件,一行一个
    
    vim /etc/rsyncd_users.db
    xiayan:654321
    #编辑用户账号文件,固定格式为[名称:密码],一行一个
    chmod 600 /etc/rsyncd_users.db
    #官方要求,最好只是赋权600!
    
    rsync --daemon
    #开启服务
    netstat -natp | grep rsync
    #检测端口号,确认服务是否成功开启
    
    #在共享目录下创建文件
    cd /opt
    touch a.txt b.txt 
    
    
    • 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
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    #/etc/rsyncd.conf 配置如下,可直接复制,按需修改 
    uid = nobody
    gid = nobody
    use chroot = yes                                                
    address = 192.168.48.14
    port 873                                                                
    log file = /var/log/rsyncd.log                  
    pid file = /var/run/rsyncd.pid                  
    hosts allow = 192.168.48.0/24
    [wwwroot]                                                               
    path = /opt                                   
    read only = yes                                                  
    dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z        
    auth users = xiayan                                               
    secrets file = /etc/rsyncd_users.db
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    centos7系统默认安装了rsync
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    • 192.168.48.11配置如下
    #查看服务是否安装 
    rpm -q rsync
    #如没有则需要自行下载
    yum -y install rsync 
    #关闭防护墙
    systemctl stop firewalld.service 
    setenforce 0
     
    cd /opt
    mkdir test
    chmod 777 test
    #使用rsync同步备份源的同步文件
    rsync -avz xiayan@192.168.48.14::wwwroot /opt/test
    #免密交互配置
    vim /etc/server.pass
    654321
    
    chmod 600 /etc/server.pass
    rsync -az --delete --password-file=/etc/server.pass xiayan@192.168.48.14::wwwroot /opt/test
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • rsync -avz xiayan@192.168.48.14::wwwroot /opt/test
      在这里插入图片描述
      在这里插入图片描述
    • 使用rsync -az --delete 进行同步在这里插入图片描述

    五.rsync+inotify实时同步

    5.1inotify简介

    • 使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
    • 将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。
    • 因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步

    调整inotify内核参数(优化)
    /etc/sysctl.conf(内核参数配置文件)

    max_queue_events    	#监控事件队列大小
    max_user_instances  	#最多监控实例数
    max_user_watches    	#每个实例最多监控文件数  
    
    • 1
    • 2
    • 3
    • notifywait:用于持续监控,实时输出结果

    • inotifywatch:用于短期监控,任务完成后再输出结果
      常用参数:

    参数描述
    -m持续进行监控
    -r递归监控所有子对象
    -q简化输出信息
    -e指定要监控哪些事件类型
    modify修改
    create创建
    move移动
    delete删除

    5.2实时同步配置

    在这里插入图片描述

    • 192.168.48.14服务器配置
      关闭只读模式并为共享目录赋权
    #闭只读模式,否则将不可写入
    vim /etc/rsyncd.conf
    read only = no
    #修改完配置文件需要重启服务,这里采用直接杀掉进程号的方式 
    kill `cat /var/run/rsyncd.pid`
    #检查一下服务是否已被终止
    netstat -natp | grep rsync
    #再次开启服务并检查端口号确认 
    rsync --daemon
    netstat -natp | grep rsync
    #授权共享目录 
    cd /opt
    mkdir /opt/testinotify
    chmod 777 /opt/testinotify
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    在这里插入图片描述

    • 192.168.48.11服务配置
    #内核优化  按需添加  可以不进行更改
    cat /proc/sys/fs/inotify/max_queued_events      #监控事件队列
    cat /proc/sys/fs/inotify/max_user_instances     #最多监控实例数
    cat /proc/sys/fs/inotify/max_user_watches       #每个实例最多监控文件数
    
    vim /etc/sysctl.conf         #加大每个参数
    fs.inotify.max_queued_events = 16384
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
    #当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值
    
    sysctl -p      #刷新
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    在这里插入图片描述

    安装inotify

    yum -y install gcc gcc-c++ 
     
    #放入安装包
    tar xf inotify-tools-3.14.tar.gz -C /opt
    cd /opt/inotify-tools-3.14/
    ./configure
    make && make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述

    #编写同步触发脚本
    vim /opt/inotify.sh
    #!/bin/bash
    INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/testinotify/"
    RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/testinotify/ xiayan@192.168.48.14::wwwroot"
     
    $INOTIFY_CMD | while read DIRECTORY EVENT FILE
    do
        if [ $(pgrep rsync | wc -l) -le 0 ] ; then
            $RSYNC_CMD
    	fi
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    cd /opt/
    mkdir testinotify 
    chmod +x inotify.sh 
    ./inotify.sh 
    touch 1111.txt
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在这里插入图片描述
    在192.168.48.14机器上将群组修改为root
    在这里插入图片描述
    再次写入文件
    在这里插入图片描述
    在进行实时同步时,脚本文件需要一直运行,否则无法监控文件目录是否发生改变
    在这里插入图片描述

    在这里插入图片描述

    六.总结

    rsync的特点
    能够镜像保存整个目录树和文件系统。
    能够很容易作到保持原来文件的权限、时间、软硬连接等等。
    无须特殊权限便可安装。
    快速:第一次同步时 rsync 会复制所有内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程当中能够实行压缩及解压缩操做,所以可使用更少的带宽。
    安全:可使用scp、ssh等方式来传输文件,固然也能够经过直接的socket链接。
    支持匿名传输,以方便进行网站镜象。
    rsync的优势与不足
    **优势: **

    • 与传统的cp、tar备份方式相比,rsync具备安全性高、备份迅速、支持增量备份等优势,经过rsync能够解决对实时性要求不高的数据备份需求,例如按期的备份文件服务器数据到远端服务器,对本地磁盘按期作数据镜像等。
      缺点:

    • 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了不少不足,首先,rsync同步数据时,须要扫描全部文件后进行比对,进行差量传输。若是文件数量达到了百万甚至千万量级,扫描全部文件将是很是耗时的。并且正在发生变化的每每是其中不多的一部分,这是很是低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它能够经过linux守护进程的方式进行触发同步,可是两次触发动做必定会有时间差,这样就致使了服务端和客户端数据可能出现不一致,没法在应用故障时彻底的恢复数据。

    PS:inotify 安装在哪个服务器上,就由哪个服务器上传到另外一个服务器,需在另外一个服务器配置rsync配置文件

  • 相关阅读:
    网络面试-0x04 DNS协议以及查询过程?
    C++友元函数声明顺序
    【NowCoder】左程云-设计getMin功能的栈
    nodejs下载慢问题
    FTP服务器移植到Linux开发板
    公益校园网页制作 大学生网页设计作业 HTML CSS公益网页模板 大学生校园介绍网站毕业设计
    Java学习笔记——接口
    c++的可见性,有序性与原子性
    【Machine Learning】17.多分类问题
    抖音矩阵系统,抖音矩阵系统源码定制 tell me
  • 原文地址:https://blog.csdn.net/weixin_44175418/article/details/125611741