Nginx的UDP健康检查

本章介绍如何为负载平衡的上游服务器组中的UDP服务器配置不同类型的运行状况检查。

  • 先决条件
  • 被动UDP健康检查
  • 主动UDP运行状况检查
    • 微调UDP运行状况检查
    • “匹配”配置块
      • NTP测试示例
      • DNS测试示例

先决条件

  • 您已配置上下文中的上游服务器组来处理UDP网络流量(DNS,RADIUS,系统日志),例如:stream {}

    stream {#...upstream dns_upstream {server 192.168.136.130:53;server 192.168.136.131:53;server 192.168.136.132:53;}#...
    }

  • 您已经配置了将UDP数据报传递到上游服务器组的服务器:

    stream {#...server {listen          53 udp;proxy_pass      dns_upstream;proxy_timeout   1s;proxy_responses 1;error_log       logs/dns.log;}#...
    }

    有关详细信息,请参见TCP和UDP负载平衡。

被动UDP健康检查

如果服务器回复错误或超时,则NGINX开源或NGINX Plus可以将服务器标记为不可用,并在一段时间内停止向其发送UDP数据报。

max_fails使用上游服务器的参数设置在特定时间段内连续失败的连接尝试次数(默认值为1)。

时间段由fail_timeout参数设置(默认值为10秒)。该参数还设置了NGINX标记服务器后认为服务器不可用的时间。

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

upstream dns_upstream {server 192.168.136.130:53 fail_timeout=60s;server 192.168.136.131:53 fail_timeout=60s;
}

主动UDP运行状况检查

Active Health Checks可以测试各种故障类型,并且仅适用于NGINX Plus。例如,NGINX Plus不会等待将DNS客户端发出的实际TCP请求失败,然后再将DNS服务器标记为已关闭(例如在被动运行状况检查中),而是将特殊的运行状况检查请求发送到每个上游服务器,并检查是否存在响应满足某些条件。如果无法建立与服务器的连接,则运行状况检查将失败,并且服务器将被视为运行状况不佳。NGINX Plus不会将客户端连接代理到运行状况不佳的服务器。如果定义了多个运行状况检查,则任何检查失败都会足以使相应的上游服务器不正常。

要启用主动健康检查:

  1. 在上游组中,指定一个共享存储器区与所述zone指令-其中NGINX加工作进程有关计数器和连接共享状态信息的特殊区域。在zone指令中,指定区域名称dns_zone在示例中)和区域大小64k在示例中):

    stream {#...upstream dns_upstream {zone   dns_zone 64k;server 192.168.136.130:53;server 192.168.136.131:53;server 192.168.136.132:53;}#...
    }

  2. server将流量转发到上游组(通过proxy_pass)的块中,udphealth_check伪指令指定参数:

    stream {#...server {listen       53 udp;proxy_pass   dns_upstream;health_check udp;}#...
    }

基本的UDP运行状况检查假设NGINX Plus将“ nginx运行状况检查”字符串发送到上游服务器,并期望响应中缺少ICMP“目标不可达”消息。您可以在match {}块中配置自己的健康检查测试。有关详细信息,请参见“ match {}”配置块。

微调UDP运行状况检查

您可以通过为health_check指令指定以下参数来微调运行状况检查:

  • interval– NGINX Plus发送健康检查请求的频率(以秒为单位)(默认为5秒)
  • passes–服务器必须响应才能被视为健康的连续健康检查次数(默认为1)
  • fails–服务器必须不响应才能被视为不健康的连续健康检查次数(默认为1)
server {listen       53 udp;proxy_pass   dns_upstream;health_check interval=20 passes=2 fails=2 udp;
}

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

“ match {}”配置块

您可以通过配置许多测试来验证服务器对运行状况检查的响应。这些测试在match {}配置块中定义。

  1. 在顶级stream {}上下文中,指定match {}块并设置其名称,例如udp_test

    stream {#...match  udp_test {#...}
    }

  2. health_check通过包含match参数以指定match {}块的名称来引用指令中的块:

    stream {#...server {listen       53 udp;proxy_pass   dns_upstream;health_check match=udp_test udp;}#...
    }

  3. match {}块中,指定运行状况检查成功的条件或测试。这是通过sendexpect参数完成的:

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

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

NTP测试示例

要微调NTP的运行状况检查,应同时使用以下文本字符串指定sendexpect参数:

