Ir al contenido principal

Balanceo de carga web (Apache+Tomcat) en Ubuntu 11.10


Tomcat es un servidor web con soporte de servlets y  JavaServer Pages (JSP) de Sun Microsystems. Tomcat puede funcionar como servidor web por sí mismo, es usado como servidor web autónomo en entornos con alto nivel de tráfico y alta disponibilidad.

Dado que Tomcat fue escrito en Java, funciona en cualquier sistema operativo que disponga de la máquina virtual Java.


Apache Tomcat funciona como un contenedor servlets (programa que se ejecuta en un servidor) desarrollado bajo el proyecto Jakarta en la Apache Software Fundation.

Mediante estos servlets o programas podemos realizar configuraciones de alta disponibilidad y balanceo de carga. Tomcat se suele instalar en equipos externos al servidor web apache (balanceador de carga), y se pueden configurar para recibir peticiones las dos al mismo tiempo o como servidor secundario por si falla el primer tomcat.


Los pasos para configurar Apache + Tomcat 7 en Ubuntu 11.10 para conseguir que Apache realice balanceo de carga entre los distintos Tomcat son los siguientes:

  1. Instalamos apache:
    $ sudo apt-get install apache2
  2. Instalamos la versión libre de Java JRE:
    $ sudo apt-get install openjdk-7-jre
  3. Instalámos el módulo JK (mod_jk) de apache:
    $ sudo apt-get install libapache2-mod-jk
  4. Editamos el fichero "workers.properties" para configurar nuestros Tomcat:
    sudo gedit /etc/libapache2-mod-jk/workers.properties
    El fichero debe contener lo siguiente:




    workers.tomcat_home=/server/tomcat7
    workers.java_home=/usr/lib/jvm/java-6-sun-1.6.0.26
    ps=/
    worker.list=balancer
    
    worker.worker1.port=8009
    worker.worker1.host=192.168.1.250
    worker.worker1.type=ajp13
    worker.worker1.lbfactor=1
    
    worker.worker2.port=8009
    worker.worker2.host=192.168.1.251
    worker.worker2.type=ajp13
    worker.worker2.lbfactor=1
    
    worker.balancer.type=lb
    worker.balancer.balance_workers=worker1,worker2
    worker.balancer.method=B
    


    En la línea 1 debemos especificar la ruta del directorio de Tomcat (en caso de tener un Tomcat en el mismo host que el apache(balanceador).
    En la línea 2 debemos especificar la ruta del directorio Java JRE.
    En las líneas 6 y 11 se especifica el puerto de escucha del conector AJP13 (Por defécto 8009).
    En las líneas 7 y 12 se especifica la dirección IP de los servidores Tomcat.
    Por último en la línea 17 se especifican los nombres que se les asignarán posteriormente a los Tomcat (en este caso worker1 y worker2).

  5. El último paso es mapear las urls que queremos que se redirijan a Tomcat para esto necesitamos editar el fichero del Virtual Host que tengamos habilitado.
    En este caso como queremos que todas las peticiones se dirigan a los distintos tomat, y no al server apache, especificamos lo siguiente en el fichero /etc/apache2/sites-enabled/000-default entre las etiquetas VirtualHost *:80 y VirtualHost 
    JkMount /* balancer
    En el caso de que necesitemos usar tomcat para cargar un portal en concreto o aplicación web, y que las demas peticiones las resuelva apache, el código seria el siguiente (que no es el caso del ejemplo):
    JkMount /joomla/* balancer
    De esta manera cualquier petición dirigida hacia la dirección http://IP/joomla la resolverán los tomcat, el resto apache.
    Antes de reiniciar apache para aplicar los cambios, ejecutamos el siguiente comando en una terminal:
    sudo cp /etc/apache2/mods-available/jk.* /etc/apache2/mods-enabled/
    sudo /etc/init.d/apache2 restart
     Con esto ya tenemos apache y el módulo mod_jk preparado para el balanceo de carga web, ahora vamos a ver como instalar los Tomcat.
  6. Nos descargamos la última versión de Tomcat (7 actualmente) mediante el siguiente comando (o desde la url) y la movemos a la ubicación /server/tomcat7 (por ejemplo)

    wget http://apache.rediris.es/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.tar.gz


    tar xvzf apache-tomcat-7.0.27.tar.gz 


    mkdir /server/


    mv apache-tomcat-7.0.27.tar.gz /server/tomcat7

    Para iniciar tomcat /server/tomcat7/bin/startup.sh
    Para parar tomcat /server/tomcat7/bin/shutdown.sh


    El directorio de publicación de los Tomcat es /server/tomcat7/webapps/ROOT/
  7. Por último sólo nos queda configurar el parámetro "jvm" del fichero "server.xml" de tomcat, aunque tambien deberíamos establecer los usuarios en el fichero "tomcat-users.xml" :

    sudo gedit /server/tomcat7/conf/server.xml

Tenemos que buscar la línea (que estará comentada) con el parámetro jvmroute="" y descomentarla para que quede así:
En este caso es el "worker1", en el segundo tomcat (que estará en otro equipo) habrá que configurarlo como "worker2". (El segundo tomcat, worker2, podría estar instalado sobre cualquier SO)

Con esta configuración ya tenemos funcionando nuestro apache balanceando la carga entre dos Tomcat en distintos equipos, con lo que conseguimos alta disponibilidad, además de mayor seguridad, puesto que si uno de los servidores web (Tomcat) cae, las cargas se dirigirán automáticamente al Tomcat activo.

Nota: Los directorios de publicación de los tomcat (webapps/ROOT), deben contener el mismo contenido, para así al navegar obtener el mismo resultado sin importar que las peticiones HTTP vengan de un servidor web u otro.

Nota2: En todos los equipos que instalemos Tomcat, debemos de instalar la versión de Java JRE.

Página por defecto (index.jsp)



Comentarios

  1. Buen día, el tutorial esta bien explicado, aunque el punto 5 no le entendi bien esos archivos tienen varias propuedades y no especificaste donde escribirlo, si pudieras ejemplificar como esta tu arquitectura también sería de gran ayuda.

    ResponderEliminar
    Respuestas
    1. El parámetro JkMount /* se especifica entre las etiquetas VirtualHost *:80 y VirtualHost
      De todos modos he modificado el punto 5 para que quede más claro.

      En cuanto a mi arquitectura, lo tengo montado sobre dos equipos con Ubuntu 11.10, en el primero tengo el servidor apache y uno de los tomcat y en la otra máquina el segundo tomcat.
      Aunque se puede montar también con todo por separado, es decir, en una máquina instalamos apache, en otra un tomact, y en otra otro tomcat.....

      Quizás con esta foto te aclaras un poco más http://www.adictosaltrabajo.com/tutoriales/apache_tomcat_balanceo/esquema.png

      Eliminar
  2. Buen dia, ya tengo instalado todo mysql, tomcat, apache, phpmyadmin. Tengo un problema, ya que hice mi pagina y ya subi mi proyecto.WAR a tomcat, y como en mi pagina me tengo que logear obvianmente uso mi BD en mysql el cual ya subi mi script y ya cheque tablas y todo esta perfecto, pero no puedo logearme!
    Alguna sugerencia?
    Estaba pensando si hay alguna manera de ver el error que me lanza, de ser asi en que parte lo veo?

    PD. Mi pagina funciona correctamente en mi desarrollo! yo creo que el problema esta en mi servidor! =(

    ResponderEliminar
  3. Hola Amigos les tengo una pregunta:
    Tengo un cluster con 2 apache en 2 servidores con oracle linux y una base de datos en oracle rac, que pasa si un proceso esta generando unos 1000 registros y pasa algo y se me cae el nodo1 de aplicaciones donde esta ejecutandose el proceso (en el caso de la base de datos el rac se encarga de hacer lo suyo y no hay problema), existe alguna forma en que ese proceso se traslade al nodo2 que si esta funcioando?. Espero que se entienda mi respuesta.

    ResponderEliminar

Publicar un comentario