miércoles septiembre 20, 2006
Apache 2.2 + Tomcat 5.5-6 (II)
Vamos a realizar una instalación de varios Tomcat's balanceados pero sin tolerancia a fallos.
Usando el modo de sesiones 'enganchadas' a un Tomcat ('sticky session mode'), cuando un usuario inicie una sesión le será asignado uno de los Tomcat's para todas las peticiones que haga durante la vida de esa sesión (mediante una cookie JSESSIONID a la que se le añade el identificador de ese Tomcat) de tal manera que si este cae, perderá la sesión y todos los datos y deberá de volver a iniciar una nueva.
En contraposición, tenemos el balanceo de carga en el que se replican las sesiones entre los Tomcat's que forman el cluster, de tal manera que cuando alguno cae, el resto se hace cargo de las sesiones activas y el usuario no tiene constancia de ello. Naturalmente esto tiene un coste, nada despreciable, por lo que salvo para instalaciones de alta disponibilidad no suele ser necesario.
Con el montaje propuesto contaremos con dos ventajas fundamentales, escalar las peticiones que es capaz de servir una sola máquina y permitir seguir dando servicio aunque alguno de los Tomcat's caiga por cualquier motivo, como puede ser la caida de la máquina virtual de Java (JVM).
Para ello contamos con tres máquinas, una estará dentro de la DMZ (red perimetral entre la intranet y la red pública) y tendrá instalado el Apache web server 2.2 que se encargará de realizar el balanceo de carga, esto es, repartir las peticiones a los Tomcat's de cada máquina y que están encargados de generar las páginas dinámicas.
Primero instalaremos los Tomcat's, probaremos que funcionen correctamente, y después instalaremos y configuraremos el Apache http para una distribución OpenSuse 10.x
Suponiendo que ya tenemos instalada el Java SE (JDK 5.0) y la variable JAVA_HOME apunta a la instalación del JDK, procederemos a instalar los Tomcat's, si no, ir a la web de Sun, bajarlo e instalarlo según la documentación que proporciona.
Una vez el JDK esté OK, bajaremos la última versión de Tomcat 5.5 al directorio temporal, la descomprimiremos en un directorio (/usr/local/) y la duplicaremos para tener las dos instancias de Tomcat.
bipunto:/tmp # cd /usr/local/
bipunto:/usr/local/ # tar zxf /tmp/apache-tomcat-5.5.17.tar.gz
bipunto:/usr/local/ # cp -p apache-tomcat-5.5.17 apache-tomcat-5.5.17-a1
bipunto:/usr/local/ # mv apache-tomcat-5.5.17 apache-tomcat-5.5.17-a2
bipunto:/usr/local/ # ln -s /usr/local/apache-tomcat-5.5.17-a1 tomcat-1
bipunto:/usr/local/ # ln -s /usr/local/apache-tomcat-5.5.17-a2 tomcat-2
Ahora configuraremos las dos instancias de la primera máquina y posteriormente realizaremos lo mismo en la segunda máquina.
bipunto:/usr/local/ # cd tomcat-1/conf/
bipunto:/usr/local/tomcat-1/conf # vi server.xml
Para que no haya conflictos de puertos, cambiamos el 8005, por 18005, en el tomcat-1, y por 28005 en el tomcat-2, y lo mismo para el puerto AJP 8009 y el HTTP 8080, además añadimos un nombre único para cada Tomcat ubicándolo en el 'Engine' mediante el atributo 'jvmRoute' y que permitirá identificar la instancia a la que se enganchó la sesión.
Es decir, para el Tomcat cuyo fichero de configuración es '/usr/local/tomcat-1/conf/server.xml':
<Server port="8005" por <Server port="18005"
<Connector port="8080" por <Connector port="18080"
<Connector port="8009" por <Connector port="18009"
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1a" >
y para el otro Tomcat, con configuración en '/usr/local/tomcat-2/conf/server.xml':
<Server port="8005" por <Server port="28005"
<Connector port="8080" por <Connector port="28080"
<Connector port="8009" por <Connector port="28009"
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2a" >
Es aconsejable tener un usuario normal (que no sea root) para correr los Tomcat's, por lo que se tendrá que hacer un 'chown -R usertom /usr/local/tomcat-1' y lo mismo para el directorio 'tomcat-2'.
Con esto ya tenemos configurados los dos Tomcat's, los levantamos con el usuario pertinente mediante ./startup.sh, y vemos que ambas instancias están levantadas (podemos verlo con 'ps -ef|grep java') y responden en los puertos HTTP 18080 y 28080 (http://bipunto:18080/ y http://bipunto:28080/). Estos conectores los podremos posteriormente deshabilitar, aunque siempre van bien a efectos de comprobar que las instancias responden correctamente.
Para la otra máquina, lo mismo, salvo que los nombres de las 'jvmRoute', han de ser identificadores diferentes, algo como 'tomcat1b' y 'tomcat2b'.
Hasta aquí nada de especial que no tuviéramos que hacer para instalar el 'mod_jk'..
Technorati tags: tomcat, apache, mod_proxy_ajp, jvmRoute
Posted by Feliciano Borrego in Java at 20060920 Comentarios[2]Search This Site
Recent Entries
- HSPA USB Modem de MoviData
- Windows 7, el último S.O.
- Navegadores web en la Antártida
- En la tónica de hace 5 años
- Script para ordenar una tabla html print friendly (2/2)
- El definitivo script para ordenar una tabla html con javascript (1/2)
- Cuando la seguridad flaquea en sutilezas
- Recuperar los passwords de Firefox 3 (habiendo tenido FF2)
- Otro tonto error de un programador
- Incongruencias espacio temporales
- Día internacional del Software Libre
- Canon y la sopa boba
- Ideas y Buenas ideas
- Relanzamiento de cocoon.apache.org
- Wii con teclado USB
- Edicion en Roller off-line con w.bloggar
- Los términos mas buscados
- ¿Cuándo terminamos el proyecto?
- Recuperación de fotos (y II)
- Recuperar fotos borradas (I)
Personalmente prefiero que el contenido estatico y la maquina que reciba todos los ataques no sea un servidor de aplicaciones no vaya a ser que accedan a mis datos de conexion de BBDD y se monte un "cristo".
Tambien es mejor que el balanceador, apache u otro, permita la encriptacion ssl del contenido dinamico, de este modo me ahorro un tiempo de maquina en el servidor de aplicaciones
Enviado por batch4j en septiembre 25, 2006 a las 03:53 PM CEST #
Saludos
tengo una consulta
ya tengo montado mi tomcat en apache con el mod_jk
tengo un webapps en toncat donde incluyo tres aplicaciones
y tambien tengo tres virtualhost
www.mipagina.com
uno.mipagina.com
dos.mipagina.com
mi duda es como hago para entrar en un vortual host y crear una session y luego entrar a otro virtual host y conservar la session
en tomcat estoy utilizando SSO pero cuando ya estoy en apache ese SSO que he creado en tomcat solo me sirve para un solo virtual host
mas si entro a otro virtual host se pierde mi session
Atte.
ExZ
Enviado por exz en octubre 02, 2006 a las 10:48 PM CEST #