如何将现有的JNDI HornetQ服务设置为HA?


177

TL; DR

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

较长版本:

因此,我们有了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,该服务器承载A的HornetQ从属服务器。但是,要恢复为HornetQ主服务器,HornetQa_slave需要与服务器A上运行的JNDI进程进行对话(我想复制消息)。由于主机A本身已关闭,因此在E上运行的HornetQa_slave无法与A上的JNDI进行通信,因此无法作为主进程恢复。

如果JNDI服务高度可用,则从属HornetQ进程可以按预期恢复为主进程。任何人都可以友善地指向文档或以简单的步骤说明如何将现有设置转换为HA-JNDI?值得一读的是,我已经阅读了多个资料,但是似乎并没有详细说明如何配置HA-JNDI。如果您需要有关我们当前设置的更多信息,请告诉我。


8
您的客户端在哪里运行?它们是在相同的AS实例上运行还是在另一个实例/ JVM上运行,或两者都运行?
jjhavokk '16

3
@jjhavokk他们将在另一个JVM上运行
gravetii 2016年

4
您可以在高可用性模式(主动-被动复制)中启用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/...
diginoise

4
您正在运行什么版本的jboss?
eis

5
我认为这确实很老,但是我想知道您是否找到了答案。到现在为止,您可能已经知道HA要求<forward-when-no-consumers> true </ forward-when-no-consumers>来传播消息,但是故障转移到master无效。我在故障回复起作用的weblogic和websphere中具有相同的配置,但不适用于jboss。是否需要进行一些设置以允许主服务器同步和更新丢失的消息,以便进行适当的故障回复?
user1442498

Answers:


1

有了所描述的体系结构,对我来说似乎很困难,因为实际上您需要将从属设备重新配置为主设备,然后会出现一定的中断。

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

如果同时需要HA和负载平衡,则需要将2个实时备份对群集在一起。

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

您可以不是通过主机名而是通过虚拟IP地址来引用主服务器,这样万一主服务器宕机,您可以将一个从服务器重新配置为主服务器,并启动虚拟ip,这样您就不必重新配置其余主机了。奴隶。(要在主机断开时保持HA,您希望有2个从机,以便可以将其中一个作为主机重新启动,并且仍然有一个正在运行)。

获得相同结果的另一种方法是使用特定于主机的DNS主机名,如果一个主机关闭,您可以将其重新配置为指向其他IP。由于缓存了DNS,因此最好将这些条目保存在“主机”文件中。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.