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

标签 java jboss jndi hornetq

TL;DR

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

加长版:

所以我们有一个 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 上的 HornetQ,该服务器托管 A 的 HornetQ 辅助服务器。但是,要恢复为 HornetQ 主节点,HornetQa_secondary 需要与服务器 A 上运行的 JNDI 进程通信(我假设复制消息)。由于主机 A 本身已关闭,在 E 上运行的 HornetQa_secondary 无法与 A 上的 JNDI 通信,因此无法恢复为主进程。

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

最佳答案

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

HornetQ HA is provided via a live-backup pair and load-balancing is provided via a cluster.

If you want both HA and load-balancing then you will need 2 live-backup pairs clustered together.

Source: https://developer.jboss.org/thread/254232

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

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

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

关于java - 将现有 JNDI HornetQ 服务设为 HA 的步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596069/

相关文章:

java - jboss 上的 Yui 压缩器 StringIndexOutOfBoundsException

jboss - Wildfly 即服务 : How to log just once?

Amazon RDS 和 HikariCp 数据源配置上的 MySQL SSL 连接出现 javax.net.ssl.SSLException : Unsupported record version Unknown-0. 0 错误

java - 使用内部类来反射(reflect)真实事物的关系

java - 如何从另一个类方法调用已创建对象的方法?

java - JBoss JAAS 自定义登录模块错误消息

java - Spring Boot、JNDI 数据源、Tomcat

java - 如何从私有(private)静态内部类访问变量

java - 如何获取 TimeZone.getDisplayName(locale) 值以返回非英语文本?

java - 如何从 Web 容器外部查找 JNDI 数据源?