Embed
Email

REPLICACIóN DE SESIONES

Document Sample

Shared by: dandanhuanghuang
Categories
Tags
Stats
views:
0
posted:
12/5/2011
language:
Spanish
pages:
7
ADMINISTRACIÓN • Cluster









Cómo configurar Tomcat en cluster





REPLICACIÓN

DE SESIONES



En los entornos empresariales suele ser un requisito tener en funcionamiento aplicaciones críticas



ejecutándose en alta disponibilidad y balanceo de carga entre varios servidores. Veamos cómo se



configura Apache Tomcat para estos menesteres. POR CAYETANO DELGADO ROLDÁN







A

pache Tomcat es un contenedor implicado), pero también hay que tener todos los servidores del cluster. Para el

de servlets desarrollado en Java en cuenta que los servidores pueden ser replicado de sesiones y despliegue en

por la Apache Software Founda- compartidos entre varias aplicaciones que granja se utilizan peticiones (pings) mul-

tion que implementa las especificaciones funcionen en entornos similares. Puede ticast, que no es más que enviar la

de JSP (Java Server Pages) y Servlets de verse un listado de direcciones IP de información en una red a múltiples desti-

Sun Microsystems. A partir de la versión ejemplo en la Tabla 1. nos simultáneamente, enviándose una

5.0, Tomcat incluye la posibilidad de con- La definición de clustering en Tomcat sola vez y copiándose a nivel de enlace a

figurar varias instancias en cluster. ¿Por tiene mucho que ver con el replicado de todos los rincones de la red. Evidente-

qué íbamos a querer configurar Tomcat sesiones, que no es más que distribuir mente, esto genera demasiado tráfico,

en cluster? Pues porque los beneficios que una sesión HTTP entre los distintos nodos por lo que hay que tener cuidado con él

se obtienen son múltiples: vamos a tener de los que se compone el cluster, sesión y filtrar los pings multicasts en switchs

alta disponibilidad y alto rendimiento, ya cuyo estado se mantiene en una cookie gestionados.

que el tráfico y ejecución se distribuirán dentro del navegador. Existen tres formas

entre varias máquinas, y por otro lado, se de habilitar el replicado de sesiones:

obtiene tolerancia a fallos, ya que la caída • Usando persistencia de sesiones y

de una de las máquinas no va a afectar al guardándolas en un sistema de fiche-

funcionamiento de las aplicaciones, que- ros compartido

dando un resultado transparente para el • Usando persistencia de sesiones y

usuario. guardándolas en una base de datos

Existen varios modelos distintos a la compartida

hora de configurar un sistema que ofrezca • Usando replicación en memoria

posibilidades de alta disponibilidad, tole- mediante SimpleTcpCluster incluido

rancia a fallos y escalabilidad. Por en las últimas versiones de Tomcat 5

ejemplo, la arquitectura mostrada en la Junto a la réplica de sesiones, un con-

Figura 1, donde cada servicio (Apache, cepto bastante popular en la

Tomcat y BD) estará ubicado separada- implementación de clusters es el desplie-

mente en máquinas distintas. Esta gue en granja, que permite desplegar

solución está claro que es la que mayor una aplicación en un nodo del cluster y Figura 1: Arquitectura modelo de los distin-

