zoukankan      html  css  js  c++  java
  • inotify+rsync双机热备

    随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!
    概念解释:
    主程序服务器:被同步的服务器,此服务器应用的修改会被同步到副程序服务器上。
    副程序服务器:主程序服务器上的应用数据会同步到此服务器上。

    主程序服务器篇

    1、安装inotify

    由于inotify的特性需要Linux内核支持,首页要确认Linxu内核是否在2.6.13以上。执行命令返回内核版本号。如下:

    [root@iZ2zehpcbm147hy691ow2yZ ~]# uname -r
    3.10.0-327.22.2.el7.x86_64

    执行如下命令返回3项输出则表示支持inotify:

    [root@iZ2zehpcbm147hy691ow2yZ ~]# ll /proc/sys/fs/inotify
    total 0
    -rw-r--r-- 1 root root 0 Apr  1 15:35 max_queued_events
    -rw-r--r-- 1 root root 0 Apr  1 15:35 max_user_instances
    -rw-r--r-- 1 root root 0 Apr  1 15:35 max_user_watches

     如果支持可到https://sourceforge.net/projects/inotify-tools/ 下载inotify,然后开始安装:

    [root@iZ2zehpcbm147hy691ow2yZ ~]# tar zxvf inotify-tools-3.13.tar.gz 
    [root@iZ2zehpcbm147hy691ow2yZ ~]# cd inotify-tools-3.13
    [root@iZ2zehpcbm147hy691ow2yZ inotify-tools-3.13]# ./configure
    [root@iZ2zehpcbm147hy691ow2yZ inotify-tools-3.13]# make && make install

    安装完成后会生成inotifywait和inotifywatch两个指令,可执行如下命令查看是否安装成功:

    [root@iZ2zehpcbm147hy691ow2yZ ~]# ll /usr/local/bin/inotifywa*
    -rwxr-xr-x 1 root root 52547 Apr  1 16:11 /usr/local/bin/inotifywait
    -rwxr-xr-x 1 root root 54639 Apr  1 16:11 /usr/local/bin/inotifywatch
    2、运行脚本

    内容如下,注意修改脚本中的rsync配置和ip等动态内容:

    #!/bin/bash
    /usr/local/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib --fromfile '/root/cmd/inorify_dir' |  while read DATE TIME DIR FILE; do
         /usr/bin/rsync  -vzrtopg --progress --delete --owner --group --exclude="data/video" --exclude="data/upload" --password-file=/etc/rsync/yulin_vice_1.pwd /home/wwwroot/yulinapp.com/ root@10.26.98.129::yulin 
    done

    —fromfile是设置inotifywait要监控的目录,而目录信息在/root/cmd/inorify_dir文件中,/root/cmd/inorify_dir文件内容如下;

    /home/wwwroot/yulinapp.com/
    @/home/wwwroot/yulinapp.com/data/upload/
    @/home/wwwroot/yulinapp.com/data/video/

    一行一条目录数据,带@为不监控的目录。上示文件中的意思是监控/home/wwwroot/yulinapp.com/目录下的文件变化,排除/home/wwwroot/yulinapp.com/data/upload/目录和/home/wwwroot/yulinapp.com/data/video/

    • -password-file是设置副程序服务器rsync的密码文件路径;
    • -exclude是设置rsync不需要同步的文件或目录;
    • /home/wwwroot/yulinapp.com/ 为主程序服务器要同步的目录;
    • root 为副程序服务器rsync的用户;
    • 59.110.7.21 为副程序服务器的IP,如是同一内网可写内网IP;
    • yulin为副程序服务器上的模块名

    此脚本要设置成开机自启动

    可能出现的问题:

    正常的运行inotifywait监控后屏上会显示如下信息:

    Setting up watches.  Beware: since -r was given, this may take a while!
    Watches established.

    如果是只显示:

    Setting up watches.  Beware: since -r was given, this may take a while!

    其实是没有开始监控的,原因可能是目录文件太大,如此次监控鱼邻服务器的项目目录时OSS目录并没有排除,因此一直没有出现开始监控的信息,后把OSS目录排除后就可以正常监控了

    副服务器篇

    启动rsync

    副服务器当中要启动rsync,并且在配置文件rsyncd.conf模块配置中要设置成read only = no。
    rsync也要设置成开机自启动

  • 相关阅读:
    linux 下常用命令
    Mysql 数据库几种引擎的区别比较
    java 中使用ajax调用后台方法注意事项
    C# HtmlDocument和HtmlNode的使用以及节点的模糊查询
    Visio 保存卡死解决办法
    java outterLoop跳出多重循环用法以及详解
    webapi 文件下载输出接口
    获取web.config 内的值
    xml的读取(曾删改)
    from 验证
  • 原文地址:https://www.cnblogs.com/ouruola863/p/9303764.html
Copyright © 2011-2022 走看看