繁体   English   中英

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

[英]Java app high availability/failover with persistent TCP server sockets

我正在尝试找出合适的方法来为基于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一起使用-我没有发现太多谈论的话题它)。

谢谢!

我正在尝试达到这些目的,我已经看到了这些方法与Websphere MQ一起使用,在其中将应用程序添加到故障转移控制器。 优点是:

  • 您只知道一个IP地址
  • 您不必在客户端上编写开关代码

最好的祝福。 莱昂内尔·多斯·安霍斯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM