• rsync+inotify数据实时同步介绍与实战


    一、rsync概述

    rsync(remote sync)远程同步rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。 rsync监听端口:873,rsync运行模式:C/S

    官网:https://rsync.samba.org/
    官方文档:https://www.samba.org/ftp/rsync/rsync.html
    GitHub地址:https://github.com/WayneD/rsync

    二、rsync优缺点

    1)优点

    • 可以镜像保存整个目录树和文件系统;
    • 可以做到保持原来文件的权限、时间、软硬链接等等;
    • 无须特殊权限即可安装;
    • 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能;
    • 可以使用rcp、ssh等方式来传输文件,rsync本身不对数据加密;
    • 支持匿名传输,可以实现方便安全的进行数据备份和镜像;
    • 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高;
    • 可以通过socket(进程方式)传输文件和数据。

    2)缺点

    • 同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率;
    • rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。

    解决方法:rsync+inotify

    三、rsync+inotify配置与安装

    IP主机名角色
    192.168.0.113k8s-master-168-0-113rsync、 inotify-tools【数据源】
    192.168.0.116k8s-master2-168-0-116rsync【备份节点】

    1)rsync安装

    yum -y install rsync
    
    • 1

    2)rsync配置

    cat >/etc/rsyncd.conf<<EOF
    uid = root
    gid = root
    #禁锢在源目录
    use chroot = yes
    #监听地址,在另外的机器上,记得修改			
    address = 192.168.0.113
    #监听地址tcp/udp 873,可通过cat /etc/services | grep rsync查看					
    port 873
    #日志文件位置
    log file = /var/log/rsyncd.log
    #存放进程 ID 的文件位置
    pid file = /var/run/rsyncd.pid
    #允许访问的客户机地址
    hosts allow = 192.168.0.0/16
    #共享模块名称
    [nfsdata]
    #源目录的实际路径											
    path = /opt/nfsdata
    comment = Document Root of www.kgc.com
    #指定客户端是否可以上传文件,默认对所有模块为 true
    read only = false
    #同步时不再压缩的文件类型
    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
    #授权账户,多个账号以空格分隔,不加则为匿名,不依赖系统账号
    auth users = backuper
    #存放账户信息的数据文件
    secrets file = /etc/rsyncd_users.db
    EOF
    
    • 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

    rsyncd.conf 常用参数详解

    rsyncd.conf 参数参数说明
    uid=rootrsync 使用的用户。
    gid=rootrsync 使用的用户组(用户所在的组)
    use chroot=no如果为 true,daemon 会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系
    max connections=200设置最大连接数,默认 0,意思无限制,负值为关闭这个模块
    timeout=400默认为 0,表示 no timeout,建议 300-600(5-10 分钟)
    pid filersync daemon 启动后将其进程 pid 写入此文件。如果这个文件存在,rsync 不会覆盖该文件,而是会终止
    lock file指定 lock 文件用来支持“max connections”参数,使得总连接数不会超过限制
    log file不设或者设置错误,rsync 会使用 rsyslog 输出相关日志信息
    ignore errors忽略 I/O 错误
    read only=false指定客户端是否可以上传文件,默认对所有模块为 true
    list=false是否允许客户端可以查看可用模块列表,默认为可以
    hosts allow指定可以联系的客户端主机名或和 ip 地址或地址段,默认情况没有此参数,即都可以连接
    hosts deny指定不可以联系的客户端主机名或 ip 地址或地址段,默认情况没有此参数,即都可以连接
    auth users指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认为所有用户无密码访问
    secrets file指定用户名和密码存放的文件,格式;用户名;密码,密码不超过 8 位
    [backup]这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护
    path这个模块中,daemon 使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题
    配置/etc/rsyncd_users.db,跟auth users对应
    cat >/etc/rsyncd_users.db<<EOF
    backuper:123456
    EOF
    #官方要求,必须赋权600,要不然会有问题
    chmod 600 /etc/rsyncd_users.db
    
    • 1
    • 2
    • 3
    • 4
    • 5

    rsync常用命令参数详解

    rsync --help
    
    rsync [选项]  原始位置   目标位置
    
    常用选项				说明
    -r				递归模式,包含目录及子目录中的所有文件
    -l				对于符号链接文件仍然复制为符号链接文件
    -v				显示同步过程的详细信息
    -z				在传输文件时进行压缩goD
    -p				保留文件的权限标记
    -a				归档模式,递归并保留对象属性,等同于-rlpt
    -t				保留文件的时间标记
    -g				保留文件的属组标记(仅超级用户使用)
    -o				保留文件的属主标记(仅超级用户使用)
    -H				保留硬链接文件
    -A				保留ACL属性信息
    -D				保留设备文件及其他特殊文件
    --delete		删除目标位置有而原始位置没有的文件
    --checksum		根据对象的校验和来决定是否跳过文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3)启动rsync服务

    rsync --daemon --config=/etc/rsyncd.conf
    netstat -tnlp|grep :873
    
    • 1
    • 2

    4)测试验证

    # 在192.168.0.116节点上测试手动同步
    # 从远端【拉取】数据
    rsync -avz root@192.168.0.113:/opt/nfsdata/* /opt/nfsdata/
    
    # 在192.168.0.113节点上测试手动同步
    # 从【推送】数据
    rsync -avz /opt/nfsdata/* root@192.168.0.116:/opt/nfsdata/
    
    ### 在192.168.0.116节点上测试手动同步,通过【拉取】数据,配置文件配置的模块,这里走的是rsync协议,上面走的是ssh协议,只要做了免密就直接推送或拉取数据了。这里就会用到配置文件里配置的users用户了,也是secrets file文件里配置的其中一个用户。
    #【方式一】
    rsync -avz backuper@192.168.0.113::nfsdata /opt/nfsdata/
    # 【方式二】
    rsync -avz rsync://backuper@192.168.0.113/nfsdata /opt/nfsdata/
    
    # 在192.168.0.113节点上执行
    ###【推送】
    #【方式一】非交互式,/opt/backuper.pass文件是backuper用户的密码,且文件权限600
    rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.113::nfsdata
    # 【方式二】
    rsync -avz /opt/nfsdata/* rsync://backuper@192.168.0.113/nfsdata 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

    5)编译安装 inotify-tools

    1、inotify-tools概述

    • inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

    • linux内核从 2.6.13 起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

    • inotify可用于检测单个文件,也可以检测整个目录。当检测的对象是一个目录的时候,目录本身和目录里的内容都会成为检测的对象。

    在192.168.0.113机器上安装

    2、优化inotify内核参数

    /proc/sys/fs/inotify目录下有max_queued_events、max_user_instances、max_user_watches这三个文件

    • max_queued_events:表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件;

    • max_user_instances:表示每一个用户可创建的inotify instatnces的数量上限,默认128

    • max_user_watches:表示同一用户同时可以添加的watch数量。

    echo 65535 > /proc/sys/fs/inotify/max_user_instances
    echo 99999999 > /proc/sys/fs/inotify/max_queued_events
    echo 99999999 > /proc/sys/fs/inotify/max_user_watches
    
    • 1
    • 2
    • 3

    3、inotify-tools下载

    # 安装inotify-tools之前,先安装一下automake和libtool这两个依赖,不然编译安装inotify-tools的时候会报错。
    yum install automake libtool -y
    
    # 当然也得安全编译工具
    yum -y install gcc gcc-c++ make wget
    
    mkdir  /opt/software ; cd /opt/software
    wget --no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
    
    # 解压
    tar -zxvf inotify-tools-3.14.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4、inotify-tools编译安装

    cd /opt/software/inotify-tools-3.14
    # 编译安装
    ./configure && make && make install
    
    • 1
    • 2
    • 3

    5、编写触发式同步脚本

    vi /opt/software/inotify-tools-3.14/inotify_rsync.sh
    
    #!/bin/bash
    #监听/opt/nfsdata/ 目录:
    #INOTIFY_CMD变量:持续监控 /opt/nfsdata/ 目录中的创建,删除,移动,修改,改变时间的操作
    INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/nfsdata"
    # 注意/tmp/user.pass文件里只有backuper对应的密码,而且文件权限只能是600
    RSYNC_CMD="rsync -avzH --delete --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.116::nfsdata"
    
    $INOTIFY_CMD | while read DIRECTORY EVENT FILE
    do
         $RSYNC_CMD
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    inotifywait命令常用参数:
    在这里插入图片描述
    执行

    cd /opt/software/inotify-tools-3.14/
    chmod +x inotify_rsync.sh
    # 启动脚本
    nohup ./inotify_rsync.sh &
    
    • 1
    • 2
    • 3
    • 4

    rsync+inotify数据实时同步介绍与实战就到这里了,有疑问的小伙伴欢迎给我留言哦~

  • 相关阅读:
    留存怎么算?
    web环境实现一键式安装启动
    危化企业双重预防机制数字化建设进入全面实施阶段
    软件测试13年从业经验的前辈,总结的5条测试就业建议....
    leetcode top100 (9)找到字符串中所有字母异位词
    解析字符串后分组写成多文件
    ARMv8 cache的包含策略inclusive 和 exclusive之间的区别以及Cortex-A55示例详解
    二叉树(上)
    Python~Pandas 小白避坑之常用笔记
    Reset信号如何同步?
  • 原文地址:https://blog.csdn.net/qq_35745940/article/details/125570596