在Nginx负载均衡中,我们很难保证说每一台应用服务器都能一直正常的运行下去。但是我们可以通过设置Nginx来检测这些应用服务器,检测这些服务器当中不能访问的。

Nginx的检测方式分为两种,一种是被动监测,另一种是主动监测。下面我们分别看一下这两种方式。

被动监测

当Nginx认为一台应用服务器不能被访问的时候,它会暂时停止向这台应用上面分发请求。直到Nginx认为该应用服务器可以再次被访问的时候才会再向这台应用服务器上面分发请求。
要实现对应用服务器的监测,需要通过两个参数来帮助。

fail_timeout——该参数表示停止分发请求至该应用服务器的时间。也就是说,如果Nginx认为一台应用服务器不能被访问了,则Nginx就会停止向这台应用服务器上分发请求。那需要多长时间Nginx才会认为该服务器可以被访问从而向其分发请求呢。这就需要通过该参数来设置这个时间了。

max_fails——设置访问失败的最大次数。当Nginx向一台服务器分发请求,如果失败的次数达到该参数设置的数量,则Nginx认为该应用服务器不能访问。在接下来的请求就不会再发给该应用服务器。直到达到fail_timeout设置的时间才会再次向这台应用分发请求。

例一

http {
    upstream onmpw {
        server 192.168.144.128;
        server 192.168.144.132 max_fails=3 fail_timeout=30s;
        server 192.168.144.131 max_fails=2;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://onmpw;
        }
    }
}

对于fail_timeout和max_fails的默认值分别为10s和1次。也就是说,当Nginx向一台应用服务器发送请求,如果失败则认为该应用服务器不可访问。接下来的10s中请求不再分发给该应用服务器。直到10s以后会再次将请求分发给该应用服务器。

对于例一,我们看到对于132应用,当请求失败次数达到3次。Nginx会在30s内不再向该应用分发请求。直到30s以后会再次分发新的请求到该应用服务器上。对于131应用,当请求次数达到2次,Nginx就会在10s内(因为没有设置fail_timeout,所以默认为10s)不再向这台应用发送请求。

这种方式需要我们在每台应用服务器对应的信息后面设置,所以称其为被动监测。

主动监测

由Nginx定期的向每台应用服务器发送特殊的请求,来监测应用服务器是否可以正常访问。这种方式称为主动监测。

为了实现主动监测这种方式,我们需要在Nginx负载均衡的配置文件中加入health_check指令。除此之外,我们还需要在设置应用服务器信息的组里加入zone指令。

例二

http {
upstream onmpw {
           zone onmpw 64k;
        server 192.168.144.128;
        server 192.168.144.132;
        server 192.168.144.131;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://onmpw;
                           health_check;
        }
    }
}

在这里我们设置了一组应用服务器。通过一个单一的location,将所有的请求都分发到这组应用服务器上。在这种情况下,每隔5s Nginx Plus就会向每一台应用服务器发送’/’请求。任何一台应用服务器连接错误或者响应超时亦或者是被代理的服务器响应了一个状态码2xx或者是3xx,health_check机制就会认为是失败的。对于任何一台应用服务器,如果health_check失败,则就会被认为是不稳定的。那么Nginx Plus就不再向这台应用服务器分发访问请求。

zone指令定义了一块儿内存空间。这块儿空间存储在各个工作进程中共享的运行环境的状态和应用服务器组的配置信息。这块儿空间应该根据实际情况尽量申请的大一些,要保证能存下这些信息。

下面我们再看这样的一个例子

例三

location / {
    proxy_pass http://onmpw;
    health_check interval=10 fails=3 passes=2;
}

在上面的例三中,interval=10表示两次进行health_check的间隔为10s,如果不设置默认两次的间隔是5s。fails=3表示一台应用服务器如果请求失败次数达到3次,则该应用服务器被认为不能访问。最后是passes=2表示,被认定为不能访问的服务器需要再次进行两次health_check 以后才会再次被认为是可以正常访问的。

在health_check中,我们可以指定请求的url。

