Fundamentos de Payara Server Parte 4 - Balanceo de Carga a través de Instancias de Payara Server con Servidor Web Apache
Originally published on 20 Jul 2017
Last updated on 15 Feb 2018
Continuando con nuestra serie de blogs de introducción, este blog va a demostrar como añadir la capacidades de balanceo de carga a un Servidor Web Apache y asi re-enviar las peticiones HTTP a nuestro cluster de Payara Server.
See here for the original version in English language.
Un balanceador de carga puede redirigir peticiones a múltiples instancias, principalmente con el propósito de distribuir las peticiones entrantes entre los miembros del cluster con base en reglas predeterminadas. Eso puede ser mediante un simple algoritmo de "round-robin", donde la carga de trabajo es distribuida a cada instancia por turnos, o un algoritmo de carga ponderada donde las peticiones son entregadas con base en un peso asignado para cada miembro del cluster.
Un balanceador de carga juega un rol importante en nuestro cluster:
Si has estado siguiendo esta serie, hasta ahora hemos:
- Configurado un servidor Web Apache en Ubuntu.
- Configurado el Reenvío de peticions hacia el DAS de Payara Server.
- Creado dos instancias "locales" de Payara Server en un cluster Hazelcast.
Este articulo va a demostrar como puedes habilitar tu Servidor Web Apache para balancear la carga de peticiones a través de nuestro cluster utilizando el módulo mod_proxy_balancer del servidor Web Apache.
Requisitos
Para seguir este blog necesitaremos el cluster creado en la Parte 3 y nuestra configuración de Apache de la Parte 2.
Tal como está actualmente, este entorno se compone de:
- Nuestro cluster:
- Una máquina Ubuntu 16.04 con JDK8, Servidor Web Apache y Payara Server instalado, con un DAS y una instancia local, "local-instance".
- Una máquina Ubuntu 16.04 con JDK8, OpenSSH y Payara Server instalado, con una única instancia de Payara Server, "second-Ubuntu-host-instance", controlada por el DAS de la primera máquina.
- La aplicación de ejemplo rest-jcache tomada del repositorio de ejemplos de Payara.
Dado que este articulo está demostrando las capacidades de balanceo de carga de Apache, vamos a necesitar la aplicación de ejemplo clusterjsp, la cual desplegaremos en nuestro cluster.
Desplegando la aplicación clusterjsp
Clusterjsp es una aplicación web simple que puede mostrar información de sesiones HTTP junto a otros detalles de la instancia del servidor que respondio la peticion. Esto debería verificar si Apache está balanceando la carga de nuestras peticiones entre las dos instancias del cluster!
Desplegaremos la aplicación dirigiéndonos a la vista de Aplicaciones en la consola de administración, asegurandonos de asociar la aplicación a nuestras dos instancias "locales" (en nuestro caso, "local-instance" y "second-Ubuntu-host-instance"), asignando los demás valores de configuración a los valores por defecto.
Con nuestra aplicación desplegada, hacemos clic en "Ejecutar" para mostrar los enlaces de la aplicación clusterjsp:
Ahora tenemos los destinos que necesitamos para añadir a nuestro balanceador de carga! Tenemos la elección de utilizar ya sea HTTP o HTTPS, aquí, ya que se puede acceder directamente a Payara Server si es necesario. Como vamos a utilizar Apache, podemos finalizar la comunicación SSL cuando las peticiones alcanzan el balanceador de carga en lugar de continuar pagando el coste de rendimiento de HTTPS en esta etapa. Sin embargo, debe tenerse en cuenta que el coste de rendimiento de HTTPS no es relevante en caso de que tanto Apache y Payara Server soporten HTTP/2 (Payara 5 tendra soporte oficial mediante Servlet 4.0), por lo cual HTTPS será mucho más eficiente que HTTP.
Configurando el Servidor Web Apache como un Balanceador de Carga
Con nuestro entorno configurado, podemos empezar a modificar la configuración del Servidor Web Apache. Si has estado siguiendo esta serie de articulos deberías tener ya instalado el servidor Web Apache con el modulo mod_proxy_http, y un sitio configurado llamado "payaraSite" en /etc/apache2/sites-available/payaraSite.conf, que se debería ver así:
Mientras que esto ha funcionado cuando cuando estábamos utilizando las directiva ProxyPass para reenviar el trafico al DAS, ahora tenemos dos miembros del cluster en instancias separadas cuyos destinos estan en http://192.168.93.133:28080/ y http://192.168.93.134:28080/, por lo que no queremos seguir enviando tráfico al DAS.
No es posible añadir múltiples destinos a la misma directiva ProxyPass, por eso necesitamos añadir el modulo mod_proxy_balancer, que nos permite efectivamente configurar nuestra directiva ProxyPass con una lista de destinos.
Configurando el módulo Proxy Balancer
La configuración modificada es similar a la que habíamos hecho previamente para re-enviar el tráfico a una URL específica, excepto que la URL apuntará ahora a un bloque de posibles destinos definidos dentro de una etiqueta <Proxy>, junto con un método de balanceo de carga para determinar como será elegido el destino correspondiente.
Para empezar, primero debemos habilitar el módulo proxy_balancer y un método simple de balanceo de carga utilizando las herramientas de asistencia de nuestro servidor Web Apache que instalamos como parte del paquete apache2 de Ubuntu:
sudo a2enmod proxy_balancer lbmethod_byrequests
El método by_requests de balanceo de carga simplemente alterna entre instancias siguiendo un algoritmo tipo round-robin. Con ambos modulos activos, volvemos a abrir el archivo de configuración payaraSite.conf con un editor de tu elección. Primero necesitamos crear un bloque <Proxy> que contenga la lista de destinos donde nuestra aplicación está alojada de la siguiente manera:
<Proxy balancer://payara> BalancerMember http://my-local-host:8080 BalancerMember http://my-remote-host:8080 </Proxy> ProxyPass / balancer://payara/ ProxyPassReverse / balancer://payara/
Una vez tenemos una lista de destinos, podemos cambiar las directivas ProxyPass para utilizar uno de los destinos que acabamos de especificar, apuntando al bloque <Proxy>. Podemos crear múltiples bloques <Proxy> con diferentes nombres para referirnos a diferentes listas de destinos, dependiendo de cuales aplicaciones serán tenidas en cuenta por el balanceo de carga y en que destinos fueron desplegadas.
En nuestro caso, el archivo de configuración debe verse similar a este:
Guardamos la configuración y reiniciamos el servidor:
sudo service apache2 restart
Ahora, en la máquina donde Apache está instalado, cada vez que naveguemos a la página http://localhost/clusterjsp encontraremos que cada petición es atendida por ambas instancias del cluster:
Resúmen
Con esto hemos implementado un balanceo de carga básico para difundir las peticiones a través de múltiples instancias de Payara Server, todo gracias al servidor Web Apache y sus módulos mod_proxy_http y mod_proxy_balancer. Esta configuración es relativamente ingenua y no toma el manejo de sesiones persistentes, por lo que en nuestro próximo articulo habilitaremos estas para estar seguros de que las sesiones de los usuarios estarán ligadas a una única instanca de Payara Server, en lugar de rebotar entre las dos.
See here for the original version in English language
Related Posts
Jakarta EE Media & Community Challenge - Winning Entries: Part 3
Published on 25 Nov 2024
by Chiara Civardi
0 Comments
The Jakarta EE Media and Community Challenge initiated by Payara celebrates the innovation and creativity that thrives within the Jakarta EE community. Designed as a platform to inspire, educate and showcase collaboration, the competition ...
Join us for the London Java Community Unconference 2024
Published on 21 Nov 2024
by Dominika Tasarz
0 Comments