NGINX TCP运行状况检查

本文概述

Nginx Plus和Nginx可以持续测试我们的TCP上游服务器, 避免出现故障的服务器, 并将恢复的服务器优雅地包含在负载平衡组中。

让我们看一下TCP健康检查的配置:

1.我们在流上下文中配置了一组TCP服务器, 例如:

stream {
    #...
    upstream stream_backend {
    server backend1.example.com:12345;
    server backend2.example.com:12345;
    server backend3.example.com:12345;
   }
    #...
}

2.我们配置了将TCP连接传递到服务器组的服务器:

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

被动TCP运行状况检查

如果尝试连接到上游服务器超时或导致错误, 则Nginx Plus或Nginx开源可以将服务器标记为不可用, 并在指定的时间内停止向其发送请求。要确定nginx认为上游服务器不可用的条件, 请在server指令中添加以下参数:

  • fail_timeout
  • max_fails
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参数来完成:

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

活动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指令减少两次连续运行状况检查之间的超时。此health_check_timeout指令会覆盖运行状况检查的proxy_timeout值, 对于运行状况检查而言, 此超时时间需要大大缩短。

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

4.默认情况下, Nginx Plus将运行状况检查消息发送到上游块中server指令指定的端口。要覆盖端口, 请定义health_check指令的port参数。

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秒)。

通过:服务器必须响应几次连续的健康检查才能被视为健康。预设值为1。

失败:服务器必须连续响应几次连续的健康检查才能被视为不健康。预设值为1。

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

在上面的示例中, 两次TCP健康检查之间的时间增加到10秒。经过三次连续失败的健康检查后, 服务器将被视为不正常, 并且服务器需要通过两次连续检查才能再次被视为健康。


微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?