UDP Health Checks
This chapter describes how to configure different types of health checks for UDP servers in a load-balanced upstream server group.
Prerequisites
You have configured an upstream group of servers that handles UDP network traffic (DNS, RADIUS, syslog) in the
streamcontext, for example:stream {
...
upstream dns_upstream {
server 192.168.136.130:53;
server 192.168.136.131:53;
server 192.168.136.132:53;
}
...
}You have configured a server that passes UDP datagrams to the upstream server group:
stream {
...
server {
listen 53 udp;
proxy_pass dns_upstream;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
...
}
See TCP and UDP Load Balancing for details.
Passive UDP Health Checks
NGINX can mark the server as unavailable and stop sending UDP datagrams to it for some time if the server replies with an error or times out.
The number of consecutive failed connection attempts within a certain time period is set with the max_fails parameter for an upstream server (default value is 1).
The time period is set with the fail_timeout parameter (default value is 10 seconds). The parameter also sets the amount of time that NGINX considers the server unavailable after marking it so.
So if a connection attempt times out or fails at least once in a 10‑second period, NGINX marks the server as unavailable for 10 seconds. The example shows how to set these parameters to 2 failures within 60 seconds:
upstream dns_upstream {
server 192.168.136.130:53 fail_timeout=60s;
server 192.168.136.131:53 fail_timeout=60s;
}
Active UDP Health Checks
Active Health Checks allow testing a wider range of failure types and are available only for NGINX Plus. For example, instead of waiting for an actual TCP request from a DNS client to fail before marking the DNS server as down (as in passive health checks), NGINX Plus will send special health check requests to each upstream server and check for a response that satisfies certain conditions. If a connection to the server cannot be established, the health check fails, and the server is considered unhealthy. NGINX Plus does not proxy client connections to unhealthy servers. If more than one health check is defined, the failure of any check is enough to consider the corresponding upstream server unhealthy.
To enable active health checks:
In the upstream group, specify a shared memory zone with the
zonedirective – a special area where the NGINX Plus worker processes share state information about counters and connections. In thezonedirective, specify the zone name (dns_zonein the example) and the zone size (64kin the example):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;
}
...
}In the
serverblock that forwards traffic to the upstream group (viaproxy_pass), specify theudpparameter to thehealth_checkdirective:stream {
...
server {
listen 53 udp;
proxy_pass dns_upstream;
health_check udp;
}
...
}
A basic UDP health check assumes that nginx sends the “nginx health check” string to an upstream server and expects the absence of ICMP “Destination Unreachable” message in response. You can configure your own health check tests in the match {} block. See The “match {}” Configuration Block for details.
Fine-Tuning UDP Health Checks
You can fine-tune the health check by specifying the following parameters to the health_check directive:
interval– How often (in seconds) NGINX Plus sends health check requests (default is 5 seconds)passes– Number of consecutive health checks the server must respond to to be considered healthy (default is 1)fails– Number of consecutive health checks the server must fail to respond to to be considered unhealthy (default is 1)
server {
listen 53 udp;
proxy_pass dns_upstream;
health_check interval=20 passes=2 fails=2 udp;
}
In the example, the time between UDP health checks is increased to 20 seconds, the server is considered unhealthy after 2 consecutive failed health checks, and the server needs to pass 2 consecutive checks to be considered healthy again.
The “match {}” Configuration Block
You can verify server responses to health checks by configuring a number of tests. These tests are defined within the match {} configuration block.
In the top-level
stream{}context, specify thematch{}block and set its name, for example,udp_test:stream {
...
match udp_test {
...
}
}Refer to the block from the
health_checkdirective by including thematchparameter to specify the name of thematch{}block:stream {
...
server {
listen 53 udp;
proxy_pass dns_upstream;
health_check match=udp_test udp;
}
...
}In the
match{}block, specify conditions or tests under which a health check succeeds. This is done withsendandexpectparameters:send– The text string or hexadecimal literals (“/x” followed by two hex digits) to send to the serverexpect– Literal string or regular expression that the data returned by the server needs to match
These parameters can be used in different combinations, but no more than one
sendand oneexpectparameter can be specified at a time.
Example Test for NTP
To fine-tune health checks for NTP, you should specify both send and expect parameters with the following text strings:
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;
}
Example Test for DNS
To fine-tune health checks for DNS, you should also specify both send and expect parameters with the following text strings:
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";
}
UDP Health Checks的更多相关文章
- HTTP Health Checks
This article describes how to configure and use HTTP health checks in NGINX Plus and open source NGI ...
- Kong(V1.0.2) Health Checks and Circuit Breakers Reference
介绍 您可以让Kong代理的API使用ring-balancer,通过添加包含一个或多个目标实体的 upstream 实体进行配置,每个 target指向不同的IP地址(或主机名)和端口.ring-b ...
- TCP Health Checks
This chapter describes how to configure health checks for TCP. Introduction NGINX and NGINX Plus can ...
- Zookeeper Health Checks
Short Description: The article talks about the basic health checks to be performed when working on i ...
- Service Discovery And Health Checks In ASP.NET Core With Consul
在这篇文章中,我们将快速了解一下服务发现是什么,使用Consul在ASP.NET Core MVC框架中,并结合DnsClient.NET实现基于Dns的客户端服务发现 这篇文章的所有源代码都可以在G ...
- Using HAProxy as an API Gateway, Part 3 [Health Checks]
转自:https://www.haproxy.com/blog/using-haproxy-as-an-api-gateway-part-3-health-checks/ Achieving high ...
- NGINX Load Balancing – TCP and UDP Load Balancer
This chapter describes how to use NGINX Plus and open source NGINX to proxy and load balance TCP and ...
- 11g新特性:Health Monitor Checks
一.什么是Health Monitor ChecksHealth Monitor Checks能够发现文件损坏,物理.逻辑块损坏,undo.redo损坏,数据字典损坏等等.Health Monitor ...
- About Health Monitor Checks
About Health Monitor Checks Health Monitor checks (also known as checkers, health checks, or checks) ...
随机推荐
- log4j-1.2.6升级到log4j-2.9.0
0.工程是普通java web工程,不是maven工程.需要升级log4j 步骤发下: 1. 在build path中 移除项目对log4j-1.2.6.jar的引用,并物理删除log4j-1.2.6 ...
- SpringBoot+kafka+ELK分布式日志收集
一.背景 随着业务复杂度的提升以及微服务的兴起,传统单一项目会被按照业务规则进行垂直拆分,另外为了防止单点故障我们也会将重要的服务模块进行集群部署,通过负载均衡进行服务的调用.那么随着节点的增多,各个 ...
- Hibernate入门(四)---------一级缓存
Hibernate一级缓存 Hibernate的一级缓存就是指Session缓存,Session缓存是一块内存空间,用来存放相互管理的java对象,在使用Hibernate查询对象的时候,首先会使用对 ...
- 洛谷P4591 [TJOI2018]碱基序列(hash dp)
题意 题目链接 Sol \(f[i][j]\)表示匹配到第\(i\)个串,当前在主串的第\(j\)个位置 转移的时候判断一下是否可行就行了.随便一个能搞字符串匹配的算法都能过 复杂度\(O(|S| K ...
- div 中图片溢出问题及 CSS3中图片翻转问题
如果设置一个div 装两张以上的图片,如果不设置好div的宽度和高度,就会使图片溢出. 我们知道,div是可以由图片撑开其宽高的,也就是说如果只放一张图片的情况下,不设置div的宽高,div的宽高会默 ...
- C++代码利用pthread线程池与curl批量下载地图瓦片数据
项目需求编写的程序,稳定性有待进一步测试. 适用场景:在网络地图上,比如天地图与谷歌地图,用户用鼠标在地图上拉一个矩形框,希望下载该矩形框内某一层级的瓦片数据,并将所有瓦片拼接成一个完整的,包含地理坐 ...
- 运行 python *.py 文件出错,如:python a.py
运行 python *.py 文件出错,如:python a.py(下图) 原因:没有安装web.py 解决:下载并安装 网址:http://webpy.org/install#install (h ...
- Jump Flood Algorithms for Centroidal Voronoi Tessellation
Brief Implemented both CPU and GPU version, you could consider this as the basic playground to imple ...
- 章节四、3-While循环-DoWhile语句
一.while死循环 package introduction5; public class WhileDemo { public static void main(String[] args) { ...
- git 入门教程之实战 git
实战 git git 是一款分布式版本控制系统,可以简单概括: 不要把鸡蛋放在一个篮子里,你的一举一动都在监视中. 实战场景 你作为某项目的其中一员或者负责人,和小伙伴们一起开发,大家既有着各自分工互 ...