twitter
    Sigueme en el Twitter :-)

09 mayo 2011

LoadBalancer con Apache

En el post anterior comentaba como usar mod_proxy con lighttp, aunque no tiene mucho que ver con este tema, el punto es siempre la "disponibilidad".
Antes de empezar lanzo la pregunta, como creen uds. que funcionan las grandes web site que existen dentro de lo que conocemos como internet?...o como manejan los diferentes web servers la cantidad de usuarios que visitan una web?, antes estas interrogantes puedo decir que, existen soluciones a niveles de hardware y software para realizar lo que se conoce como "Balanceo de Carga".
Y que es un Balanceo de Carga, bueno a grandes rasgos implica que, la web cuando tenga una cierta cantidad de visitas supongamos 10000, el usuario 10001 será redireccionado a otro server, para no saturar el web site principal. Este mecanismo de "balanceo" se puede realizar con Apache mediante las siguientes configuraciones...
El escenario: Deseamos que nuestra apicación web que tiene un promedio de 5000 visitas por día esté balanceada por medio de otros 2 servidores más, para que, de esta manera se pueda garantizar la disponibilidad de la aplicación web, lo que se conoce como "disponibilidad 24x7x365. 





Lo que necesitamos:3 servidores con O.S CentOS + 3 ips publicas + registro de nombres en un DNS + Apache 2.2x + Php5.3.x
Manos a la obra:
1.- Instalar apache+php en los 3 servidores centOS 5.6, tomando como repositorios adicionales: webtatic o powerstack, usando yum de esta forma:

yum -y install httpd php53 php53-mysql php53-gd


2.- Asumiendo lo sgt: Server A - 200.x.y.2 (www.webtest.com), Server B -200.x.y.3(www.web1.webtest.com) y Server C - 200.x.y.4 (www.web2.webtest.com)

3.- Comencemos las configuraciones de httpd.conf para Server B y C, en /etc/httpd/conf/httpd.conf, agregamos lo sgt:

RewriteEngine On
RewriteRule .* - [CO=BALANCEID:balancer.http1:200.x.y.3]


RewriteEngine On
RewriteRule .* - [CO=BALANCEID:balancer.http2:200.x.y.4]

Esto se debe añadir para httpd.conf para los 2 servers (B y C respectivamente).
Obs: Pueden usar también el hostname de esta forma:
RewriteRule .* - [CO=BALANCEID:balancer.http1:.web1.webtest.com]

4.- Ahora nos dirigimos al server principal (Server A), en httpd.conf agregamos lo sgt:
NameVirtualHost *

ServerName www.webtest.com
ServerAlias webtest.com
DocumentRoot /var/www/html
ProxyRequests Off

Order deny,allow
Allow from all


ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ stickysession=BALANCEID nofailover=On
ProxyPassReverse / http://200.x.y.3/
ProxyPassReverse / http://200.x.y.4/

BalancerMember http://200.x.y.3 route=http1
BalancerMember http://200.x.y.4 route=http2
ProxySet lbmethod=byrequests



SetHandler balancer-manager

Order deny,allow
Allow from all



Obs: Pueden usar los hostname de los server también de esta forma:
ProxyPassReverse / http://web1.webtest.com/
BalancerMember http://web1.webtest.com route=http1

Y listo, ya tenemos nuestra web: webtest.com balanceada, ahora simplemente nos queda entrar al "dashboard" para poder visualizar el balanceo:http://webtest.com/balancer-manager, la cual nos mostrará la actividad de los nodos y como reciben carga... les pongo una pantalla del mismo:

Espero que les sea de utilidad... hasta la prox.

1 comentario:

hosting web dijo...

tienes una pagina muy util