具有持久TCP服务器套接字的Java应用程序高可用性/故障转移

时间:2013-11-22 20:13:10

标签: java tcp high-availability failover haproxy

我正在努力找出合适的部分来实现高度可用的&基于java的服务器应用程序(netty)的故障转移设置。理想情况下,TCP连接可以持续数月(如果不是几年)(它们用于服务器到服务器通信),并且只有在远程服务器断开连接或由于不受控制的网络问题时才需要关闭。目标是没有任何单点故障。

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

到目前为止,我一直在关注keepalived和HAProxy,但似乎都不允许在不断开前端会话的情况下将持久TCP会话重定向/故障转移到不同的后端服务器。

我想弄清楚的是在FE1和BE1系统上运行的内容如下所示;

        |        VIP         |
   +----+----+          +----+----+
   |   FE1   | <-VRRP-> |   FE2   |
   +----+----+          +----+----+
        |                    |               
        |                    |
  ------+---+------------+---+----------                                
            |            | 
        +---+---+    +---+---+
        |  BE1A |    |  BE1B |
        +---+---+    +---+---+
            |            |       
            +------------+
            |            | 
            |            |
        +---+---+    +---+---+
        |  BE2A |    |  BE2B |
        +---+---+    +---+---+

外部服务器通过VIP连接到活动前端(FE)系统,后者建立与活动后端1(BE1)系统的TCP连接。或者如果TCP代理执行此操作;连接到两个BE1系统,并将流量发送到一个系统。

BE1服务器运行一个自定义Java应用程序,该应用程序处理确保请求和响应最终在适当的BE2系统上运行。如果需要,可以以任何方式修改它以处理来自FE服务器的连接/流。

我正在寻找的是,如果其中一个BE1系统发生故障(有意或无意),FE服务器会重定向/重新建立与另一个BE1系统的连接,而不会断开与外部VIP连接的连接远程服务器。即,持久TCP连接的透明故障转移。

如前所述,我已经看过keepalived / HAProxy,从我可以告诉他们不会工作 - 除非我错过了一个插件/ mod,它们可能会起作用。

有哪些选项可以在FE层上运行?或者是否有东西可以在BE1层上运行,它可以处理故障转移并通知java在备用系统上移动/恢复的套接字(即LVS或tcpcp可以与java一起使用 - 我没有发现太多关于它)。

谢谢!

1 个答案:

答案 0 :(得分:-1)

我试图实现这些,我已经看到这些方法与Websphere MQ一起使用,您可以在其中将应用程序添加到故障转移控制器。 优点是:

  • 您只知道一个IP地址
  • 您无需对客户端上的切换进行编码

祝你好运。 Leonel dos Anjos