将现有的JNDI HornetQ服务变成HA的步骤是什么?

178

TL;DR:

如何配置具有HornetQ设置的HA-JNDI服务的步骤?我认为文档有点分散。我已经阅读了此处的文档,但似乎没有详细说明。

更长的版本:

因此,我们拥有一个HornetQ JMS设置以及JNDI。我们有5个服务器,每个服务器运行HornetQ JMS主实例,并在每个实例上运行JNDI服务。在这5个服务器中,我们还有一个次要实例运行其他一些HornetQ主实例。

举个例子:

Server A - HornetQa_primary, JNDI, HornetQb_secondary
Server B - HornetQb_primary, JNDI, HornetQc_secondary
Server C - HornetQc_primary, JNDI, HornetQd_secondary
Server D - HornetQd_primary, JNDI, HornetQe_secondary
Server E - HornetQe_primary, JNDI, HornetQa_secondary

每个HornetQ服务器都作为我们各种后端需求的中间件,这意味着有5个服务器、5个HornetQ主实例、5个HornetQ次要实例和5个JNDI服务器。然而,这种设置的问题在于,如果一个服务器主机(不仅是进程,而是主机本身)例如A宕机,理想情况下服务应该回退到运行在服务器E上托管A的HornetQ次要实例的HornetQ。然而,为了恢复为HornetQ主实例,HornetQa_secondary需要与运行在服务器A上的JNDI进程通信(我认为是为了复制消息)。由于主机A本身已经宕机,运行在E上的HornetQa_secondary无法与A上的JNDI通信,因此无法恢复为主进程。
如果JNDI服务高度可用,副本HornetQ进程可以按预期恢复为主进程。是否有人能指出文档或简单步骤来说明我们如何将现有设置转换为HA-JNDI?就此而言,我已经阅读了多个来源,但它似乎没有详细说明如何开始配置HA-JNDI。如果您需要有关我们当前设置的更多信息,请告诉我。

8
您的客户端在哪运行?它们是在同一AS实例上运行还是从另一个实例/JVM上运行,还是两者都有? - dreamwagon
3
他们将在另一个JVM上运行。 - gravetii
4
您能否将HornetQ启用为高可用性模式(主-备复制)?再结合服务器动态发现,您就可以获得可靠的后备。请参阅http://docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/ha.html 和 http://docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/clusters.html。 - diginoise
4
你正在运行哪个版本的jboss? - eis
5
我看到这个问题已经很久了,但我想知道你是否找到了答案。现在你可能已经知道了HA需要使用<forward-when-no-consumers>true</forward-when-no-consumers>来传播消息,但是主备切换并不起作用。我在WebLogic和WebSphere中有同样的配置,在那里故障切换可以正常工作,但在Jboss中却无法正常工作。是否需要设置某些内容来允许主节点同步和更新丢失的消息,以使正确的主备切换工作? - user1442498
1个回答

1

根据所描述的架构,我认为这很困难,因为实际上你需要将从节点重新配置为主节点,然后会有一定的停机时间。

HornetQ HA通过备份对提供,并且负载均衡是通过集群提供的。

如果您想要同时实现HA和负载均衡,则需要将2个备份对进行集群。

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

您可以使用虚拟IP地址来引用主节点,而不是使用主机名,以便在主节点宕机时,您可以将其中一个从节点重新配置为主节点,并启动虚拟IP,这样您就不必重新配置其余的从节点。(为了保持HA即使主节点宕机,您需要有2个从节点,这样您可以重新启动其中一个作为主节点,仍然有一个运行中)。

实现相同结果的另一种方法是使用特定于主节点的DNS主机名,如果一个主机宕机,您可以重新配置它指向不同的IP。由于DNS被缓存,因此这些条目最好放在'hosts'文件中。

如果每个HA域需要3台主机太多硬件,您可以通过虚拟服务器更轻松地实现此目标,而无需购买更多硬件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接