C语言 RHEL 7.1中具有持久TCP连接的高可用性/故障转移



具有持久TCP连接的高可用性/故障转移

我正试图找出正确的部分来实现一个高度可用的&基于C的服务器应用程序的故障转移设置。理想情况下,TCP连接可以持续几天。如果主服务器由于无法控制的网络问题而停机,则备用服务器将充当主服务器,TCP连接转移到此服务器。

套接字连接中的数据看起来与protobuf数据结构非常相似。这不是HTTP。

到目前为止,我一直在研究keepalive和HAProxy,但它们似乎都不允许在不断开会话的情况下将持久TCP会话重定向/故障转移到另一个备用服务器。

我要找的是如果主服务器宕机,那么备用服务器将处理所有具有TCP连接的客户端,而不会断开TCP会话。

主用和备用将使用keepalive的虚拟IP。

        |        VIP         |
   +----+----+          +----+----+
   | Master  | <-VRRP-> | Standby |
   +----+----+          +----+----+
        |                    |               
        |                    |
  ------+---+------------+---+----------                                
            |            
        +---+---+    
        |Client |  
        +---+---+    

在运行RHEL7.1的主备服务器之间切换TCP连接或同步TCP会话有哪些选项?因此,客户端连接无法知道是否主服务器宕机和备用服务器已成为主服务器。

谢谢!

正如其他人指出的那样,真正的TCP连接镜像和故障转移并不容易,需要在内核级别完成。没有用户域进程可以为你做这些。

在过去的生活中,我甚至为一个商业负载平衡应用程序实现了这个功能。可以预见的是,它需要内核修改,而且不是微不足道的。

是的,tcpcp是另一个项目,但似乎大部分被放弃了。

就像其他人问的那样:你确定你需要这个吗?我强烈建议重新构建整个应用程序,使客户机可以通过重试来处理连接断开。如果这是不可能的,那么考虑一个整体架构,在这个架构中,故障的概率降低到这样一个点,即极其罕见的连接丢失根本无关紧要。

您正在尝试实现TCP连接的100%正常运行时间。然而,考虑到这很可能无法实现,因为任何数量的其他组件也可能失败(电源,上游路由器等)

因此,无论如何,您都需要为可能的失败进行设计。

最新更新