Nginx健康检查

2023-11-07

0. 背景

服务治理的一个重要任务是感知服务节点变更,完成服务自动注册及异常节点的自动摘除。这就需要服务治理平台能够:及时、准确的感知service节点的健康状况。

1. 方案概述

Nginx 提供了三种HTTP服务健康检查方案供用户选择:

1、TCP层默认检查方案:定时与后端服务建立一条tcp连接,链接建立成功则认为服务节点是健康的。
2、HTTP层默认检查方案:TCP层检查有一定的局限性:

  • 很多HTTP服务是带状态的,端口处于listen状态并不能代表服务已经完成预热;
  • 不能真实反映服务内部处理逻辑是否产生拥堵。
  • 这时可以选择http层健康检查,会向服务发送一个http请求GET /
    HTTP/1.0\r\n\r\n,返回状态是2xx或3xx时认为后端服务正常。

自定义方案:可根据下文描述自定义检查方案。

2. 配置参数详解

一个常用的健康检查配置如下:

check fall=3 interval=3000 rise=2 timeout=2000 type=http;
check_http_expect_alive http_2xx http_3xx ;
check_http_send "GET /checkAlive HTTP/1.0\r\n\r\n" ;

下面针对每个配置参数,进行详细介绍。

2.1 check
check 字段参数如下:

Syntax: check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|http|ssl_hello|mysql|ajp] [port=check_port]
Default: 如果没有配置参数,默认值是:interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp

check 字段各个参数含义如下:

  • interval:向后端发送的健康检查包的间隔。
  • fall(fall_count): 如果连续失败次数达到fall_count,服务器就被认为是down。
  • rise(rise_count): 如果连续成功次数达到rise_count,服务器就被认为是up。
  • timeout: 后端健康请求的超时时间。
  • default_down:
    设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的。
  • type:健康检查包的类型,现在支持以下多种类型
    tcp:简单的tcp连接,如果连接成功,就说明后端正常。
    ssl_hello:发送一个初始的SSL hello包并接受服务器的SSL hello包。
    http:发送HTTP请求,通过后端的回复包的状态来判断后端是否存活。
    mysql: 向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活。
    ajp:向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活。
    port: 指定后端服务器的检查端口。可以指定不同于真实服务的后端服务器的端口,比如后端提供的是443端口的应用,你可以去检查80端口的状态来判断后端健康状况。默认是0,表示跟后端server提供真实服务的端口一样。
    2.2 check_http_expect_alive
    check_http_expect_alive 指定主动健康检查时HTTP回复的成功状态:
Syntax: check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]
Default: http_2xx | http_3xx

2.3 check_http_send
check_http_send 配置http健康检查包发送的请求内容

为了减少传输数据量,推荐采用”HEAD”方法。当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头,如:”HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n”。 同时,在采用”GET”方法的情况下,请求uri的size不宜过大,确保可以在1个interval内传输完成,否则会被健康检查模块视为后端服务器或网络异常。

Syntax: check_http_send http_packet
Default: "GET / HTTP/1.0\r\n\r\n"

3. 完整示例

完整示例,如下:

