Nginx - TCP运行状况检查

Nginx - TCP运行状况检查 首页 / Nginx入门教程 / Nginx - TCP运行状况检查

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

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

1.我们在stream上下文中配置了一组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运行状况检查

如果尝试连接到upstream服务器超时或导致错误,则Nginx Plus或Nginx开源可以将服务器标记为不可用,并在规定的时间内停止向其发送请求。要确定nginx认为upstream服务器不可用的条件,请在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;
}

服务器缓慢启动

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

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

Active TCP运行检查

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

Nginx Plus向每个upstream服务器发送特殊的运行状况检查请求,并测试是否满足特定条件。如果无法建立与服务器的连接,则运行状况检查将失败,并且服务器将被视为运行状况不佳。

要启用主动健康检查:

链接:https://www.learnfk.comhttps://www.learnfk.com/nginx/nginx-tcp-health-checks.html

来源:LearnFk无涯教程网

1. 指定共享内存区域  -  Nginx Plus辅助进程在其中共享有关连接和计数器的状态信息的特殊区域。将zone指令添加到upstream服务器组,并定义区域(此处为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指令为upstream组启用主动运行状况检查。

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将运行状况检查消息发送到upstream块中server指令指定的端口。要覆盖端口,请定义health_check指令的port参数。

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

Fine Tuning 运行检查

默认情况下,Nginx Plus尝试每5秒连接到一组upstream服务器中的每台服务器。如果无法建立连接,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秒。经过三次连续的健康检查失败后,服务器将被视为不正常,并且服务器需要通过两次连续的检查才能再次被视为健康。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

邱岳的产品手记 -〔邱岳〕

快速上手Kotlin开发 -〔张涛〕

程序员进阶攻略 -〔胡峰〕

从0开始学大数据 -〔李智慧〕

后端技术面试 38 讲 -〔李智慧〕

微信小程序全栈开发实战 -〔李艺〕

WebAssembly入门课 -〔于航〕

郭东白的架构课 -〔郭东白〕

超级访谈:对话毕玄 -〔毕玄〕

好记忆不如烂笔头。留下您的足迹吧 :)