例四

location / {
    proxy_pass http://onmpw;
    health_check uri=/some/path;
}

对于onmpw组中的第一台应用服务器128来说,一次health check请求的url是http://192.168.144.128/some/path。

上面两种监测方式是普遍被使用的,希望本文对大家有所帮助。

Nginx负载均衡health_check分析的更多相关文章

  1. Nginx负载均衡和LVS负载均衡的比较分析(转)

    Nginx负载均衡和LVS负载均衡的比较分析 作者:匿名 来源:ChinaZ源码报导 浏览:1032次 2011-12-6 15:12:27 字号:大 中 小 [摘要]Nginx是一个高性能的 HTT ...

  2. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  3. 解析nginx负载均衡

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://baidutech.blog.51cto.com/4114344/1033718 ...

  4. Nginx 负载均衡-加权轮询策略剖析

    本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更 ...

  5. 浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

    1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...

  6. Nginx负载均衡中后端节点服务器健康检查的操作梳理

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

  7. nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理

    Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能 ...

  8. Haproxy和Nginx负载均衡测试效果对比记录

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  9. Nginx负载均衡中后端节点服务器健康检查的一种简单方式

    摘自:https://cloud.tencent.com/developer/article/1027287 一.利用nginx自带模块ngx_http_proxy_module和ngx_http_u ...

随机推荐

  1. 实用的 鼠标滑上显示提示信息的jq插件

    使用非常简单, 引用 css js文件, 将需要显示提示信息的元素 添加class="tooltip"类名, 在title属性填写提示信息就好了title="啊啊啊啊&q ...

  2. 2018ICPC南京

    可能上一次秦皇岛拿了银,有了偶像包袱? 打的时候感觉状态不是很好. 第一题,让你每次将连续一段区间的石头都拿掉.. 然后让你做个博弈. 橘子一顿分析,认为k+1的倍数都是输. 这时,我们以及默认i+1 ...

  3. [bzoj1084][SCOI2005]最大子矩阵_动态规划_伪·轮廓线dp

    最大子矩阵 bzoj-1084 SCOI-2005 题目大意:给定一个n*m的矩阵,请你选出k个互不重叠的子矩阵使得它们的权值和最大. 注释:$1\le n \le 100$,$1\le m\le 2 ...

  4. 1103 N的倍数

    1103 N的倍数  题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得 ...

  5. ORACLE NOLOGGING研究

    熟悉oracle的人都知道.通过设置oracle的nologging选项,能够使某些操作高速完毕,风险是数据库备份可能失效.能够使用nologging的操作有非常多,搜集资料整理例如以下: 1.索引的 ...

  6. FZU 1851 组合数

    给你两个数n和m,然后让你求组合数C(n,m)中的质因子的个数. 这里用到的一个定理:判断阶乘n!中的质因子 i 的个数的方法---f(n!)=n/i+n/i^2+n/i^3+.....n/i^m ( ...

  7. java开发环境配置(win8 64位)

    自己配置java环境时是自己上网找资料装的,,有讲的好的也有讲的不是很清晰的,,自己也入了几个坑..所以在这里自己整理了下win8配置JDK的教程. 下载JDK 首先我们需要下载java开发工具包JD ...

  8. MVC地区多级联动扩展实现(非递归形式)

    MVC前台界面调用方式如下: @Html.AreaDropDownList(, string.Empty) 参数说明: 第一个参数控件的名称: 第二个参数选中的地区编码: 第三个参数地区层级: 第四个 ...

  9. iOS音频播放之AudioQueue(一):播放本地音乐

    AudioQueue简单介绍 AudioStreamer说明 AudioQueue具体解释 AudioQueue工作原理 AudioQueue主要接口 AudioQueueNewOutput Audi ...

  10. UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)

    UVA 1201 - Taxi Cab Scheme 题目链接 题意:给定一些乘客.每一个乘客须要一个出租车,有一个起始时刻,起点,终点,行走路程为曼哈顿距离,每辆出租车必须在乘客一分钟之前到达.问最 ...