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