PDF de programación - Balanceo de Cargas en Apache con FreeBSD

Imágen de pdf Balanceo de Cargas en Apache con FreeBSD

Balanceo de Cargas en Apache con FreeBSDgráfica de visualizaciones

Actualizado el 16 de Junio del 2017 (Publicado el 14 de Abril del 2017)
1.164 visualizaciones desde el 14 de Abril del 2017
141,5 KB
4 paginas
Creado hace 20a (14/07/2003)
Balanceo de Cargas en
Apache con FreeBSD

Autor: Sergio Turpín
Fecha: 27 de Mayo de 2003

Introducción

En este documento nos vamos a centrar en el
conocido Balanceo de Cargas de Apache. Para
que hayan los mínimos problemas posibles,
explicaré dos formas (entre varias que hay) de
realizar Equilibrio de Cargas; una de ellas con
DNS Circular y la otra con mod_rewrite. De
momento la principal ventaja que obtenemos es
que podemos realizarlo con cualquier sistema, ya
sea *BSD, Linux, Solaris, etc...

Objetivo

Lo que pretendemos hacer, es distribuir las
solicitudes de cientos de usuarios que están
accediendo
simultaneamente a un mismo
servidor, en varias máquinas de características
básicas y misma información, de tal forma que
se disminuya de un 15 a un 20% la carga de
CPU en tareas de procesamiento requerido.
Tampoco hay que descartar otras alternativas,
para algunos
también factible;
podemos pillarnos un
servidor de alto
rendimiento, como puede ser el Sun Fire 15k
Server (large) y ahorrarnos de montar dos o tres
máquinas para dicha tarea. Lo que nos va a
fastidiar un pelín, son los 50 kilos que nos pide
SUN por ella ;-)

les resultará

Software usado

Las pruebas de este doc, han sido realizadas con
tres máquinas:

FreeBSD
4.7-STABLE
Apache 1.3.27
Bind-8.3.4

FreeBSD
4.7-RELEASE
Apache 1.3.26
Bind-8.3.3

Slackware
Linux 8.1
Apache
1.3.26
Bind-9.2.1

Podeis ver la variedad de versiones que he
utilizado.

Caso uno: DNS Circular

Partimos de la idea que tenemos un dominio en
internet, y tres direcciones IP públicas con sus
respectivas máquinas. Para que no haya ninguna
equivocación, ni problemas
referentes al
entendimiento de direcciones IP "xxx.xx.x.xxx";
voy a poner un ejemplo real con mi dominio y
mis direcciones IP.

Dominio: servidoresonline.com
Direcciones IP: 217.26.241.1, 217.26.241.2,
217.26.241.3

tenemos que entrar en

Bien, ahora
la
configuración de named en cada máquina, y
vamos a configurar las siguientes entradas DNS:

www0 IN A 217.26.241.1
www1 IN A 217.26.241.2
www2 IN A 217.26.241.3

Posteriormente tenemos que meter una segunda
resuelva
entrada DNS
www.servidoresonline.com
entradas
canónicas en cada una de las máquinas y en
orden rotatorio.

nos
sobre

para

que

www IN CNAME www0.servidoresonline.com
IN CNAME www1.servidoresonline.com
IN CNAME www2.servidoresonline.com

Con esto ya tenemos el balanceo de cargas de
apache con DNS Circular, como podeis ver es
bastante sencillo y rápido de montar.

Caso dos: mod_rewrite

Estoy seguro que casi todos vosotros conoceis
mod_rewrite, o al menos habeis oído hablar de
él. Para que no se quede nadie rezagado,
diríamos que este módulo de apache lo que hace
es reenrutar las solicitudes que llegan de los
usuarios, a otras máquinas (estas máquinas son
las que vamos a utilizar para realizar el
balanceo).

La idea sería la siguiente: el DNS nos enruta el
tráfico de las solicitudes de los usuarios a una
sóla máquina, y desde esta máquina y con ayuda
de mod_rewrite redireccionamos las solicitudes a
otros servidores que son los que van a compartir
nuestra carga.

