twitter
    Sigueme en el Twitter :-)
Mostrando las entradas con la etiqueta Web. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Web. Mostrar todas las entradas

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.
Sigue Leyendo...

08 mayo 2011

Mod_Proxy con Lighttpd

Mucho se habla sobre "arquitectura web", la cual trata de armar y/o optimizar como una web responde ante un cliente o muchos clientes,aplicando dos temas importantes: viabilidad y factibilidad.
Viabilidad, en el sentido de escoger las "herramientas" necesarias para escoger el tipo de arquitectura que tendrá la web (a nivel de software/hardware y seguridad).
Factibilidad, que tan "simple" será para el usuario la viabilidad implementada.
Quizás no sean los terminos correctos mas apropiados, pero creo que son los mas importantes para empezar el post.
Bueno el tema puntual es como Lighttpd puede funcionar como "proxy web" para sevir contenido estatico y redireccionando peteciones a un server web "apache", el cual explico acontinuación:
Esquema:
Server Externo: CentOS(5.6) + Lighttpd (1.4.28) + mod_proxy + php5.3 + ip_publica(200.x.y.x)
Server Interno: Apache(2.x) + php5.3 + ip_interna(192.168.1.20)
La idea es esta: "los clientes consultarán a nuestra web con ip_pública la cual mostrará el contenido "dinámico" será atendido por lighttpd, mientras que el contenido "estadico" atendido por Apache, ubicado en otro server. Aquí un alto, en este esquema yo planteo que, las peticiones dinamicas serán atendidas por un server, y las peticiones estaticas por otro, que puede ser un server "externo" y/o funcionar en el mismo server. Para este último caso, hay que tener en cuenta que, Apache debe de escuchar otro puerto distinto al de Lighttp.
Configurando Lighttp
1.- Editamos el archivo "proxy.conf" ubicado en:/etc/lighttp/conf.d/proxy y añadimos esto:
$HTTP["url"] !~ "\.(js|css|gif|jpg|png|ico|txt|swf|psd)$" {
proxy.server = ( "" => (
( "host" => "192.168.1.20",
"port" => 80 )
)
)
}
# make virtual host for static content.
$HTTP["host"] == "192.168.1.20" {
var.server_name = "static.example.com"
# server.name = server_name
server.document-root = "/var/www/html"
}

2.- Activamos el modulo de proxy en: /etc/lighttpd/modules.conf
Configurando Apache
En httpd.conf, debemos cambiar:
"Listen" a "Listen 192.168.1.20:80"
DirectoryIndex index.php index.html
Iniciamos los servicios en ambos servidores, y revisamos los logs(de lighttp y apache). Nos debe de mostrar el acceso a la web por medio de la ip publica(lighttp), y a asu vez en el log de apache las redirecciones a los contenidos.
De esta manera separamos contenido estatico/dinamico, quizás no sea la forma más "elegante" de hacerlo pero funciona, para la prox. haré lo mismo pero para aplicaciones Java usando Apache y mod_jk. Hasta la prox.
Sigue Leyendo...