En un cliente, teníamos la siguiente arquitectura Java EE montada sobre CentOS 6.5 en la que el servidor Apache redirecciona a través de mod_cluster a uno de los dos servidores JBoss EAP, montados en en modo domain y con soporte para Sticky Session :
- 1 Apache y el módulo mod_cluster (apache1 con la IP 10.0.3.105).
- 1 JBoss EAP 6 como controlador del domain (jboss1 con la IP 10.0.3.106).
- 1 JBoss EAP 6 como host del domain (jboss2 con la IP 10.0.3.107).
En el servidor JBoss dónde Apache ha redirigido la llamada, se mantiene la vinculación al servidor asignado gracias a la Sticky Session pero aparecen en los logs (server.log) el siguiente warning :
23:57:57,825 WARN [org.jgroups.protocols.TP$ProtocolAdapter] (Incoming-11,shared=udp) dropping unicast message to wrong destination host2:invoice-server-one/web; my local_addr is host1:invoice-server-one/web
De forma aleatoria, la vinculación al servidor se pierde y la aplicación lanza al usuario a la página de inicio saltando al otro servidor JBoss (es decir, que pierde la Sticky Session).
En el servidor JBoss 1, teníamos la siguiente configuración en el fichero $JBOSS_HOME/configuration/host.xml :
<domain-controller> <local/> </domain-controller> <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:10.0.3.106}"/> </interface> <interface name="public">
<any-address/>
</interface> <interface name="unsecure"> <inet-address value="${jboss.bind.address.unsecure:10.0.3.106}"/> </interface> </interfaces>
… y tenemos que cambiar any-address (no funciona con JBoss en HA):
<domain-controller> <local/> </domain-controller> <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:10.0.3.106}"/> </interface> <interface name="public">
<inet-address value=»${jboss.bind.address:10.0.3.106}»/>
</interface> <interface name="unsecure"> <inet-address value="${jboss.bind.address.unsecure:10.0.3.106}"/> </interface> </interfaces>
En el servidor JBoss 2, también teníamos la siguiente configuración en $JBOSS_HOME/domain/configuration/host.xml :
<domain-controller> <remote host="${jboss.domain.master.address:10.0.3.106}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/> </domain-controller> <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:10.0.3.107}"/> </interface> <interface name="public">
<any-address/>
</interface> <interface name="unsecure"> <inet-address value="${jboss.bind.address.unsecure:10.0.3.107}"/> </interface> </interfaces>
… por lo que se cambió a lo siguiente (creo que no es necesario puesto que consulta los ficheros del servidor controlador) :
<domain-controller> <remote host="${jboss.domain.master.address:10.0.3.106}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/> </domain-controller> <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:10.0.3.107}"/> </interface> <interface name="public">
<inet-address value=»${jboss.bind.address:10.0.3.107}»/>
</interface> <interface name="unsecure"> <inet-address value="${jboss.bind.address.unsecure:10.0.3.107}"/> </interface> </interfaces>
La configuración de JBoss escuchando en todas las interfaces (<any-address/>) no funciona con el modo HA por lo que al eliminarlo, dejó de aparecer el error indicado y ya no se perdió la sesión del usuario.
0 comentarios