nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析(上)

1. 缘起

众所周知,nginx原生的upstream模块提供了后端服务器的健康检测的功能,但是它的检测方式是被动模式的,被动模式意味着nginx不会主动发起健康检查,只有到客户端请求nginx的时候,nginx被迫需要向上游服务器发起正常的请求,顺便完成后端服务器的健康检测的任务。这种方式对nginx的实现来说是不需要太多额外的健康检测的代码,因此实现比较简单。
但是有利必有弊,一个问题显而易见的问题是,如果有上游服务器中途故障了,但是这次又没有客户端请求路由到该服务器,那么nginx是没法感知的,这样子当有客户端请求过来的时候,自然就有可能路由到该服务器,从而导致请求失败的问题发生,虽然nginx本身也提供了选择下一个上游服务器进行重试的机制,但是不可避免地会导致响应延时的问题出现,影响了用户体验。
同时,被动式健康检测的方案导致健康检测手段也被局限了,因为它是nginx向上游服务器请求的协议。而往往真实业务环境中需要多样化的检测手段,如tcp可连接性探测、http请求探测、ping等等,而nginx显然是没有这方面功能的,这方面haproxy则做得相对比较好,大家有兴趣可以学习一下haproxy的健康检测方面的相关内容。
幸好,作为nginx的一个衍生版本tengine提供了ngx_http_upstream_check_module,为我们提供了upstream上游服务器主动健康检测的手段。利用这个模块提供的功能,我们可以进行tcp、http、ssl握手、ajp、mysql、fastcgi等几种主动检测的手段,我们也可以利用它提供的检测框架,根据业务需要提供自己的其他协议的检测能力,譬如dns检测,或者其他任何你想要的协议类型。
虽然这个模块是在tengine中提供的,但是我们完全可以拿过来,在官方提供的原生nginx版本中进行完美集成,不过由于这个模块加入到原生nginx中会涉及到nginx负载均衡模块的少许变动,本文不进行展开。

2. 配置指令

最近更新

  1. TCP协议是安全的吗?

    2024-02-09 16:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-09 16:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-09 16:54:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-09 16:54:01       20 阅读

热门阅读

  1. Kylin下Qt找不到打印机解决方案

    2024-02-09 16:54:01       24 阅读
  2. C++ 设计模式之观察者模式

    2024-02-09 16:54:01       29 阅读
  3. 浅谈欧拉函数

    2024-02-09 16:54:01       27 阅读
  4. QT基础教程(全系列教程目录)

    2024-02-09 16:54:01       27 阅读
  5. C语言位域(Bit Fields)知识点精要解析

    2024-02-09 16:54:01       20 阅读
  6. 【机器学习】Kmeans如何选择k值

    2024-02-09 16:54:01       25 阅读
  7. 数据结构:栈和队列

    2024-02-09 16:54:01       38 阅读