是否有可能有一个高可用性的设置,在这个例子去2个networking服务器,并允许它故障转移,而不会丢失连接?
我有两个使用彗星的Web服务器,这是一种HTTP技术,在这种技术中,您拥有长久的HTTP连接。 我有两个负载均衡器在运行心跳与共享的IP。 如果其中一台前端服务器停机,则所有连接都将丢失。
我听说有一种技术,可能是HAProxy,两台服务器跟踪连接状态,如果其中一台服务器发生故障,另一台服务器接pipe,而不会丢失连接。 我似乎无法找出如何做到这一点。
我也研究了如何平衡长期的telnet连接。 即使像F5这样的大型昂贵的负载平衡器似乎也不支持从死亡服务器到另一台服务器的“开放”TCP连接的“迁移”。 我考虑从我们的负载均衡器上捕获来自telnet的握手和连接数据包,然后重播那些必须重新连接到另一台服务器的数据包。 问题是每个应用程序(telnet,comet,ssh等)都有不同的规则来启动连接和login。没有对每个应用程序进行编码,我不知道负载平衡器可以做这样的事情。
最后,我放弃了重新configuration客户端应用程序的时间,并以对用户透明的方式重新连接到服务。
对于彗星,我build议你configurationWeb服务,当它检测到断开连接时重新连接。 这篇关于 ajaxpatterns.org上的HTTP Streaming的文章有一个用于检测断开连接的代码片段。
一旦彗星可以重新连接,那么当前的负载平衡器设置应该按照预期运行。
你不能通过HAProxy来实现,因为这是在错误的OSI层 – 在HTTP层,而不是在TCP层。 一些低层负载平衡器具有一个function,可以通过将信息从主动节点传递到被动节点来完成您所谈论的内容,至less对于许多连接来说。 看看Linux虚拟服务器(LVS)和像ldirectord这样的服务级别的守护进程,来完成你正在寻找的东西。
这是不可能的。 编程客户端以容忍服务器故障并自动重新连接将是一个更好的主意。 这将允许单个服务器发生故障,并且可能会发生站点故障转移(如果整个站点发生故障)。
假设的土地:可能创build一个客户端 – 服务器dynamic,其中中间负载平衡器或代理可以自动build立到故障转移服务器的新连接,并将任何新的客户端stream量转发到新服务器。 服务器必须以某种方式意识到客户端的会话信息,可能是将会话信息存储在共享存储中。 或者,客户端可以这样编程,以容忍没有其先前的会话信息的服务器(只要我们正在修改客户端,我们也可以做第1段,并简单地重新连接到新的故障转移服务器)。 这样的configuration几乎肯定会比它的价值更复杂,更容易出错。
在esx / esxi上使用vmware容错可以达到这个目的,但是也有很多限制。
对不起,没有链接,在我回家的路上,在我的手机在车上:-)。