基于服务器200响应故障的NGINX路由

问题描述

我的目标是在配置中配置Nginx的流对象,以将请求路由到上游的备份,以防某些运行状况检查失败(2/3)

我认为健康检查应该不是问题:

-TCP 1212可用性

-TCP 1912可用性

-HTTP GET on 7078 /?

-Response应该是200,如果我能以某种方式让身体检查它是否符合预期,那就更好了!

如果说这些检查在一个上游“集群”上失败,那么我想将请求路由到另一个相同的集群,就像备份一样。

我要解决的问题在于,服务器之间实际上相差半个半个世界,因此通过一台服务器进行负载平衡将导致与等待它失败一样的延迟。因此,尽管负载均衡器最终将具有“路由”行为,但响应时间将是不可接受的。

是否可以在Nginx配置中执行此操作,或者我将其传播得太稀疏了?

解决方法

NGINX upstream module将为您执行被动健康检查,这意味着它将对连接失败做出反应,并根据需要选择切换到备用服务器。在某种程度上,这对您来说足够了。

您在此处描述的内容都是 active health checks,可让您检查与流量端口不同的端口,声明HTTP状态,标头值甚至正文内容。不幸的是,在您面前晃来晃去的这些内容仅作为NGINX商业订阅的一部分提供,我想这并不是您想要的。

如果您确实需要这种主动的健康检查,则仍然可以从NGINX外部进行。一种方法可能是:

  1. 将您的上游设备放置在单独的conf中,并在需要的地方include其中一个
  2. 在每时每刻的cron工作中使用ncat和/或curl进行对您而言重要的测试
  3. 如果这些测试失败,请关闭上游conf,并告诉NGINX进行零宕机时间重新加载

您可以通过快速mv切换conf来重命名与include匹配的正确名称,而不必重写任何内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...