是否有用于实时 TCP 流的高可用性集群解决方案?

Ser*_*nov 5 linux cluster tcp streaming

我们有一个服务器,它接收一些数据,充当 TCP 客户端,以某种方式处理它,并将处理后的数据提供给客户端,充当 TCP 服务器。它还将此数据存储在磁盘上,并可以从文件而不是实时流中提供服务。

问题是此服务必须在 24x7 模式下可用,不允许中断。现在它是通过有两台服务器来完成的,一台作为热备份 - 客户端保持与两台服务器的连接,如果主服务器发生问题,他们只需切换到备份。虽然这个解决方案已经运行了大约 15 年,但它有点不方便,并且在客户端上放置了很多故障转移逻辑。

最近人们开始谈论使用集群来确保该服务的可用性,但无论我多么努力地搜索,我都找不到任何允许透明 TCP 连接故障转移的集群解决方案,因此没有人会注意到服务器发生了一些事情. 周围有一些研究论文,但我找不到任何可行的实现。这是我认为它应该如何工作:

  1. 两个服务器都通过 TCP 接收数据。理想情况下,它应该看起来像与“外部”世界的单一连接,以节省带宽,更重要的是,确保两台服务器接收相同的数据流。

  2. 当客户端连接到集群 IP 时,它在单个连接中接收处理过的数据,但是两个服务器都应该看到这个连接并提供数据,只是只有一个流实际到达客户端,备份一个去/dev/null,可以这么说。

  3. 当服务器出现故障时(它在一段时间内不传输任何数据,比如 5 秒),客户端应该继续在同一个连接中接收同一个流。它需要发生得非常快,所以整体流延迟不超过大约 10 秒。

在这里,可靠性是最重要的。快速故障转移是下一个。开源 Linux 解决方案是首选,但如果存在商业和/或非 Linux 近乎完美的解决方案,我也想了解它们。施加大量限制或需要修改服务器应用软件的解决方案也是完全可以接受的。

djs*_*dog 1

你应该看看 HAProxy。HAProxy 通常以 HTTP 模式运行,但它也可以处理原始 TCP 连接。它支持服务器之间的负载平衡,并且可以使用Heartbeat来检测实例是否关闭。

如果您的设置需要完全透明(服务器获取源 IP 与 HAProxy 服务器的源 IP 相对),您可能需要为 TProxy 修补 Linux 内核,或者找到在内核中或作为模块支持 TProxy 的 Linux 发行版。

这是最好的开源解决方案。如果您需要比这更全面的东西,您必须考虑商业产品,例如适用于 F5 BigIP 的 Citrix Netscaler。