zoukankan      html  css  js  c++  java
  • 让keepalived监控NginX的状态

    经过前面的配置,如果主服务器的keepalived停止服务,从服务器会自动接管VIP对外服务;一旦主服务器的keepalived恢复,会重新接管VIP。 但这并不是我们需要的,我们需要的是当NginX停止服务的时候能够自动切换。

    keepalived支持配置监控脚本,我们可以通过脚本监控NginX的状态,如果状态不正常则进行一系列的操作,最终仍不能恢复NginX则杀掉keepalived,使得从服务器能够接管服务。

    如何监控NginX的状态

    最简单的做法是监控NginX进程,更靠谱的做法是检查NginX端口,最靠谱的做法是检查多个url能否获取到页面。

    如何尝试恢复服务

    如果发现NginX不正常,重启之。等待3秒再次校验,仍然失败则不再尝试。

    根据上述策略很容易写出监控脚本。这里使用nmap检查nginx端口来判断nginx的状态,记得要首先安装nmap。监控脚本如下:

    #!/bin/bash

    # check nginx server status

    NGINX=/usr/local/nginx/sbin/nginx

    PORT=8080

     

    nmap localhost -p $PORT | grep "$PORT/tcp open"

    #echo $?

    if [ $? -ne 0 ];then

        $NGINX -s stop

        $NGINX

        sleep 3

        nmap localhost -p $PORT | grep "$PORT/tcp open"

        [ $? -ne 0 ] && /etc/init.d/keepalived stop

    fi

    不要忘了设置脚本的执行权限,否则不起作用。

    假设上述脚本放在/opt/chk_nginx.sh,则keepalived.conf中增加如下配置:

    主keepalived

    vrrp_script chk_http_port {

        script "/opt/chk_nginx.sh"

        interval 1

        weight -2

    }

     

    track_script {

        chk_http_port

    }

     

     

    例子:

    ! Configuration File for keepalived

     

    global_defs {

       router_id NGINX_UPSTEAM

    }

     

    vrrp_script chk_http_port {

        script "/opt/chk_nginx.sh"

        interval 1

        weight -2

    }

     

    vrrp_instance VI_1 {

        state MASTER

        interface eth0

        virtual_router_id 51

        priority 100

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {

            192.168.1.100

        }

     

        track_script {

        chk_http_port

        }

     

    }

    更进一步,为了避免启动keepalived之前没有启动nginx , 可以在/etc/init.d/keepalivedstart中首先启动nginx:

     

    start() {

        /usr/local/nginx/sbin/nginx

        sleep 3

        echo -n $"Starting $prog: "

        daemon keepalived ${KEEPALIVED_OPTIONS}

        RETVAL=$?

        echo

        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog

    }

  • 相关阅读:
    Windows 8 系列 Block Game 随笔
    Windows 8 系列 仿新浪微博图片放大功能 随笔
    正则总结 随笔
    Windows 8 系列 GirdView 滚动事件获取 随笔
    Windows 8 系列 ApplicationSettings 随笔
    Windows 8 系列 Popup 应用 随笔
    JS 写 个简单的 TreeView
    Windows 8 系列 Toast_Title_Badge 随笔
    Js分页条 摆脱JQuery及JQuery分页插件的束缚
    Windows 8 系列 DataTemplateSelector_IValueConverter 随笔
  • 原文地址:https://www.cnblogs.com/lixiansen/p/5602922.html
Copyright © 2011-2022 走看看