NGINX Plus 在进行 TCP/UDP 通信的会话持久化时如何处理服务器故障?

NGINX Plus 在进行 TCP/UDP 通信的会话持久化时如何处理服务器故障?

我从 NGINX Plus 文档中了解到,它们的负载平衡将绕过停机或拥塞的服务器,而会话持久性则尝试为给定会话维护同一台服务器。感觉当服务器在会话中途停机时,这两者可能会变得互斥。是否有服务器故障的迹象,以便我们知道由于切换到另一台服务器(会话内更改中可能没有)可能会丢失一些数据,还是它会悄悄地切换?

这专门用于 TCP/UDP 通信,而不是 HTTP。

答案1

感觉这两者可能会互相排斥

是的。这不是 nginx 特有的问题。目前为止,最好的解决方案是复制/高可用性会话数据 - 但这很难与尚未规划好的现有服务相结合。

当执行会话的服务器发生故障时,您希望 nginx 做什么?故障转移到任何其他服务器?故障转移到特定服务器?您的服务器是成对的吗?还是其他什么?停止会话 - 因为它处于不确定状态....有太多选项了。

至于故障报告。这有两个部分。一个是监控 - 需要有人被告知东西坏了/需要修理。这不是 Nginx 的工作。那是你的监控堆栈要处理的。第二部分是让客户端知道某些东西没有起作用。Nginx 不知道它应该把库存放回货架/重新应用 DNS 更改。这是你正在运行的协议和应用程序的工作。虽然存在时间问题,但大多数网络协议使用短请求/回复消息的交换来提供客户端对服务器状态的可见性。对于(大多数)数据库来说,这非常明确,客户端有明确的“COMMIT”消息。但考虑一下,如果客户端说“COMMIT”但没有收到回复会发生什么?

这专门用于 TCP/UDP 通信,而不是 HTTP。

和 @PersionGulf 一样,我建议使用 HAProxy 进行非 HTTP 负载平衡/通过 nginx 实现 TCP 的 HA。上次我检查时发现它不能执行 UDP。

它没有说明失败时如何运作

测试起来并不难。

相关内容