Balanceador de tomcats con apache

Hacer un balanceador de tomcats con apache

A veces no nos basta con un servidor para poder responder a todas las peticiones que nos llegan y necesitamos tener varios servidores. Pero esto tiene que ser invisible para los usuarios y por eso el punto de entrada es el mismo. Para ello podemos usar un balanceador que según le vayan llegando peticiones de los usaurios les ira redireccionando a un servidor u otro.

Para tener varios servidores con Tomctas instalados y un Apache que redireccione las peticiones a estos, tendremos que seguir los siguientes pasos:

  • Descargamos el instalador del apache (http://httpd.apache.org/).
  • Instalamos el apache.
  • Nos bajamos el conector jk de aqui (http://tomcat.apache.org/download-connectors.cgi): Vamos a Binary Releases, luego a win32 (si tenemos un windows de 32 bits) y por último entramos en jk-1.2.28. Hay una versión para los apache 2.0.x y otra para los apache 2.2.x, bajad la correspondiente al vuestro (para el apache 2.2.x sería mod_jk-1.2.28-httpd-2.2.3.so).
  • Paramos el apache.
  • Movemos el fichero del conector jk a la carpeta de modulos del apache (por defecto es C:\Archivos de programa\Apache Software Fundation\Apache2.2\modules) y lo renombramos como mod_jk.so.
  • Ahora tendremos que editar el fichero de configuración httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) y añadir la siguiente línea en la zona donde se cargan los demás módulos:
LoadModule jk_module modules/mod_jk.so
  • Crearemos el fichero workers.properies con la definición de los tomcats y del tipo de balanceador. Por ejmplo, imaginemos que tenemos dos tomcats en la misma máquina (localhost), uno con el conector de AJP/1.3 en el puerto 8009 y otro en el puerto 8019 y que queremos usar un balanceador lb. Entonces tendremos el siguiente fichero de configuración:
workers.tomcat_home=C:/tomcat-5.5.20
workers.java_home=C:/jdk1.5.0_03
 
worker.list=balancer
 
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
 
worker.worker2.port=8019
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
 
worker.balancer.type=lb
worker.balancer.balance_workers=worker1,worker2
worker.balancer.method=B
  • En el archivo httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) tendremos que configurar unos parametros del conector jk y pondremos las siguientes líneas en las que indicaremos donde escribir los logs, donde esta el fichero que define los workers y alguna cosa mas:
# Path to workers.properties
JkWorkersFile C:/Archivos de programa/Apache Software Fundation/Apache2.2/conf/workers.properties
 
# Path to jk logs
JkLogFile C:/Archivos de programa/Apache Software Fundation/Apache2.2/mod_jk.log
 
# Jk log level [debug/error/info]
JkLogLevel info
 
# Jk log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
 
# JkOptions for forwarding
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
 
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
  • Después de las líneas anteriores, en el fichero httpd.conf (por defecto estará en C:\Archivos de programa\Apache Software Fundation\Apache2.2\conf\) tendremos que indicar los path que queremos que se redireccionen a los tomcats y a cuales queremos que se redireccionen. Solo podremos direccionar explícitamente a los que esten puestos en la línea worker.list del workers.properties. Si queremos redireccionar a alguno que este dentro del balanceador, tendremos que ponerlos en esta línea también: worker.list=worker1,worker2,balancer. Por ejemplo, para que la url http://www.prueba.es/aplicacion sea redireccionada a algunos tomcats definidos en el archivo workers.properties, tendremos que poner alguna de las siguientes líneas dependiendo de a que lo queremos redireccionar (pondremos tantas líneas como sean necesarias):
# Para que envie al tomcat definido como worker1
JkMount /aplicacion worker1
 
# Para que envie a los tomcats definidos como worker1 y worker2
JkMount /aplicacion worker1 worker2
 
# Si queremos que lo envíe a los tomcats definidos en el balanceador
JkMount /aplicacion balancer

Comentarios

como deberia de probar el balanceador para verificar que este funcionando todo bien ?

Hola Danilo,

Creo que en el log del modjk pone cada petición a que servidor la envía. Con esto podrías comprobar si funciona.

Saludos

Impecable, es verdad alli encontre registro de los worker que estan dentro del balanceo, en mi caso son 2 .

 

cha gracias

Cuantas conexiones activas me aguanta???

Tendras Idea????

 

Voy a tener unas 2000 conexiones activas,   funcionara el balanceo???

Pues eso ya no te se decir. No llevo un control de accesos en estos casos. Pero actualmente si que estoy buscando alguna forma de controlar las peticiones a cada parte (apache, tomcats, ...) y generar gráficas para tener una idea más clara de toda estructura.

Saludos

Añadir nuevo comentario