coste supone (por la cantidad de “hierro” que dicho despliegue se replique en tos sistemas en cluster.









60 Número 19 WWW.LINUX-MAGAZINE.ES

Cluster • ADMINISTRACIÓN









Instalación en nodos 1.5.0, que se puede descargar desde la bastaría con ejecutar el script $CATA-

Al estar desarrollado en Java, Tomcat va a página de Sun [1] y que instalaremos, por LINA_HOME/bin/startup.sh, o bien el

funcionar en cualquier sistema operativo y ejemplo, en /opt/jdk1.5.0_07, directorio script

plataforma para la que exista una máquina que será el contenido de la variable de $CATALINA_HOME/bin/shutdown.sh para

virtual, así que la instalación y entorno $JAVA_HOME, que puede defi- detener la ejecución. Respecto a la

configuración definida a continuación nirse en el fichero /etc/profile.d/java.sh (en configuración, se realiza en el fichero

debería ser similar en cualquier entorno. CentOS) o /etc/profile (en Debian). La ins- $CATALINA_HOME/conf/server.xml, que

Nosotros vamos a usar Linux, como no iba talación de Tomcat es bastante sencilla, no es más que un fichero XML con una

a ser de otro modo, concretamente la dis- basta con descargar de la web de Tomcat serie de directivas:

tribución CentOS, aunque también habrá [2] el paquete “Core” correspondiente a la • es el elemento raíz de toda

algunas referencias a Debian. La instala- versión 5.5.17, y descomprimir, por ejem- la configuración.

ción y configuración inicial de Tomcat se plo, en /opt/tomcat55-nodo1. Este • representa un grupo de

detallará para uno de los nodos del cluster directorio se puede almacenar en la varia- conectores.

(nodo1) y luego se especificarán los cam- ble de entorno $CATALINA_HOME. Por • representa las interfa-

bios necesarios para replicar la instalación defecto, Tomcat viene configurado con su ces de clientes externos que envían

en el segundo nodo (nodo2). propio servidor web autónomo configu- peticiones a (y reciben respuestas de)

Antes de instalar Tomcat, hay que tener rado en el puerto 8080. El puerto 8005, un Service particular, pueden ser de

instalada y configurada una máquina vir- además, se utiliza para enviar los coman- tipo HTTP y AJP.

tual de Java (JVM), de Sun o IBM, versión dos de gestión al servidor Catalina. Es • Contenedores, que son los componen-

importante tener esto en cuenta ya que es tes que procesan las peticiones

Listado 1: Ejemplo de uno de los errores típicos que nos pode- recibidas y generan las correspondien-

jk.conf mos encontrar si esos puertos ya tes respuestas. Un contenedor de tipo

01 LoadModule jk_module estuviesen en uso por cualquier otro pro-

ceso. Tabla 1: Direcciones IP de

modules/mod_jk.so

02 Como el propósito de este artículo no es servidores

03 JKWorkersFile una introducción a Tomcat, para aquellos

que quieran conocer en profundidad cómo Servidor IP

“conf/workers.properties”

Servidor web 192.168.10.1

04 JkLogFile “logs/mod_jk.log” funciona y se configura, tendrán que

Tomcat nodo1 192.168.10.2

05 JkLogLevel error pasarse por la documentación oficial dis-

Tomcat nodo2 192.168.10.3

06 JkMount /* front ponible en [3]. De todas formas, a modo

Servidor BD 192.168.10.4

de resumen rápido, para iniciar Tomcat







WWW.LINUX-MAGAZINE.ES Número 19 61

ADMINISTRACIÓN • Cluster









Listado 2: Ejemplo de configuración CATALINA_HOME/conf/server.xml

01 23 xmlValidation=”false” ter”

02 48

className=”org.apache.catalina. 24 path=”/servlets-examples” 49

03

className=”org.apache.catalina. docBase=”servlets-examples” 50

mbeans.ServerLifecycleListener” distributable=”true”/> 51 25 managerClassName=”org.apache.ca .*\.png;.*\.htm;.*\.html;.*\.cs

05

className=”org.apache.catalina. ager” 53 expireSessionsOnShutdown=”false cluster.session.JvmRouteBinderV

06 ” alve”

07 28 54

08

name=”UserDatabase” 29 55

atabase” clusterName=”TOMCAT cluster”> 56 mcastPort=”45564” 59

13 36 watchDir=”${catalina.base}/war-

14 mcastFrequency=”500” listen/”

15 37 60

16 watchEnabled=”true”/>

address=”192.168.10.2” 38 61

port=”8009” 39

protocol=”AJP/1.3” /> ” 63

18 41 64

19

defaultHost=”localhost” 42 66

jvmRoute=”nodo1”> tcpListenPort=”4001” 67

20

resourceName=”UserDatabase”/> 45

22 recibe todas las respuestas sepa el lugar al que redireccionar las

(ajp13)

de un , un ges- peticiones ante una caída y recupera-

07 worker.nodo1.type=ajp13

tiona todas las peticiones de un ción.

08 worker.nodo1.host=192.168.10.2

determinado host virtual y un gestiona las peticiones de una el conector HTTP/S del puerto 8080,

10 worker.nodo1.lbfactor=1

determinada aplicación web. que no se va a usar, ya que sólo vamos

11 worker.nodo1.cachesize=10

• Otros componentes, que pueden resi- a utilizar el conector AJP en el puerto

12 worker.nodo1.cache_timeout=600

dir dentro de un o de 8009, que servirá para sincronizar con

13

un . el servidor web Apache HTTPD. De

worker.nodo1.socket_keepalive=

Ahora vamos a por la configuración. La todas formas, es habitual dejar el

1

verdad es que pueden dejarse por defecto conector 8080 en los entornos de

14 worker.nodo1.socket_timeout=60

la inmensa mayoría de los parámetros, desarrollo. También puede indicarse la

15 # Set properties for nodo2

algunos de ellos se pueden quitar porque dirección IP donde escuchará el conec-

(ajp13)

están comentados, o simplemente porque tor, que aunque no es obligatorio, es

16 worker.nodo2.type=ajp13

están activados a modo de ejemplo, pero útil en el caso de que tengamos varias

17 worker.nodo2.host=192.168.10.3

no suelen ser necesarios. Respecto a los tarjetas de red con distintas IP.

18 worker.nodo2.port=8009

que se pueden quitar o. por el contrario • Como contexto se deja el de una de las

19 worker.nodo2.lbfactor=1

son imprescindibles, nos lo irá dando la aplicaciones web que vienen como

20 worker.nodo2.cachesize=10

experiencia de instalación de tipo de entor- ejemplo. En este caso se trata de los

21 worker.nodo2.cache_timeout=600

nos. La parte que hace referencia a la ejemplos de servlets, que además nos

22

configuración del cluster viene comentada servirá más adelante para probar el

worker.nodo2.socket_keepalive=

por defecto, por lo que habría que quitar replicado de sesiones. En dicho con-

1

los comentarios que engloban a texto es muy importante el parámetro

23 worker.nodo2.socket_timeout=60

. Las etiquetas de distributable=”true”, que indicará al

24 # Set properties for front

Cluster se pueden poner tanto a nivel de servidor Tomcat que dicha aplicación

(lb) which use nodo1 and nodo2

como a nivel de , con tiene que mantener la sesión en todos

25 worker.front.type=lb

lo que conseguiremos, respectivamente, los nodos del cluster.

26

clusterizar Tomcat a nivel de todo el servi- • La configuración del cluster establece

worker.front.balance_workers=n

dor, o bien por cada uno de los hosts ese nodo como máster en el desplie-

odo1,nodo2

virtuales configurados. Para configurar un gue (Sender) de las aplicaciones en la

27

cluster con los parámetros por defecto (por granja en modo “pooled”. Las otras

worker.front.sticky_session=tr

ejemplo para entornos de pruebas o opciones de replicación posibles son

ue

desarrollo), bastaría con añadir la opción synchronous, asynchronous o fastas-

yncqueue.

instalación en el nodo2 cambiando cómo se descubren entre sí ambos nodos y

simplemente la dirección IP en el se replican las sesiones que haya

en Engine o Host. parámetro address del conector y del disponibles. Un ejemplo de este

En el Listado 2 puede verse un fichero cluster, así como cambiar nodo1 por nodo2 funcionamiento se puede ver en la Figura 3.

de ejemplo de configuración completa para en el parámetro jvmRoute en la directiva

el nodo1. Veámoslo más en detalle: Engine. Y ahora manos a la obra. Iniciamos Balanceando la carga

• Se añade en Engine el parámetro el nodo1 y nos fijamos en el fichero de Como balanceo de carga se podrían utili-

jvmRoute=”nodo1”, que en realidad trazas CATALINA_HOME/logs/catalina.out zar distintas técnicas: vía DNS (con

se usa en arquitecturas con más de dos con nuestro paginador favorito (a mí me políticas de resolución de IP en bucle

nodos, para que la máquina virtual gusta less y pulsar F), esperamos a que RoundRobin), o bien con algún servicio







WWW.LINUX-MAGAZINE.ES Número 19 63

ADMINISTRACIÓN • Cluster









tipo Linux Virtual Server en cada uno de

Tabla 3: Tipos de workers

los nodos para que hagan el balanceo de

carga a nivel de red, o incluso se podría Tipo Descripción

usar la aplicación balancer que viene de ajp12 Worker que implementa el protocolo ajpv12. (a extinguir)

ejemplo con Tomcat. Nosotros vamos a ajp13 Worker que implementa el protocolo ajpv13.

usar mejor el servidor web Apache jni Worker que implementa peticiones JNI.

HTTPD, configurado con el módulo lb Worker para balanceo de carga.

status Worker de estado para gestión de balanceo de carga.

mod_jk disponible dentro de Tomcat Con-

nectors [4]. Para instalarlo se podría

utilizar el paquete que exista en la distribu- significado de los llamados workers, cuyo Listado 4: Script de inicio

ción en cuestión (mod_jk-ap20 en CentOS fichero de configuración se referencia /etc/init.d/tomcat

o libapache2-mod-jk en Debian), pero por mediante el JKWorkersFile, ubicado en el

01 #!/bin/bash

compatibilidad con las últimas versiones directorio conf/ de Apache. ¿Qué es un

02 #

de Tomcat que estamos usando, es preferi- worker? Pues es una instancia de Tomcat

03 # tomcat

ble compilarlo a partir de las fuentes. Para que ejecuta peticiones de servlets recibidas

04 #

ello bastaría con descargar la versión desde un servidor web, o lo que es lo

05 # chkconfig: 345 63 37

1.2.15 y tener instalado el paquete de mismo, el servidor Apache se encargará,

06 # description: Start up the

desarrollo de Apache (como siempre, mediante la directiva JkMount, de redirigir

Tomcat servlet engine.

httpd-devel en CentOS y apache2-dev en la url de la petición recibida hacia un

07

Debian) que proporciona apxs (APache worker concreto. En el fichero de ejemplo

08

eXtenSion tool). se establece que todas las peticiones

CATALINA_HOME=”/opt/tomcat55-n

recibidas (/*) se redirijan al worker

odo1/”

tar -xzvf jakarta-tomcat-U “front”.

09

connectors-1.2.15-src.tar.gz Vamos ahora a por el fichero del Listado

10 case “$1” in

cd jakarta-tomcat-connectorsU 3, workers.properties, donde se definen los

11 start)

-1.2.15-src/jk/native distintos tipos de workers desplegados,

12 if [ -f

./configure —with-axps=/usrU como los indicados en la Tabla 3. En nues-

$CATALINA_HOME/bin/startup.sh

/sbin/axps tro caso, se trata de un único worker, que

];

make va a trabajar como balanceador de carga.

13 then

Ojo porque en la directiva workers.list sólo

14 echo $”Starting

Para instalarlo, copiamos el módulo resul- se incluyen los workers, separados por

Tomcat”

tante en el directorio de módulos del comas, que vayan a ser usados en el

15 /bin/su tomcat

servidor web (/usr/lib/httpd/modules/ en fichero jk.conf, los nodos que se conecten

$CATALINA_HOME/bin/startup.sh

CentOS y /usr/lib/apache2/modules/ en a los nodos de un cluster sólo se usan en la

16 fi

Debian): definición del worker de tipo “lb”.

17 ;;

El fichero de configuración comienza

18 stop)

cp apache-2.0/mod_jk.so U con la definición de varias propiedades

19 if [ -f

/usr/lib/httpd/modules/ comunes, como es el directorio de logs de

$CATALINA_HOME/bin/shutdown.sh ];

Apache (utilizado para que el módulo

20 then

Ya sólo queda cargar y configurar el mod_jk, que también guarda trazas) y un

21 echo $”Stopping

módulo en el servidor. Para ello creamos parámetro “ps” que se utiliza para indicar

Tomcat”

un fichero jk.conf como el del Listado 1, el separador de rutas (/ en Linux/Unix y \

22 /bin/su tomcat

ubicado en el directorio de carga para Windows). Después de definir el

$CATALINA_HOME/bin/shutdown.sh

automática de Apache (/etc/httpd/conf.d número de workers existentes, se pasa a

23 fi

en CentOS y /etc/apache2/conf.d en detallar el funcionamiento de cada uno.

24 ;;

Debian). Es ahora cuando entra en juego el Como vemos, existe un worker por cada

25 restart)

26 /bin/su tomcat

$CATALINA_HOME/bin/shutdown.sh

27 sleep 5

28 /bin/su tomcat

$CATALINA_HOME/bin/startup.sh

29 ;;

30 *)

31 echo $”Usage: $0

{start|stop|restart}”

32 exit 1

33 ;;

Figura 2: Página inicial de Tomcat Figura 3: Muestra de los ficheros de logs de

34 esac

accediendo desde la IP del balanceador. las dos instancias de Tomcat en el arranque.









64 Número 19 WWW.LINUX-MAGAZINE.ES

ADMINISTRACIÓN • Cluster









uno de los nodos, cuyo tipo es ajp13, ción y activado en los niveles de ejecución incluir en nuestra instalación de la JVM.

donde se especifica también la dirección IP típicos mediante chkconfig tomcat on en Para ello, copiamos o enlazamos en:

y el puerto donde están escuchando los CentOS y en Debian update-rc.d tomcat

respectivos Connectors definidos en Tom- defaults. cd /opt/jdk1.5.0_07/jre/lib/i386/

cat. También se pueden indicar aquí otros Otra mejora posible sería optimizar Tom- ln -s /usr/local/apr/lib/U

parámetros interesantes como el peso cat mediante la compilación nativa, ya que libtcnative-1.a libtcnative-1.a

lbfactor del worker dentro del balanceo de las últimas versiones de Tomcat 5 están inte- ln -s /usr/local/apr/lib/U

carga, el tamaño de la caché y el tiempo de gradas con la Apache Portable Runtime[ 7], libtcnative-1.so libtcnative-1.so

refresco. Ya por último, se define el worker que es un subproyecto de Apache para la ln -s /usr/local/apr/lib/U

“front”, que se encargará de balancear las creación de un paquete de librerías que sir- libtcnative-1.so.2 libtcn

peticiones entre los workers, separados por van de abstracción consistente a tive-1.so.2

coma, en balance_workers. Un parámetro implementaciones específicas por plata- ln -s /usr/local/apr/lib/U

bastante importante a tener en cuenta es el forma. Esto rompería a priori la portabilidad pkgconfig/ pkgconfig

de sticky_session o sesión persistente, que de Tomcat pero por contra se obtienen múl-

hace que las peticiones se redirijan siem- tiples beneficios como… Ahora sólo habría que reiniciar Tomcat et

pre al mismo nodo en el que se haya • … funcionalidades avanzadas de voilà. Por cierto, hay un pequeño pro-

creado la sesión inicialmente, y sólo pasa- Entrada/Salida blema en lo que respecta al

ría a usarse el segundo nodo cuando el • … funcionalidades a nivel de sistema direccionamiento IP en esta versión de

primero dejase de existir. operativo y de gestión de procesos nati- Tomcat, y es que el parámetro address del

En la documentación de los conectores de vos, que redundará en la obtención de Connector AJP tiene que estar en IPv6 en

Tomcat [6] se puede ver el significado de mejores parámetros de estado y con- lugar de IPv4. Este problema estará solu-

todas las directivas disponibles tanto en lo sumo de proceso y memoria cionado en la próxima versión 5.5.18.

que respecta al módulo, como a la • … la obtención de una superior escala- Mientras tanto, habría que traducir el for-

configuración de los workers. bilidad y rendimiento. mato de las IP 192.168.10.2 y .3 a IPv6 en

Una vez creados los ficheros descritos, Para instalar APR se podrían utilizar los los conectores que tengan especificado el

bastaría con reiniciar Apache y empezar a paquetes precompilados de cada distribu- parámetro address, aunque ya vimos que

jugar un poco con las sesiones. En la Figura ción, pero mejor vamos a compilar la última no era obligatorio especificarlo.

2 podemos ver el funcionamiento de cómo versión disponible en su web [7], la 1.2.7, en

acceder directamente a la IP del servidor la que realizaremos los pasos típicos de Conclusiones

web: http://192.168.10.1/, donde se nos compilación (huelga decir que nos hará falta En definitiva, usando Apache Tomcat es

mostraría la página por defecto de Tomcat, y tener instalado el compilador gcc y make posible desplegar una aplicación crítica

si usamos los servlets de ejemplo que se previamente): funcionando con tolerancia a fallos y

incluyen en Tomcat (http://192.168.10.1/ existen muchas arquitecturas distintas con

servlets-examples/), podemos ir viendo tar xvjf apr-1.2.7.tar.bz2 balanceo de carga y alta disponibilidad.

cómo crear sesiones y alojar parámetros en cd apr-1.2.7 Ahora sólo queda que la aplicación esté

cookies, iniciar varios navegadores y com- ./configure && make preparada para funcionar en un entorno en

probar cómo se balancea la carga asignando make install cluster, aunque eso ya daría para otro

cada petición a un nodo distinto. También artículo. I

podríamos simular la caída de un nodo for- Mediante estos pasos se nos instalarán en

zando la salida de uno de ellos y seguir /usr/local/apr los componentes necesarios RECURSOS

haciendo peticiones al servidor y comprobar que implementan el acceso nativo. Ahora

[1] Página de descarga de JDK de Sun:

cómo se redirigen las peticiones sólo al nodo tocaría instalar los wrappers JNI de Tomcat

http://java.sun.com/javase/

que está en funcionamiento. Mola ¿no? para que usen APR, además nos hará falta

downloads/index.jsp

tener instalado el paquete de desarrollo de

Mejorando la instalación OpenSSL (openssl-devel en CentOS, libssl-

[2] Página de descarga de Tomcat 5.5.x:

http://tomcat.apache.org/

Como mejoras principales a realizar a la dev en Debian): download-55.cgi

configuración anteriormente detallada,

[3] Documentación de Tomcat 5.5: http://

podrían realizarse algunas consideraciones cd $CATALINA_HOME/bin

tomcat.apache.org/tomcat-5.5-doc/

de seguridad, como ejecutar Tomcat con su tar xvzf tomcat-native.tar.gz

[4] Página de descarga de Tomcat Con-

propio usuario no privilegiado tomcat, y cd tomcat-native-1.1.3U

nectors: http://tomcat.apache.org/

luego asignar permisos reducidos a los direc- /jni/native download-connectors.cgi

torios propios de la instalación de Tomcat. ./configure —with-apr=/usrU

[5] Documentación de Tomcat Connec-

Por ejemplo, los directorios imprescindibles /local/apr/bin/apr-1-config U

tors: http://tomcat.apache.org/

serían conf, logs, work y webapps. Ya sólo —with-java-home=/optU connectors-doc/

faltaría crear el típico fichero script de inicio /jdk1.5.0_07

[6] Documentación de Apache HTTPD:

de Tomcat para que se ejecute en cada reini- make && make install http://httpd.apache.org/docs/2.0/

cio del servidor. Un ejemplo sencillo podría

[7] Apache Portable Runtime: http://apr.

ser el detallado en el Listado 4, ubicado en Que generará una serie de librerías JNI en apache.org/

/etc/init.d/tomcat, con permisos de ejecu- /usr/local/apr/lib/ que tendremos que









66 Número 19 WWW.LINUX-MAGAZINE.ES



Related docs
Other docs by dandanhuanghua...
CSCE_Postgrad_Research_Students_Guidelines
Views: 0  |  Downloads: 0
F
Views: 6  |  Downloads: 0
SDS_User_Manual
Views: 3  |  Downloads: 0
systémy - FEL wiki
Views: 0  |  Downloads: 0
Alan Kalter - Bio 020812
Views: 0  |  Downloads: 0
Battery Balancer - Control Board
Views: 0  |  Downloads: 0
cocuk_1_erkekler
Views: 0  |  Downloads: 0
CARLSON.TESTIMONY
Views: 0  |  Downloads: 0
New_York_2011_info_letter_1_
Views: 0  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!