Nginx【有与无】【NP-AG3-5】UDP健康检查

说明

  • NP: NGINX Plus
  • AG: Admin Guide
  • 会话: session
  • 上游:  upstream
  • 流量:traffic
  • 后端:backend

目录

1.UDP健康检查

2.先决条件

3.被动UDP健康检查

4.激活UDP运行状况检查

5.微调UDP运行状况检查

6.“match {}”配置块

7.NTP测试示例

8.DNS测试示例


1.UDP健康检查

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

2.先决条件

  • 你已经配置了上游服务器组,用于在stream {}上下文中处理UDP网络流量(DNS,RADIUS,系统日志),例如:
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负载平衡

3.被动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;
}

4.激活UDP运行状况检查

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

要启用激活健康检查:

1.在上游组中,使用zone指令指定共享内存区域– NGINX Plus工作进程在其中共享计数器和连接状态信息的特殊区域。 在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.在将流量转发到上游组(通过proxy_pass)的server块中,为health_check指令指定udp 参数:

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

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

5.微调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秒,在两次连续失败的健康检查后服务器被视为不健康,并且服务器需要通过两次连续检查才能再次被视为健康。

6.“match {}”配置块

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

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

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

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

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

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

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

这些参数可以以不同的组合使用,但一次只能指定sendexpect参数。

7.NTP测试示例

要微调(fine‑tune)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;
}

8.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";
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴 韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值