严格来说,nginx是没有针对负载均衡后端节点的健康检查的,但是可以通过proxy_next_upstream来间接实现,但这个还是会把请求转发给故障服务器的,然后再转发给别的服务器,这样就浪费了一次转发。

nginx_upstream_check_module为淘宝技术团队开发的nginx模快,用来检测后方server的健康状态,如果后端服务器不可用,则所以的请求不转发到这台服务器。

1. 安装nginx_upstream_check_module

  • 地址:https://github.com/yaoweibin/nginx_upstream_check_module, 下载完毕后解压
  • 进入nginx源码目录,进行打该模块的补丁(这一步千万不能遗漏)

    patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch
  • 然后通过./configure --add-module来增加模块

    ./configure –add-module=../ nginx_upstream_check_module-master/
    注意:如果之前安装过nginx,需要将之前的configure参数保留
  • make

  • make之后的操作需要注意

    如果nginx第一次安装,直接执行make install即可

      make install

    如果单纯添加模块,不需要install,而是执行以下操作,将打过补丁的nginx二进制文件覆盖/usr/local/nginx/sbin/目录中的文件即可

      cp /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak
      cp /nginx源码目录/objs/nginx /usr/local/nginx/sbin/

2. 配置nginx upstream参数

  • 增加建议配置,后端有8181两个节点

    location /{
    proxy_pass http://cluster;
    }
    upstream cluster {
    server 127.0.0.1:8181;
    server 127.0.0.1:8182;
    #http健康检查相关配置
    check interval=3000 rise=2 fall=3 timeout=3000 type=http;
    #/health/status为后端健康检查接口
    check_http_send "HEAD /health/status HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
    }

    interval: 向后端发送的健康检查包的间隔,单位为毫秒
    rsie: 如果连续成功次数达到rise_count,服务器就被认为是up
    fall: 如果连续失败次数达到fall_count,服务器就被认为是down
    timeout: 后端健康请求的超时时间,单位为毫秒
    type: 健康检查包的类型,支持tcp、ssl_hello、http、mysql、ajp

  • 如果想查看后端服务器实时的健康状态,可以在对应server中增加以下location配置

    location /nstatus {
    check_status;
    access_log off;
    #allow SOME.IP.ADD.RESS;
    #deny all;
    }

3. 查看健康检查状态

  • 通过http://localhost:8080/nstatus 查看,如下图所示,刚开始后端两个节点都处于停止状态,status为down

    server number为后端服务器数量,generation为nginx reload的次数

  • 此时,启动其中一台8181,查看nginx的error.log日志,出现如下日志,说明8181这台应用已经处于可检查状态

    2018/09/07 14:07:48 [error] 85860#0: enable check peer: 127.0.0.1:8181
  • 刷新nstatus页面,如下图所示,发现8181这台状态变为了up,表示已连接成功

  • 启动8182,与8181过程相同,最终页面状态变为如下,此时两台状态均为up:

Nginx实战-后端应用健康检查的更多相关文章

  1. Nginx实战系列之功能篇----后端节点健康检查(转)

    公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_m ...

  2. Nginx实战系列之功能篇----后端节点健康检查

    目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)    官网地址: ...

  3. nginx高性能WEB服务器系列之六--nginx负载均衡配置+健康检查

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  4. 23、nginx动态添加nginx_upstream_check_module健康检查模块

    nginx_upstream_check_module模块地址:https://github.com/yaoweibin/nginx_upstream_check_module 23.1.说明: 1. ...

  5. nginx后端节点健康检查

    一.nginx健康检查的三种方式 .ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/en/d ...

  6. Nginx负载均衡之健康检查

    负载均衡实例 http{ upstream myserver { server 10.10.10.1 weight=3 max_fails=3 fail_timeout=20s; server 10. ...

  7. nginx下后端节点realserverweb健康检测模块ngx_http_upstream_check_module

    本文章收录做资料使用,非本人原创,特此说明. 公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列 ...

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

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

  9. nginx之健康检查

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

随机推荐

  1. POI2015 解题报告

    由于博主没有BZOJ权限号, 是在洛咕做的题~ 完成了13题(虽然有一半难题都是看题解的QAQ)剩下的题咕咕咕~~ Luogu3585 [POI2015]PIE Solution 模拟, 按顺序搜索, ...

  2. 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据

    使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...

  3. @Scheduler与cron

  4. Aizu 0525 Osenbei 搜索 A

    Aizu 0525 Osenbei https://vjudge.net/problem/Aizu-0525 题目: IOI製菓では,創業以来の伝統の製法で煎餅(せんべい)を焼いている.この伝統の製法 ...

  5. Java面试题4

    一.JAVA基础篇-概念1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机(A ...

  6. 如何将已有的本地Git 库推送到远端仓库?

    以Github 为例 step 1. 在Github建立一个空的仓库 Step 2. 建立远端仓库的别名 >$ git remote add origin https://github.com/ ...

  7. 使用ILMerge 打包C# 绿色免安装版程序

    使用ILMerge工具,将C#项目debug目录下的exe及其依赖的dll文件打包成一个exe文件,直接双击就可运行. 使用工具: ILMerge :http://www.microsoft.com/ ...

  8. 解决“UnicodeEncodeError: 'gbk' codec can't encode character u'\xa9' in position 24051: illegal multibyte sequence”错误

    今天我在爬取一个网页时出现了下面这个错误: UnicodeEncodeError: 'gbk' codec can't encode character u'\xa9' in position 240 ...

  9. rabbitmq基础学习+springboot结合rabbitmq实现回调确认confirm

    rabbitmq集群docker快速搭建 https://blog.csdn.net/u011058700/article/details/78708767 rabbitmq原理博客 https:// ...

  10. Spark Graphx

    Graphx    概述        Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求.       ...