Seleccionar página

Pérdida de la sticky session con Apache, mod_cluster y 2 servidores JBoss EAP

por | Mar 18, 2014 | JBoss AS / JBoss EAP / WildFly

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.

Te puede interesar…

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *