Nginx的TCP运行时健康检查

2023-11-15

Nginx的TCP运行时健康检查

 

本章介绍如何配置TCP的运行状况检查。

 

介绍

NGINX和NGINX Plus可以持续测试您的TCP上游服务器,避免出现故障的服务器,并可以将恢复的服务器正常地添加到负载平衡组中。

 

先决条件

  • 您已在stream上下文中配置了TCP服务器的上游组,例如:

    stream {
        #...
        upstream stream_backend {
        server backend1.example.com:12345;
        server backend2.example.com:12345;
        server backend3.example.com:12345;
       }
        #...
    }
  • 您已经配置了将TCP连接传递到服务器组的服务器:

    stream {
        #...
        server {
            listen     12345;
            proxy_pass stream_backend;
        }
        #...
    }

 

被动TCP运行状况检查

如果连接上游服务器的尝试超时或导致错误,NGINX Open Source或NGINX Plus可以将服务器标记为不可用,并在指定的时间内停止向其发送请求。要定义NGINX认为上游服务器不可用的条件,请在server指令中包含以下参数

  • fail_timeout –在指定的连接尝试次数内必须失败的时间,服务器才被视为不可用。另外,NGINX将服务器标记为不可用之后认为服务器不可用的时间。
  • max_fails –在指定时间内NGINX认为服务器不可用的失败尝试次数。

默认值为10秒数和1尝试次数。因此,如果连接尝试超时或在10秒内至少失败一次,NGINX会将服务器标记为10秒钟不可用。该示例显示了如何在30秒内将这些参数设置为2个失败:

upstream stream_backend {
    server backend1.example.com:12345 weight=5;
    server backend2.example.com:12345 max_fails=2 fail_timeout=30s;
    server backend3.example.com:12346 max_conns=3;
}

 

服务器缓慢启动

最近恢复的上游服务器很容易被连接淹没,这可能导致服务器再次标记为不可用。慢速启动允许上游服务器在恢复或可用后将其权重从零逐渐恢复到其标称值。这可以通过slow_start上游server指令的参数来完成:

upstream backend {
    server backend1.example.com:12345 slow_start=30s;
    server backend2.example.com;
    server 192.0.0.1 backup;
}

请注意,如果组中只有一台服务器,则将slow_start忽略该参数,并且永远不会将服务器标记为不可用。慢速启动是NGINX Plus独有的。

 

活动TCP运行状况检查

可以将运行状况检查配置为测试各种故障类型。例如,NGINX Plus可以连续测试上游服务器的响应能力,并避免出现故障的服务器。

NGINX Plus向每个上游服务器发送特殊的运行状况检查请求,并检查是否满足特定条件。如果无法建立与服务器的连接,则运行状况检查将失败,并且服务器将被视为运行状况不佳。NGINX Plus不会将客户端连接代理到运行状况不佳的服务器。如果为上游组配置了多个运行状况检查,则任何检查失败都会足以使相应的服务器不正常。

要启用主动健康检查:

  1. 指定一个共享内存区域 – NGINX Plus工作进程在其中共享计数器和连接状态信息的特殊区域。将zone指令添加到上游服务器组,并指定区域名称(此处为stream_backend)和内存量(64 KB):

    stream {
        #...
        upstream stream_backend {
            zone   stream_backend 64k;
            server backend1.example.com:12345;
            server backend2.example.com:12345;
            server backend3.example.com:12345;
        }
        #...
    }
  2. 使用以下health_check指令为上游组启用主动运行状况检查:

    stream {
        #...
        server {
            listen        12345;
            proxy_pass    stream_backend;
            health_check;
            #...
        }
    }
  3. 如有必要,使用该health_check_timeout指令减少两次连续运行状况检查之间的超时。该指令将覆盖proxy_timeout运行状况检查的值,因为对于运行状况检查,此超时需要大大缩短:

    stream {
        #...
        server {
            listen               12345;
            proxy_pass           stream_backend;
            health_check;
            health_check_timeout 5s;
        }
    }
  4. 默认情况下,NGINX Plus将运行状况检查消息发送到块中server指令所指定的端口upstream。您可以指定另一个端口进行运行状况检查,这在监视同一主机上许多服务的运行状况时特别有用。要覆盖端口,请指定伪指令的port参数health_check

    stream {
        #...
        server {
            listen               12345;
            proxy_pass           stream_backend;
            health_check         port=12346;
            health_check_timeout 5s;
        }
    }

 

微调TCP运行状况检查