Bien!, ahora que sabemos qué es mod_rewrite y
cual es uno de sus funcionamientos principales,
estamos listos para su configuración. Vamos a
partir (igual que el ejemplo anterior), tenemos el
mismo dominio y mismas direcciones IP, lo que
tenemos que hacer es decidir dónde vamos a
instalar el DNS principal, ya que en esa máquina
va a ser donde
junto a
mod_rewrite. Con esto quiero decir que no hace
falta tener configurado mod_rewrite en los tres
servidores, sólo en el que haga de principal y
lleve el/los dominio/os que queramos balancear.

tengamos apache

Por defecto mod_rewrite viene configurado con
apache, y he de deciros que es un módulo
robusto pero un tanto complicado. Lo que vamos
a hacer primero, es verificar si el módulo esta
cargado en el archivo de configuración:

# cat /usr/local/etc/apache/httpd.conf | grep mod_rewrite
LoadModule rewrite_module libexec/apache/mod_rewrite.so
AddModule mod_rewrite.c

Si obtenemos estas dos lineas, sabemos que el
módulo está cargado por apache, lo siguiente que
tenemos que hacer es activar mod_rewrite
poniendo en la configuración global de apache
(/usr/local/etc/apache/httpd.conf) lo siguiente:

RewriteEngine On

Después de activar nuestro módulo, lo que
tenemos que hacer es utilizar
la directiva
RewriteMap para indicarle, qué script es el que
lleva definido las direcciones IP de nuestros
servidores. Os pongo un pequeño ejemplo de un
script realizado en Perl, llamémoslo script.pl:

#!/usr/bin/perl -w
use strict;
my($count,$srv);
while()
{
$count++;
$srv =$count %3;
print "http://www$srv.servidoresonline.com/$_";
}

siguiente

sería mediante

la directiva
Lo
RewriteMap especificarle a mod_rewrite dicho
script para que sepa cuál es el archivo que debe
que ir leyendo:

RewriteMap taylor prg:/nuestro/archivo/script.pl

Una vez tenemos el mod_rewrite cargado, y con
su script definido, ya sólo nos queda utilizar
todo esto con la directiva RewriteRule para rotar
entre las direcciones IP disponibles. Lo que en
realidad hace es coger las direcciones entrantes y
las re-escribe en función de lo que va generando
taylor (osea script.pl):

RewriteRule ^/(.+)$ ${taylor:$1} [P,L]

Para el que tenga experiencia en lenguajes de
programación como C, Perl, PHP, etc... son
simples coincidencias de expresiones regulares.
Os recomiendo encarecidamente que visiteis la
Página de mod_rewrite para que veais la
cantidad de configuraciones que podeis realizar,
y algunos ejemplos prácticos.

Pero claro, el ejemplo que he explicado es para
hacerlo en todo el servidor, y alguno de vosotros
os preguntareis... ¿es posible hacerlo para un
sólo dominio?, la respuesta es "Sí", y la mejor
forma para entenderlo es mediante un ejemplo,
vamos a reunir todas las especificaciones arriba
nombradas:

< VirtualHost 217.26.241.1 >
ServerName servidoresonline.com
ServerAlias www.servidoresonline.com
DocumentRoot /home/httpd/html/
RewriteEngine on
RewriteLog /var/log/httpd/servidoresonline.com-rewrite
RewriteLogLevel 9
RewriteMap taylor prg:/nuestro/archivo/script.pl
RewriteRule ^/(.+)$ ${taylor:$1} [P,L]

< /VirtualHost >

Creo que es bastante sencillo, no?... espero que
lo disfruteis!! ;-)

Despedida

Me gustaría agradecer a koji y todos los usuarios
de eldemonio.org su esfuerzo y voluntad para
desarrollar documentos tan excepcionales para
usuarios de Internet. He visto crecer y
evolucionar esta página desde sus más sinceros y
humildes comienzos, hasta lo que es hoy en
día... gracias a todos vosotros! :-)

.:: Yo nunca digo NO - Sergio Turpín ::.
  • Links de descarga
http://lwp-l.com/pdf2866

Comentarios de: Balanceo de Cargas en Apache con FreeBSD (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad