Pasos para hacer un servicio JNDI HornetQ existente como HA?

177

TL; DR

¿Cuáles son los pasos para configurar un servicio HA-JNDI con una configuración HornetQ? Creo que la documentación está un poco dispersa. He leído los documentos aquí, pero no parece ilustrar en detalle.

Versión más larga:

Así que tenemos una configuración HornetQ JMS junto con JNDI. Tenemos 5 servidores que ejecutan la instancia maestra HornetQ JMS con servicio JNDI en cada uno. En cada uno de estos 5 servidores, también tenemos un esclavo ejecutándose para algún otro maestro HornetQ.

Para ilustrar:

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

Cada uno de estos servidores HornetQ sirve como middleware para nuestras diversas necesidades de back-end, lo que significa 5 servidores, 5 instancias maestras de HornetQ, 5 instancias esclavas de HornetQ y 5 servidores JNDI. Sin embargo, el problema con esta configuración es que si un servidor host (no solo el proceso, el host en sí mismo), dice A, se cae, idealmente el servicio debería recurrir al HornetQ que se ejecuta en el servidor E que aloja el esclavo HornetQ de A. Sin embargo, para continuar como maestro HornetQ, HornetQa_slave necesita hablar con el proceso JNDI que se ejecuta en el servidor A (supongo que replica los mensajes). Como el host A está inactivo, el HornetQa_slave que se ejecuta en E no tiene forma de hablar con el JNDI en A y, por lo tanto, no puede reanudarse como el proceso maestro.

Si el servicio JNDI hubiera estado altamente disponible, el proceso esclavo HornetQ podría reanudarse como maestro como se esperaba. ¿Podría alguien señalar amablemente los documentos o ilustrar en pasos simples cómo podríamos convertir nuestra configuración existente en un HA-JNDI? Por lo que vale, he leído varias fuentes , pero no parece ilustrar con mucho detalle cómo comenzar a configurar un HA-JNDI. Avíseme si necesita más información sobre nuestra configuración actual.

Gravetii
fuente
8
¿Dónde se ejecutan sus clientes? ¿Se están ejecutando en las mismas instancias AS o desde otra instancia / JVM, o ambas?
jjhavokk
3
@jjhavokk estarían corriendo en otra JVM
gravetii
44
¿Podría habilitar HornetQ en modo de alta disponibilidad (activa - replicación pasiva)? Combine eso con el descubrimiento dinámico del servidor y debería tener un respaldo confiable. Ver docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/… y docs.jboss.org/hornetq/2.4.0.Final/docs/user-manual/html/…
diginoise
44
¿Qué versión de jboss estás ejecutando?
eis
55
Veo que esto es muy viejo, pero me pregunto si encontraste la respuesta. Probablemente ya sepa que la HA requiere <forward-when-no-consumers> true </forward-when-no-consumers> para propagar mensajes, pero que la recuperación de fallas a master no funciona. He tenido la misma configuración en weblogic y websphere donde funciona el failback, pero no con jboss. ¿Hay algo que configurar para permitir que el maestro sincronice y actualice los mensajes perdidos para que funcione una recuperación adecuada?
user1442498

Respuestas:

1

Con la arquitectura descrita me parece difícil, porque de hecho necesitas reconfigurar al esclavo como maestro y luego tendrás una interrupción.

HornetQ HA se proporciona a través de un par de respaldo en vivo y el equilibrio de carga se proporciona a través de un clúster.

Si desea tanto HA como equilibrio de carga, necesitará 2 pares de respaldo en vivo agrupados.

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

Puede hacer referencia al maestro no por el nombre de host, sino usando una dirección IP virtual , de modo que en caso de que el maestro esté inactivo, puede volver a configurar uno de los esclavos como maestro e iniciar la IP virtual para que no tenga que volver a configurar el resto de los esclavos (Para mantener HA incluso cuando el maestro está inactivo, desea tener 2 esclavos, de modo que pueda reiniciar uno de ellos como maestro y aún se esté ejecutando uno).

Otra forma de lograr el mismo resultado es con un nombre de host DNS específico para el maestro que puede reconfigurar para que apunte a una IP diferente si un host está inactivo. Como el DNS está en caché, estas entradas deberían estar mejor en el archivo 'hosts'.

Si 3 hosts por dominio HA es demasiado hardware, puede lograr esto más fácilmente con servidores virtuales sin la necesidad de comprar más hardware.

José Manuel Gómez Álvarez
fuente