• Rsync远程同步+inotify监控


    一、rsync是什么?

    一款快速增量备份工具

    • Remote Sync ,远程同步

    • 支持本地复制,或者其它SSH、rsync主机同步。

    • 官方网站:https://rsync.samba.org/

    rsync复制时的原理

    • 首先将源文件和目标位置的文件对比,找出差异部分
    • 根据目标位置的文件与源文件差异的部分,进行一致性同步

    2、rsync同步源

    rsync同步源:指的就是备份操作的远程服务器,也称备份源。

    例如

    • A服务器同步B服务器的数据,B服务器就是备份源,相反,一样。
      在这里插入图片描述

    3、配置rsync源

    基本思路

    • 建立rsync.conf配置文件、独立的账户文件
    • 启用rsync的 --daemon(守护进程)模式

    配置文件/etc/rsync/rsyncd.conf

    • 认证配置auth users、secrets file ,不加则为匿名

    独立的账号文件

    • 文件位置可在配置文件中定义
    • 格式: 用户名:密码
    • 每一行一个用户记录
    • 独立的账号数据,不依赖系统账号

    启动rsync服务

    • 通过–daemon独自提供服务,rsync–daemon
    • 执行kill(cat /var/run/rsyncd.pid)关闭服务

    4、rsync命令

    • 命令使用语法
    rsync 【选项】 原始位置  目标位置
    
    • 1
    • 常用选项
    选项功能
    -a规章模式,递归并保留对象属性,等同于-rlptgoD
    -v显示同步过程信息
    -z在传输过程中进行压缩
    -H保留硬链接文件
    -A保留ACL属性信息
    –delete删除目标位置有,而同步源中没有的文件
    根据对象的校验和来决定是否跳过文件

    5、配置源的两种表达方式

    格式一

    用户名@主机地址::共享模块名  本地目录
    
    例如:rsync -avz backuper@20.0.0.55::wwwroot /data
    #表示将20.0.0.55同步源的wwwroot模块中定义的文件同步到本地的/data目录
    
    • 1
    • 2
    • 3
    • 4

    格式二

    rsync://用户名@主机地址/共享模块名 本地目录
    
    例如:rsync -avz rsync://ydq@20.0.0.55/wwwroot /root
    #意思与上面一样,写法不同
    
    • 1
    • 2
    • 3
    • 4

    二、rsync实验

    1、本地复制

    rsync -avz /abc /opt 
    #复制整个abc目录
    
    rsync -avz /abc/ /opt 
    #复制abc目录下的文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    image-20220823215422017 image-20220823215537269

    1.1 本地复制的"妙用"

    对一个目录下所有文件删除时,我们可以使用rm -rf 进行删除,但是rm -rf 是需要对文件进行遍历的。比较消耗资源,所以我们可使用–delete进行本地删除。

    这种办法,对资源的消耗较少。

    在这里插入图片描述

    2、异地复制

    配置环境

    主机名操作系统ip地址所需软件
    rsynccentos720.0.0.55rsync
    clientcentos720.0.0.56rsync

    2.1 rsync服务器配置

    关闭防火墙、核心防护、下载更新rsync服务

    systemctl stop firewall
    systemctl disbale firewalld
    setenforce 0
    yum -y install rsync
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    修改配置文件

    vim /etc/rsyncd.conf 
     
    uid = root
    gid = root
    use chroot = yes                                                
    address = 20.0.0.55
    port 873                                                                
    log file = /var/log/rsyncd.log                  
    pid file = /var/run/rsyncd.pid                  
    hosts allow = 20.0.0.0/24
    [wwwroot]                                                               
    path = /var/www/html                                    
    comment = Document Root of www.lic.com
    read only = yes                                                  
    dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z        
    auth users = ydq                                               
    secrets file = /etc/rsyncd_users.db
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    设置密码文件、并开启rsync服务

    vim /etc/rsyncd_users.db
    ydq:123
     
    chmod 600 /etc/rsyncd_users.db
     
    rsync --daemon
    netstat -natp | grep rsync
    
    -------------------------------
    如果要关闭服务可以使用以下命令
    kill $(cat /var/run/rsync.pid)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    创建共享文件,也就是源文件

    mkdir -p /var/www/html
    chmod +r /var/www/html
    cd /var/www/html
    echo "yudeqiang">ydq.txt
    echo "zhouxingchi">zxc.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    2.2 rsync客户端配置

    关闭防火墙、核心防护、修改主机名

    在这里插入图片描述

    2.2.1 普通同步

    创建目录,完成共享

    rsync -avz ydq@20.0.0.55::wwwroot /abc
    
    • 1

    在这里插入图片描述

    2.2.2 免密同步
    vim /etc/server.pass
    123
    
    chmod 600 /etc/server.pass
    rsync -avz --password-file=/etc/server.pass ydq@20.0.0.55::wwwroot /abc
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    2.2.3 --delete选项的用法
    rsync -avz -delete --password-file=/etc/server.pass ydq@20.0.0.55::wwwroot /abc
    
    • 1

    在这里插入图片描述

    三、inotify简介

    1、inotify介绍

    可以监控文件系统的变动情况,并作出通知响应

    • 可以调整inotify内核参数(优化)
    vim /etc/sysctl.conf(内核参数文件)
    max_queue_events    	#监控事件队列大小
    max_user_instances  	#最多监控实例数
    max_user_watches    	#每个实例最多监控文件数  
    
    #命令工具
    inotifywait     #用于持续监控,时实输出结果
    inotifywatch    #用于短期监控,任务完成后再输出结果
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    常用选项

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

    2、rsync+inotify实现配置

    2.1 rsync服务器配置

    修改配置文件

    vim /etc/rsyncd.conf
    read only = no
    
    kill (cat /var/run/rsyncd.pid)
    rsync --daemon
    netstat -natp |grep rsync
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    修改内核文件(一个优化操作)

    vim /etc/sysctl.conf
    
    fs.inotify.max_queued_events = 32768
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
    
    sysctl -p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    2.2 client端配置

    安装inotif安装包

    yum -y install gcc gcc-c++
    
    cd /opt
    tar -zxvf inotify-tools-3.14.tar.gz
    cd 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 /abc"
    RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /abc/ ydq@20.0.0.55::wwwroot"
     
    $INOTIFY_CMD | while read DIRECTORY EVENT FILE
    do
        if [ $(pgrep rsync | wc -l) -le 0 ] ; then
            $RSYNC_CMD
    	fi
    done
    
    #脚本解释
    先定义一个变量为监控这个目录中是否创建、删除、移动、修改、属性等信息的变化
    再定义一个变量为rsync同步,将/abc中的目录中的信息同步到rsync服务器中的指定目录
    再编写一个while循环,先执行监控变量,再执行while循环,
    循环内容为,读取目录事件文件,如果rsync进程同步操作不存在,则执行同步操作的变量。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    chmod +x /opt/inotify.sh
    ./inotify.sh
    
    ---------------#加入自启动-----------------------
    chmod +x /etc/rc.d/rc.local
    echo "/opt/inotify.sh" >>/etc/rc.d/rc.local
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    2.3 client端验证

    在这里插入图片描述

    四、总结

    优点

    • 可以时实

    缺点

    • 带宽特别充裕的情况下,rsync同步的速率比scp要慢

    • 同步百万级数据,参数严格要按要求去写,不然可能导致同步失败。

  • 相关阅读:
    nodejs 简单介绍一下四种流(stream)的知识
    怎么批量把图片转文字?教你几招轻松完成
    Django系列3-Django常用命令
    JDK 中的 XML API
    docker镜像run后 ps命令查不到解决办法;docker 容器显示exit(1)
    螺旋矩阵[中等]
    常用应届生Java开发笔试面试题(更新中)
    FANUC机器人_通过ROBOGUIDE从零开始做一个离线仿真项目(4)
    【JavaScript】blob
    Node.js 入门教程 11 Node.js 从命令行接收参数
  • 原文地址:https://blog.csdn.net/m0_57515995/article/details/126576572