match ntp {send \xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00;expect ~* \x24;
}

DNS测试示例

要微调DNS的运行状况检查,还应该同时使用以下文本字符串指定sendexpect参数:

match dns {send \x00\x2a\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x73\x74\x6c\x04\x75\x6d\x73\x6c\x03\x65\x64\x75\x00\x00\x01\x00\x01;expect ~* "health.is.good";
}

Nginx的UDP健康检查相关推荐

  1. nginx限流健康检查

    Nginx原生限流模块: ngx_http_limit_conn_module模块 根据前端请求域名或ip生成一个key,对于每个key对应的网络连接数进行限制. 配置如下: http模块 serve ...

  2. nginx后端节点健康检查

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

  3. Nginx的TCP运行时健康检查

    Nginx的TCP运行时健康检查 本章介绍如何配置TCP的运行状况检查. 介绍 先决条件 被动TCP运行状况检查 服务器缓慢启动 活动TCP运行状况检查 微调TCP运行状况检查 "匹配&qu ...

  4. consul集群搭建,配合nginx完成服务动态发现和健康检查

    1.概述 1.1 介绍 consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-m ...

  5. nginx负载均衡之健康检查

    严格来说,nginx到目前为止没有针对负载均衡后端节点的健康检测的模块,但是可以通过upstream负载均衡组中的max_fails=number和fail_timeout=time来间接实现,但还是 ...

  6. apisix健康检查测试

    健康检查简介 健康检查的目的是动态地将上游服务器标记为健康或不健康的状态.开启健康检查功能后,当后端某台上游服务器健康检查出现异常时,负载均衡会自动将新的请求分发到其它健康检查正常的上游服务器上:而当 ...

  7. Nginx的HTTP运行时健康检查

    Nginx的HTTP运行时健康检查 本文介绍如何在NGINX Plus和NGINX Open Source中配置和使用HTTP运行状况检查. 介绍 先决条件 被动健康检查 服务器缓慢启动 主动健康检查 ...

  8. Nginx HTTP 健康检查

    通过发送定期健康检查(包括 NGINX Plus 中可自定义的主动健康检查)来监控上游组中 HTTP 服务器的健康状况. 介绍 NGINX 和 NGINX Plus 可以持续测试您的上游服务器,避免出 ...

  9. Nginx负载均衡配置和健康检查

    Nginx负载均衡配置和健康检查 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. nginx的强大之处不必要我细说,当初第一次接触ngin ...

最新文章

  1. AI解决方案:边缘计算和GPU加速平台
  2. PMCAFF微课堂 | 运营女神揭秘产品运营推广中的场景思维
  3. 18.8.20 考试总结
  4. leetcode - 104. 二叉树的最大深度
  5. devops 数据库_DevOps世界中与数据库管理员合作的6种方法
  6. 面试真题------hashmap与hashset
  7. java 怎样 thread dump_怎样分析 JAVA 的 Thread Dumps
  8. CCF201909-4 推荐系统(100分)【模拟】
  9. opencv 图像平移、缩放、旋转、翻转 图像仿射变换
  10. No package ‘libmatekbd‘ found
  11. Linux delete folder
  12. 5-(4-硝基苯基)-10,15,20-三苯基卟啉NTPPH2/NTPPZn/NTPPMn/NTPPFe/NTPPNi/NTPPCu/NTPPCd/NTPPCo等金属配合物
  13. Spacemacs 安装和简要配置
  14. python语法报错_1、Python语法及报错总结 - 随笔分类 - 走路带风的帅界扛把子 - 博客园...
  15. 【UOJ】#246. 【UER #7】套路
  16. CentOS之VI编辑器的常用命令
  17. 这5个灵感网站,设计师都在逛
  18. 判断图的连通子图个数
  19. 软件测试-PR脚本参数化的两种方法
  20. 2019年ipa发布苹果应用商店审核指南

热门文章

  1. 面向普通人的 PHP 加密
  2. Flex mp3播放
  3. SpringCloud大致架构
  4. LeetCode 628. Maximum Product of Three Numbers
  5. 《C和指针》——字符串操作补、字符串内存操作
  6. LeetCode 344. Reverse String
  7. C/C++——new一个二维数组
  8. 1218 图片对齐模式
  9. 草稿 图片盒子定时器模式窗口
  10. 爬虫-获取访问后可见的页面-get方法cookies参数形式