如何构建冗余 Linux 服务器,以便客户端在发生故障时不会丢失连接?

如何构建冗余 Linux 服务器,以便客户端在发生故障时不会丢失连接?

如果您想要故障恢复能力,您可以构建多台服务器,每台服务器都可以为任何客户端提供服务,并将数据放在某个 SAN 或共享数据库集群中。但是,如果客户端直接连接到一台服务器,而该服务器发生故障,那么它们就会出现网络错误。您可以通过在它们前面放置一个负载平衡器来解决这个问题,该负载平衡器可以是 PC 中的软件库,也可以是专用硬件。在这种情况下,单个服务器的死亡不一定会导致客户端出现网络错误。

但负载均衡器本身可能会死机。所以你的情况并没有比以前好多少,对吧?

如果我假设 DC 确保数据包安全地到达我的服务器所在的交换机,那么是否有任何方法可以在一个 IP 上路由流量,以便硬件故障不会导致连接丢失? 在没有专门硬件的情况下可以做到这一点吗? 还是我错过了一些不可能的原因?

为了论证的目的,我们假设(非网络)悲剧被分解为消息,并且对于收到但未被故障服务器确认的每条消息,相同的消息可以被安全地缓冲和重播。

答案1

是的,您说得对,负载均衡器也可能死机。因此,您还需要两个负载均衡器,而不是一个。最简单的方案是,当您使用配置的 VIP 访问活动负载均衡器时,以主动-备用模式使用它们。任何带有 keepalive 或 heartbeat 等软件包的 Linux 机器都可以与 haproxy 一起作为 HTTP/TCP 负载均衡器执行此操作。

当活动负载平衡器和/或访问的服务器死亡时,您只会丢失当前连接,但由于您有冗余实时服务器,后续连接应该没问题。

答案2

Pfsense不需要特殊硬件,实际上可以在虚拟化环境中运行。它支持负载平衡和状态同步。

但总是会有一个故障转移时间 - 无论多么短暂,因此,总是会有一些丢失acks或需要retrans

我不确定任何高可用性技术(CARP/VRRP/HSRP)是否可以防止数据包完全丢失。但TCP/IP无论如何它都会被重新传输,所以这不应该是一个问题。

相关内容