默认情况下,NGINX Plus尝试每秒钟连接到上游服务器组中的每个服务器5 。如果无法建立连接,NGINX Plus会认为运行状况检查失败,将服务器标记为不正常,然后停止将客户端连接转发到服务器。

要更改默认行为,请在health_check伪指令中包含参数:

  • interval– NGINX Plus发送健康检查请求的频率(以秒为5 单位)(默认为秒)

  • passes–服务器必须响应才能被视为健康的连续健康检查次数(默认为  1

  • fails–服务器必须不响应才能被视为不健康的连续健康检查次数(默认为  1

    stream {
        #...
        server {
            listen       12345;
            proxy_pass   stream_backend;
            health_check interval=10 passes=2 fails=3;
        }
        #...
    }

    在此示例中,两次TCP健康检查之间的时间增加到10几秒钟,服务器在3连续失败的健康检查后被视为不健康,并且服务器需要通过2连续检查才能再次被视为健康。

 

“ match {}”配置块

您可以创建自己的测试来验证服务器对运行状况检查的响应。这些测试是通过放置在上下文中的配置块定义的。match {}stream {}

  1. 在级别上,指定块并为其命名,例如:stream {}match {}tcp_test

    stream {
        #...
        match tcp_test {
            #...
        }
    }

    该块将包含步骤3中描述的测试。

  2. health_check通过指定match参数和match块名称,从指令中引用该块:

    stream {
        #...
        server {
            listen       12345;
            health_check match=tcp_test;
            proxy_pass   stream_backend;
        }
        #...
    }
  3. match块中,指定运行状况检查成功的条件或测试。该块可以接受以下参数:

    • send –发送到服务器的文本字符串或十六进制文字(“ / x”后跟两个十六进制数字)
    • expect –服务器返回的数据需要匹配的文字字符串或正则表达式

    这些参数可以以不同的组合使用,但send一次expect最多只能指定一个参数:

    • 如果未指定send或未expect指定参数,则将测试连接到服务器的能力。
    • 如果expect指定了该参数,则期望服务器首先无条件发送数据:
    match pop3 {
        expect ~* "\+OK";
    }
    • 如果send指定了该参数,则预期将成功建立连接并将指定的字符串发送到服务器:
    match pop_quit {
        send QUIT;
    }
    • 如果同时指定sendexpect参数,则参数中的字符串send必须与参数中的正则表达式匹配expect
    stream {
        #...
        upstream   stream_backend {
            zone   upstream_backend 64k;
            server backend1.example.com:12345;
        }
        match http {
            send      "GET / HTTP/1.0\r\nHost: localhost\r\n\r\n";
            expect ~* "200 OK";
        }
        server {
            listen       12345;
            health_check match=http;
            proxy_pass   stream_backend;
        }
    }

    该示例显示,要使运行状况检查通过,必须将HTTP请求发送到服务器,并且服务器的预期结果中包含200 OK指示成功的HTTP响应的信息。

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

Nginx的TCP运行时健康检查 的相关文章

随机推荐

  • Linux定时任务

    Linux定时任务 at命令 语法 at 选项 日期时间 选项 f 指定包含具体指令的任务文件 q 指定新任务的队列名称 l 显示待执行任务的列表 d 删除指定的待执行任务 m 任务执行完成后向用户发送 E mail 日期时间 指定任务执行
  • 通过XSD文件生成JAVA对象

    c Program Files Java jdk1 8 0 101 bin gt xjc exe p io xsd xml encoding UTF 8 xsdTOxml MyField xsd d xsdTOxml Picked up J
  • 如何在uni中实现一个路由守卫

    在uni app中实现路由守卫 可以使用全局的router beforeEach方法来拦截路由导航 以下是一个简单的示例 展示了如何在uni app中实现路由守卫 在上述代码中 我们通过监听beforeRouterEnter事件来实现路由守
  • java.util.LinkedHashMap cannot be cast to Entity

    前后端数据传输转换问题 java util LinkedHashMap cannot be cast to Entity 问题场景 项目前端使用json传输方式 后台接收后对象变成了LinkedHashMap ResponseBody Re
  • 方向包围盒OBB(oriented bounding box)

    制造几何仿真中的碰撞检测通常视为针对刚体对象间的碰撞检测 这样的话可以把非刚体即软体的建模和变形算法对碰撞检测的影响减少到最小 常见成熟的基于包围盒的碰撞检测 box intersection test 算法如 1 沿坐标轴的包围盒AABB
  • Unity3D关于ComputeShader

    由于最近在实验中需要大量循环计算产生网格 所以可能需要GPU的加速 对于compute shader学习下 可能对于做GPU加速有帮助 以下补充修改了转载文章的内容 原文链接 https blog csdn net csharpupdown
  • HTML怎么建立两行四列的li,关于CSS如何实现多行多列布局的方法

    这篇文章主要介绍了CSS实现多行多列的布局的实例代码 需要的朋友可以参考下 1 两列多行 HTML box1 实现两列多行布局 111 222 333 CSS box1 width 500px background EEEEEE box1
  • fortran求解雷诺方程_方程的计算机处理96(5)_C++vs

    计算机语言运用 数值计算9 方程的计算机处理96 5 C vs 计算机 电子线路组成的计算机器 人与计算机则是通过计算机语言 符号系统说给计算机听而交流 计算机语言有低级语言 机器语言 汇编 高级语言 C C C VB PASCAL LIS
  • 使用yarn搭建Vue,ElementUI,axios环境

    1 搭建vue ElementUI axios环境 1 1 安装yarn 安装yarn npm install g yarn 查看是否安装版本 yarn version yarn切换为国内源 yarn config set registry
  • OSI以及TCP参考模型

    一 网络发展历史 1 1946年第一代计算机网络是以单个计算机为中心的远程联机系统 2 1970年第二代计算机网络是以多个主机通过通信线路互联起来 3 1980年第三代计算机网络是以IOS 国际标准化组织 提出的OSI参考模型为中心的互联网
  • 图像匹配几种常见算法与实践

    奇技 指南 本文主要内容 1 模版匹配 2 特征匹配 3 深度学习去找目标 图像匹配的应用及背景 图像匹配是指通过一定的匹配算法在两幅或多幅图像之间识别同名点 应用 遥感 制图更新 计算机视觉应用程序 医疗用图像注册 图像匹配主要可分为以灰
  • 【STM32 x VScode】如何在vscode上编写stm32程序(固件库函数)

    本人使用keil5也算比较长时间了 但是keil5有个比较大的缺陷就是补全速度太慢 老是用的不太顺手 于是就想着使用万能的vscode来代替一下keil5的编写程序功能 注意 这里使用vscode并不是说可以把keil5给卸载了 它还是要借
  • 使用ADB指令永久隐藏或禁用状态栏和虚拟按键

    原理是强大的ADB命令 1 手机开启开发者模式 允许ADB调试 2 电脑上下载ADB包 adb rar 529 77 KB 下载次数 7681 3 解压到任意位置 比如c adb 4 cmd命令定位到adb目录 比如 cd c adb 5
  • 用于回归问题的异常鲁棒极限学习机(ORELM)(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 极限学习机 ELM 作为机器学习中最有用的技术
  • 加密算法中的加盐值

    在应用中 出于到安全的考虑和数据的保密 需要使用到加密算法 有时候为了让加密的的结果更加扑朔迷离神鬼莫测一些 常常会给被加密的数据加点 盐 说白了 盐就是一串数字 完全是自己定义的 不多说 上实例 获取当前用户盐 param string
  • STM32外设系列—sg90(舵机)

    文章目录 一 sg90简介 二 引脚连接 三 控制方法 四 程序设计 4 1 配置定时器 4 2 编写控制程序 五 360 舵机 一 sg90简介 首先介绍说一下什么是舵机 舵机是一种位置 角度 伺服的驱动器 适用于一些需要角度不断变化的
  • listview动态标识被点击项并且不出现背景重绘紊乱的解决方法

    private int publicIndex 1 记录被点击item的id viewHolder layout setId position if position 1 0 publicIndex 1 第一次加载的时候默认选中第一项 如果
  • fpga卷积神经网络加速器,FPGA卷积神经网络综述

    如何使用FPGA加速机器学习算法 如何使用FPGA加速机器学习算法 当前 AI因为其CNN 卷积神经网络 算法出色的表现在图像识别领域占有举足轻重的地位 基本的CNN算法需要大量的计算和数据重用 非常适合使用FPGA来实现 上个月 Ralp
  • sql盲注

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 sql注入 盲注 前言 一 什么是盲注 二 步骤示例 1 测试注入点 2 测所在数据库长度 3 利用ASCII码猜当前数据库名 4 利用ASCII码查询表名 5 利用ASCI
  • Nginx的TCP运行时健康检查

    Nginx的TCP运行时健康检查 本章介绍如何配置TCP的运行状况检查 介绍 先决条件 被动TCP运行状况检查 服务器缓慢启动 活动TCP运行状况检查 微调TCP运行状况检查 匹配 配置块 介绍 NGINX和NGINX Plus可以持续测试