当前位置: 首页 > article >正文

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

目录

  • 1. 缘起
  • 2. 配置指令
    • 2.1 check
    • 2.2 check_keepalive_requests
    • 2.3 check_http_send
    • 2.4 check_http_expect_alive
    • 2.5 check_shm_size
    • 2.6 check_status
  • 3. 加载健康检测模块
    • 3.1 模块的编译
    • 3.2 模块的配置
  • 4. 测试验证
  • 5. 思考与问题
  • 6. 源码分析

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. 配置指令


http://www.kler.cn/a/229673.html

相关文章:

  • 微信小程序——创建滑动颜色条
  • Gitlab-Runner配置
  • VMware中Ubuntu如何连接网络?安排!
  • 【hadoop学习遇见的小问题】centos常见配置 添加组用户权限 修改主机名等
  • Android 网络层相关介绍
  • springboot 默认的 mysql 驱动版本
  • pytorch的安装步骤
  • QT Linux下无法使用CTRL+ALT+P快捷键,不生效
  • 华为云账号注销之后账号下的域名丢了怎么办?记录一次域名转移权限的经历
  • Dijkstra算法(求最短路)
  • 算法刷题day06
  • 什么是大模型
  • Python 的 sys 模块常用方法
  • ubuntu开机报错/dev/nume0n1p2:clean
  • 《MySQL》超详细笔记
  • 读写锁ReentrantReadWriteLockStampLock详解
  • XXE基础知识整理(附加xml基础整理)
  • Java——Arrays常用方法
  • C++二维数组
  • jsp商场会员卡管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 远程主机可能不符合 glibc 和 libstdc++ Vs Code 服务器的先决条件
  • vue3项目中的404页面
  • 第4节、电机多段转动【51单片机+L298N步进电机系列教程】
  • 软考21-上午题-数组、矩阵
  • Flutter中的Container小部件介绍与使用
  • 【Linux】线程池