将现有 JNDI HornetQ 服务设为 HA 的步骤?

Posted

技术标签:

【中文标题】将现有 JNDI HornetQ 服务设为 HA 的步骤?【英文标题】:Steps to make an existing JNDI HornetQ service as HA? 【发布时间】:2016-04-08 08:32:40 【问题描述】:

TL;DR

使用 HornetQ 设置配置 HA-JNDI 服务的步骤是什么?我相信文档有点分散。我已经阅读了文档here,但似乎没有详细说明。

加长版:

所以我们有一个 HornetQ JMS 设置以及 JNDI。我们说有 5 台服务器,它们在每台服务器上运行带有 JNDI 服务的 HornetQ JMS 主实例。在这 5 台服务器中的每台服务器上,我们还为其他 HornetQ 主服务器运行了一个从服务器。

举例说明:

Server A - HornetQa_master, JNDI, HornetQb_slave
Server B - HornetQb_master, JNDI, HornetQc_slave
Server C - HornetQc_master, JNDI, HornetQd_slave
Server D - HornetQd_master, JNDI, HornetQe_slave
Server E - HornetQe_master, JNDI, HornetQa_slave

这些 HornetQ 服务器中的每一个都用作满足我们各种后端需求的中间件,因此这意味着 5 个服务器、5 个 HornetQ 主实例、5 个 HornetQ 从属实例和 5 个 JNDI 服务器。然而,这个设置的问题是,如果服务器主机(不仅仅是进程,主机本身),比如说 A 出现故障,理想情况下,服务应该回退到运行在服务器 E 上的 HornetQ,该服务器 E 托管 A 的 HornetQ 从站。然而,要恢复为 HornetQ 主控,HornetQa_slave 需要与服务器 A 上运行的 JNDI 进程通信(我假设复制消息)。由于主机 A 本身已关闭,在 E 上运行的 HornetQa_slave 无法与 A 上的 JNDI 通信,因此无法恢复为主进程。

如果 JNDI 服务具有高可用性,则从属 HornetQ 进程可以按预期恢复为主进程。谁能指出文档或以简单的步骤说明我们如何将现有设置转换为 HA-JNDI?对于它的价值,我已经阅读了多个sources,但它似乎并没有详细说明如何配置 HA-JNDI。如果您需要有关我们当前设置的更多信息,请告诉我。

【问题讨论】:

您的客户在哪里运行?它们是在同一个 AS 实例上运行还是从另一个实例/JVM 上运行,还是两者兼而有之? @jjhavokk 他们将在另一个 JVM 上运行 能否在高可用性模式下启用 HornetQ(主动-被动复制)?将其与服务器动态发现相结合,您应该拥有可靠的回退。见docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/…和docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/… 你运行的是什么版本的 jboss? 我看到这真的很老了,但我想知道你是否找到了答案。到目前为止,您可能已经知道 HA 需要 true 来传播消息,但是故障回复到 master 不起作用。我在 weblogic 和 websphere 中有相同的配置,故障回复工作在其中,但在 jboss 中没有。是否需要设置一些内容以允许主节点同步和更新丢失的消息,以便进行正确的故障回复? 【参考方案1】:

对于我所描述的架构来说,这似乎很困难,因为确实需要将从属重新配置为主控,然后您会遇到一定的中断。

HornetQ HA 通过实时备份对提供,负载平衡是 通过集群提供。

如果你想要 HA 和负载平衡,那么你需要 2 实时备份对聚集在一起。

来源:https://developer.jboss.org/thread/254232

您可以不通过主机名而是使用虚拟IP地址来引用master,这样在master宕机的情况下,您可以将其中一个slave重新配置为master,并启动虚拟ip所以你不必重新配置其余的奴隶。 (为了在 master 宕机的情况下保持 HA,您需要 2 个 slave,这样您可以将其中一个重新启动为 master 并且仍然有一个会运行)。

实现相同结果的另一种方法是使用特定于主服务器的 DNS 主机名,如果一个主机停机,您可以重新配置该主机名以指向不同的 IP。由于 DNS 已缓存,因此该条目最好位于“hosts”文件中。

如果每个 HA 域 3 台主机的硬件过多,您可以使用虚拟服务器更轻松地完成此操作,而无需购买更多硬件。

【讨论】:

以上是关于将现有 JNDI HornetQ 服务设为 HA 的步骤?的主要内容,如果未能解决你的问题,请参考以下文章

JMS-bridge 配置不共享两个 hornetQ 服务器上的负载

jboss-eap-quickstarts cluster-ha-singleton client JNDI Lookup Class Cast Exception

基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

JMS 客户端需要哪些 HornetQ 库?

Mule ESB HornetQ JMS 消息未传递