meta data de esta página

Tomcat Cluster

Aplicaciones

Para hacer que las aplicaciones funcionen con el cluster podemos hacerlo de dos formas:

  1. En el descriptor de despligue de la aplicación (application's deployment descriptor) (WEB-INF/web.xml)incluir el elemento <distributable />
  2. La otra opción es simplemente añadir el atributo “distributable” en el contexto principal de la aplicación <Context distributable=“true”>

Además de lo anterior hay que tener en cuenta en la aplicación lo siguiente :

  • Los atributos de sesión deben ser implementados mediante java.io.Serializable.
  • HttpSession.setAttribute() debe de ser llamada cada vez que se hacen cambios en un objeto que pertenece a la sesión
  • Las sesiones no deberían de ser muy grandes para evitar la sobrecarga de tráfico en la replicación de sesiones

Para desplegar la aplicación que queramos configurar en alta disponibilidad, antes de desplegarla en cada uno de los tomcats, deberemos añadir la propiedad <distributable /> en el web.xml de la aplicación.

Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">
    <distributable />

FarmWarDeployer

Permite que poniendo un war dentro de la carpeta definida como watchDir, el war en cuestión se despliegue en todos los servidores del cluster.

Esto sólo debe de hacerse en el servidor que consideremos como master de la configuración para tener un unico punto de publicación. En el resto de los nodos del cluster ponemos el parametro watchEnabled=false

Ejemplo

Añadir las siguientes líneas al server.xml en la parte de configuración del cluster

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                 tempDir="/opt/tomcat/temp/"
                     deployDir="/opt/tomcat/webapps/"
                     watchDir="/opt/tomcat/despliegue/"
                     watchEnabled="enable"/>
deployDir y watchDir deben de ser directorios distintos

Referencias