http {
    upstream cluster1 {
        # simple round-robin
        server 192.168.0.1:80;
        server 192.168.0.2:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
    upstream cluster2 {
        # simple round-robin
        server 192.168.0.3:80;
        server 192.168.0.4:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_keepalive_requests 100;
        check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
    server {
        listen 80;
        location /1 {
            proxy_pass http://cluster1;
        }
        location /2 {
            proxy_pass http://cluster2;
        }
        location /status {
            check_status;
            access_log   off;
            allow SOME.IP.ADD.RESS;
            deny all;
        }
    }
}

4. 参考文档

TEngine:http_upstream_check_cn :http://tengine.taobao.org/document_cn/http_upstream_check_cn.html

Nginx官方文档中文版(不断翻译中) :http://tengine.taobao.org/documentation_cn.html

在这里插入图片描述
在这里插入图片描述

参考链接 :

Nginx健康检查 https://www.jianshu.com/p/ea200de1519b

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx健康检查 的相关文章

  • 服务器---session理论知识

    1 session理论知识 1 1 session何时创建 1 2 session何时销毁 1 session何时创建 Session 机制 session机制是一种服务器端的机制 用来在无状态的HTTP协议下越过多个请求页面来维持状态和识
  • Mac上Pycharm中安装anaconda的pandas和numpy的方法

    1 点击PyCharm菜单栏下的Preferences 2 选择需要安装的project中的Project Interpreter选项 3 选择一个python版本 如红框1 下面会列出已经安装了的Package 这时点击红框2的anaco
  • 【Mac】Mac下SSH免密登录localhost

    1 背景 问题起因参考 mac下ssh 报错 localhost ssh connect to host localhost port 22 Connection refused 为了在MAC上搭建Hadoop standalone 需要配
  • gtx1050ti最稳定的驱动_更新PC电脑的蓝牙驱动方法

    有时候我们需要更新自己的电脑蓝牙版本使我们在特定环境下更好的使用 下面就来讲讲怎么更新蓝牙版本 一 首先我们要查看自己电脑的蓝牙版本 1 右键点击左下方的开始菜单 找到设备管理器 M 2 点开设备管理器 找到蓝牙并右键属性 并查看驱动程序
  • Vue3 中的 @Options,是做什么的?

    Vue3 中的 Options 是做什么的 Options 是个啥 为什么我的项目中会有 Options 或 Component 啥是 类语法风格的组件 Class Style Component Vue Class Component 更
  • 【Hello mysql】 mysql的复合查询 (重点)

    Mysql专栏 Mysql 本篇博客简介 介绍mysql的复合查询 mysql的复合查询 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员 同时还要满足他们的姓名首字母为大写的J 按照部门号升序而雇员的工资降序排序 使用年薪进行
  • MFC之底层窗口实现01(包括windows窗口消息机制)

    1 MFC需要了解的相关概念 1 SDK和API SDK 软件开发工具包 Software Development Kit 一般都是一些被软件工程师用于为特定的软件包 软件框架 硬件平台 操作系统等建立应用软件的开发工具的集合 也称第三方工
  • 【嵌入式学习-C语言篇】 while & for 的使用

    while for 的使用 while for 的常用场景 自动售货机 判断是否存在待处理订单 智能音箱 打印当前搜索到的wifi热点信息 自动售货机 计算当前所有订单的金额 有收入有退款 代码 include
  • Android解析含有键值是汉字的json串

    Android解析含有键值是汉字的json串 今天在接入百度orc识别身份证的功能时 请求成功后 百度返回的json中发现有的键值是中文 我之前没有遇到过这种情况 依然用在之前项目封装的fastjson正常解析json串 结果解析失败 刚开
  • 性能测试二八原则,响应时间2/5/8原则

    性能测试二八原则 响应时间2 5 8原则 所谓响应时间的 2 5 8原则 简单说 就是 当用户能够在2秒以内得到响应时 会感觉系统的响应很快 当用户在2 5秒之间得到响应时 会感觉系统的响应速度还可以 当用户在5 8秒以内得到响应时 会感觉
  • Java视频学习笔记-19-设计模式

    面向对象思想设计原则 单一职责原则 即高内聚低耦合 每个类应该只有一个职责 对外只能提供一种功能 而引起类变化的原因应该只有一个 功能细化 在设计模式中 所有的设计模式都遵循这一原则 开闭原则 对类的改动是通过增加代码进行的 而不是修改现有
  • zlib库使用简单讲解

    1 zlib库简介 zlib 是通用的压缩库 提供了一套 in memory 压缩和解压函数 并能检测解压出来的数据的完整性 integrity zlib 也支持读写 gzip gz 格式的文件 源码网址 http www gzip org
  • C# 字符串

    文章目录 C 字符串操作 1 获取长度 2 查找字符 3 字符串替换 4 字符串截取 5 字符串插入 C 类型转换 1 隐式类型转换 2 显式类型转换 C Convert方法和Parse 方法 1 Parse 2 Convert C 装箱和
  • 【机器学习-西瓜书】第5章 神经网络

    5 1 神经元模型 定义 神经网络是由具有适应性的简单单元组成的 广泛并行互连的网络 其组织能够模拟神武神经系统对真实世界物体所做出的交互反应 这里的简单单元指 神经元neuron 在神经网络中 每个神经元与其他神经元相连 当超过一个 阈值
  • Bash脚本自学 - 变量和位置自变量

    变量 在hellothere sh文件里 bin bash FIRST NAME Herbert LAST NAME Lindemans echo Hello FIRST NAME LAST NAME 在指令行输入 chmod u x he
  • [LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS

    目录 1 Binary Tree Level Order Traversal 二叉树层次遍历 BFS 2 Binary Tree Level Order Traversal II 二叉树层次遍历从低往高输出 BFS 3 Maximum De
  • 如何用dev-c++创建lib(静态链接库)文件

    虽说dev c 适合初学者 但是它的功能还是很强大的 那如何用它制作一个lib 静态链接库 呢 目录 第一步 制作静态链接库 第二步 链接静态链接库 方法一 使用项目 方法二 修改编译选项 第三步 使用库函数 方法一 方法二 第一步 制作静
  • git出现fatal: unable to auto-detect email address (got ‘用户@PC机.(none)’)

    git出现fatal unable to auto detect email address got 用户 PC机 none 解决方法 cd git 进入git中的 git文件夹 找到config vim config 按i进入编辑模式 在
  • Linux入门

    1 1 Linux操作系统简介 Linux是一套免费使用和自由传播的类Unix操作系统 是一个基于POSIX和UNIX的多用户 多任务 支持多线程和多CPU的操作系统 它能运行主要的UNIX工具软件 应用程序和网络协议 它支持32位和64位
  • MP4中同时有逐行、隔行编码视频内容

    公司做了个MP4视频 一部分是逐行的 一个部门是隔行扫描方式 用mediainfo看了下 整个显示视频信息为 Scan Type Interlaced Scan Order TFF 用Stream Eye观看视频 隔行部分如下图 逐行部分

随机推荐

  • Windows Qt设置环境变量

    目录 附 其他相关文章 问题 在Qt软件中新建项目 可以直接构建运行 但是当我们直接双击运行项目构建生成的exe文件时 会提示以下内容 由于找不到 Qt5Core dll 无法继续执行代码 重新安装程序可能会解决此问题 另外 可能还会有Qt
  • 关于vue项目在IE11上遇到的兼容性问题

    1 chunk vendors js语法错误 分析 sockjs client包的语法错误 解决 在vue config js中配置transpileDependencies属性 module exports 打包时将转化成低语法 tran
  • 【Django基础学习】python manage.py inspectdb相关的一些问题和解决方案

    Django 之 inspectdb inspectdb简单介绍 具体用法 在Django项目下 python manage py inspecdb gt your app name models py 作用 众所周知 Django较为适合
  • windows系统中通过 运行(win+R) 的方式打开电脑程序或文件夹

    或许你有这样的经历 在电脑 win系统 中 按下win徽标加R键会弹出 运行对话框 里面输入 notepad mspaint snippingtool等后会出来系统的程序 那么我们如何也这样打开自己的程序 或文件夹呢 从而让桌面变得较为干净
  • AR-虚实融合文献阅读整理(一)

    一 增强现实中虚实融合中光照一致性的研究 http xueshu baidu com s wd paperuri 3A 28e867ba9c51b7d137175268533e46399d 29 filter sc long sign tn
  • PCIe专题学习——2.5(Flow control缓存架构及信用积分)

    之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍 了解了PCIe是一种封装分层协议 packet based layered protocol 主要包括事务层 Transaction layer 数据链路层 Data link lay
  • Ubuntu的gcc卸载与安装

    1 卸载旧版本gcc sudo apt get remove gcc 2 添加软件源 sudo add apt repository ppa ubuntu toolchain r test 3 更新 sudo apt get update
  • FIR与IIR滤波器

    H z 有分母的就是IIR 因为有自环 递归型 一个冲激响应会一直在系统里循环 H z 没有分母的就是FIR 因为没有自环 非递归型 一个冲激响应不会在系统里一直循环 通过H Z 也可简单判断 一般FIR滤波器的系统函数无分母 IIR滤波器
  • 网络爬虫-----初识爬虫

    目录 1 什么是爬虫 1 1 初识网络爬虫 1 1 1 百度新闻案例说明 1 1 2 网站排名 访问权重pv 2 爬虫的领域 为什么学习爬虫 2 1 数据的来源 2 2 爬虫等于黑客吗 2 3 大数据和爬虫又有啥关系 2 4 爬虫的领域 前
  • 用户态和内核态的区别

    一 操作系统需要两种CPU状态 内核态 Kernel Mode 运行操作系统程序 操作硬件 用户态 User Mode 运行用户程序 二 指令划分 特权指令 只能由操作系统使用 用户程序不能使用的指令 举例 启动I O 内存清零 修改程序状
  • 数字电路的时序分析

    记录一下时序分析的学习 首先搞清楚以下时序分析时用到的名词 记录一下时序分析的学习 1 什么是setup time和hold time 为什么需要setup time和hold time 2 时序路径是什么 有哪些时序路径 3 如何分析时序
  • node编写C++扩展文件并引入到项目方案总结

    插入模块 通过Addon实现可扩展接口 可以将C 插入到前端项目中 编写扩展文件 编译扩展 调用扩展 参考 在项目中引入本地模块 1 使用 npm install module1 2 直接修改 package json 字段 增加依赖 3
  • layUI基本使用——布局

    layui特点 1 layui属于轻量级框架 简单美化 是用于开发后端模式 它在服务端页面上有非常好的效果 2 layui是提供给后端开发人员的ui框架 基于DOM驱动 layui的使用 引入layui的核心css文件 引入layui的he
  • 深度学习学习笔记(一):深度学习在图像和视频的应用

    深度学习在图像和视频的应用 文章目录 深度学习在图像和视频的应用 一 图像 视频处理 1 超分辨率问题 2 图像去噪 3 图像增强 3 1 弱光照增强 3 2 动态范围增强 4 质量评价 二 图像 视频压缩 2 1 传统压缩编码框架 2 2
  • java的BigDecimal也会存在丢失精度的问题

    先说结论 务必使用BigDecimal valueOf 1 01 或者使用 new BigDecimal 1 01 而不要使用new BigDecimal 1 01 查看源码可以知道 BigDecimal valueOf double va
  • 七校联合NewStarCTF 公开赛赛道WEEK2 web wp

    也不知道是不是公开赛和内部赛是不是同一套题 week1的题挺简单的 这里小记一下week2的题目 如有侵权立刻删除 Word For You 2 Gen 这题很简单就带过一下吧 报错注入就行 1 updatexml 1 concat 0x7
  • 数据挖掘 决策树算法 ID3 通俗演绎

    决策树是对数据进行分类 以此达到 预测的目的 该决策树方法先根据训练集数据形成决策树 如果该树不能对所有对象给出正确的分类 那么选择一些例外加入到训练集数据中 重复该过程一直到形成正确的决策集 决策树代表着决策集的树形结构 决策树由决策结点
  • Openwrt下设置程序开机自动启动

    转自http www cnyubin com p 364 今天在使用Openwrt时 需要将scp到上面的程序设置为开机自动启动 按照Linux下设置自动启动的方法并不有效 后来在官方wiki下发现了介绍文章 具体可见Openwrt下htt
  • Epoll图解

    图解 Epoll怎么实现的 51CTO COM epoll详解 Ineffable 的博客 CSDN博客 epoll详解
  • Nginx健康检查

    0 背景 服务治理的一个重要任务是感知服务节点变更 完成服务自动注册及异常节点的自动摘除 这就需要服务治理平台能够 及时 准确的感知service节点的健康状况 1 方案概述 Nginx 提供了三种HTTP服务健康检查方案供用户选择 1 T