我正在努力找出合适的部分来实现高度可用的&基于C的服务器应用程序的故障转移设置。理想情况下,TCP连接可以使用数天。如果主服务器由于不受控制的网络问题而关闭,则备用服务器将充当主服务器,并将TCP连接转移到此服务器。
套接字连接中的数据看起来与protobuf数据结构非常相似。这不是HTTP。
到目前为止,我一直在关注keepalived和HAProxy,但似乎都不允许在不断开会话的情况下将持久TCP会话重定向/故障转移到不同的备用服务器。
我正在寻找的是如果主服务器出现故障,那么备用服务器将处理所有具有TCP连接的客户端,而不会断开TCP会话。
Master和Standby将使用keepalived进行虚拟IP。
| VIP |
+----+----+ +----+----+
| Master | <-VRRP-> | Standby |
+----+----+ +----+----+
| |
| |
------+---+------------+---+----------
|
+---+---+
|Client |
+---+---+
在运行RHEL7.1的主服务器和备用服务器之间移动TCP连接或同步TCP会话有哪些选项。因此,客户端连接无法知道主服务器是否已关闭且备用服务器是否已成为主服务器。
谢谢!
答案 0 :(得分:0)
正如其他人所指出的那样,真正的TCP连接镜像和故障转移并不容易,而且需要在内核级别完成。没有用户登陆过程能够为您完成此任务。
在过去的生活中,我甚至为商业负载均衡器应用程序实现了此功能。可以预见的是,它需要内核修改,并不是一件容易的事。
是的,tcpcp是另一个项目,但似乎大多放弃了。
正如其他人所问:你确定需要这个吗?我强烈建议以客户端可以通过重新尝试处理连接丢弃的方式重新构建整个应用程序。如果这是不可能的,那么考虑一个整体架构,其中失败的可能性降低到极少数连接丢失无关紧要的程度。
您正在尝试为TCP连接实现100%的正常运行时间。但是,请注意,这很可能无法实现,因为任何数量的其他组件也可能会出现故障(电源,上游路由器等)
因此,无论如何,您需要将其设计为可能的故障。