zoukankan      html  css  js  c++  java
  • linux运维、架构之路-实时同步方案

    一、inotify+rsync实时同步

    1、介绍

            inotify-tools是一种强大的、细粒度的、异步的文件系统事件监控机制,可以用来监控文件系统的事件。inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。

    2、实现原理

    3、根据原理进行部署

    ①查看系统是否支持inotify

    [root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/
    -rw-r--r-- 1 root root 0 Aug 22 18:13 max_queued_events
    -rw-r--r-- 1 root root 0 Aug 28 14:30 max_user_instances
    -rw-r--r-- 1 root root 0 Aug 22 18:13 max_user_watches

    ②软件安装

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo    #安装epel源才可以yum安装inotify
    yum install -y inotify-tools

    测试监控事件create、delete、close_write、moved_to、moved_from,定义inotify监控命令参数

    inotifywait -mrq -e create,delete,moved_to,close_write --format '%w%f' /data
    #/data为监控的目录

    编写脚本让rsync与inotify服务结合实现实时同步

    cat >>inotify.sh <<EOF
    #!/bin/sh
    /usr/bin/inotifywait -mrq --format “%w%f” -e moved_to,delete,create,close_write /data|while read line
    do
       rsync -az --delete /data/  rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
    done
    EOF

    ⑤inotify优化

    [root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/
    -rw-r--r-- 1 root root 0 Aug 22 18:13 max_queued_events   #设置监控服务实例可以监控的事件的个数
    -rw-r--r-- 1 root root 0 Aug 28 14:30 max_user_instances  #设置用户可以开启的服务进程数
    -rw-r--r-- 1 root root 0 Aug 22 18:13 max_user_watches    #可以监控的最大文件数
    优化参数调整:
    echo “50000000” >/proc/sys/fs/inotify/max_user_watches
    echo “50000000” >/proc/sys/fs/inotify/max_queued_events

    ⑥inotifywait命令参数

    参数名称

    参数说明

    -m,--monitor *****

    始终保持事件监听状态

    -r,--recursive *****

    递归监控目录数据信息变化

    -q,-quiet    *****

    输出信息少(只打印事件信息)

    --exclude

    排除文件或目录时,不区分大小写

    --timefmt     *****

    指定时间输出格式

    --format      *****

    打印使用指定的输出类似格式字符串,实际监控输出的内容

    -e           *****

    指定监听的事件,如果省略,表示所有事件都进行监听

     ⑦inotifywait events监控事件

    事件名称

    事件说明

    access

    文件或目录内容被读取

    modify

    文件或目录内容被写入

    attrib

    文件或目录属性改变

    close_write   *****

    文件或目录关闭,在写入模式打开之后关闭

    chose_nowrite

    文件或目录关闭,在只读模式打开之后关闭的

    close

    文件或目录关闭,不管读或写模式

    open

    文件或目录被打开

    moved_to

    文件或目录被移动到监控的目录中

    moved_from

    文件或目录被移动从监控的目录中

    move   *****

    文件或目录不管移动或是移动出监控目录都触发事件

    create   *****

    文件或目录创建在监控的目录中

    delete

    文件或目录被删除在监控的目录中

    二、sersync实时同步

    1、介绍

            数据同步就必然会想到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输。针对数据实时同步需求大多数人会选择rsync+inotify-tools的解决方案,但是这样的方案也存在一些缺陷,sersync是国人基于前两者开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。https://github.com/wsgzao/sersync官方资料

    2、sersync优点

    ①sersync对linux系统文件系统产生的临时文件和重复的文件操作进行过滤所以在结合rsync同步的时候,节省了运行时耗和网络资源,因此更快。

    ②相比较inotify+rsync,sersync配置起来简单,bin目录下已经有基本上静态编译的2进制文件,配合bin目录下的xml配置文件直接使用即可。

    ③另外sersync相比较其他脚本开源软件,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

    ④sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。

    ⑤自带crontab功能,只需在xml配置文件中开启,即可按要求,隔一段时间整体同步一次,无需再额外配置crontab功能。

    ⑥sersync有socket与http插件扩展,满足二次开发的需要

    3、实现原理图

    4、sersync服务部署

    ①软件下载安装

    https://github.com/wsgzao/sersync
    cd /server/tools/
    unzip sersync_installdir_64bit.zip 
    mv sersync_installdir_64bit /usr/local/sersync
    cd /usr/local/sersync/
    mv sersync/* ./
    rm sersync/ -rf
    chmod +x /usr/local/sersync/bin/sersync
    cp conf/confxml.xml  conf/confxml.xml.bak

    ②修改配置文件

    ③启动sersync服务

    /usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml

    5、高并发场景无分布式存储实时同步解决方案

    ①inotify(sersync)+rsync 系统文件级别

    ②drbd文件系统级别

    ③第三方软件的同步功能 mysql同步,oracle,mongodb

    ④业务上,通过程序双写

    ⑤弃用nfs方案

    成功最有效的方法就是向有经验的人学习!
  • 相关阅读:
    算法
    autoreleasepool和weak
    记录一下锁如何使用
    RunLoop相关知识
    NSTimer内存泄漏的解决方案
    ARC下block循环引用的解决方式
    MGJRouter源码解析及使用方法
    Instruments 中Time Profile的使用
    NSFileManager的基本使用
    Runtime相关知识
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/7452793.html
Copyright © 2011-2022 走看看