Вы находитесь на странице: 1из 18

INFORME: BALANCEADOR DE CARGA

Presentado a:

ALEXANDER HERRERA CASTRO

PONTIFICIA UNIVERSIAD JAVERIANA

ESPECIALIZACIÓN EN ARQUITECTURA EMPRESARIAL DE SOFTWARE

NUEVAS TECNOLOGÍAS PARA ARQUITECTURA

BOGOTÁ, MAYO 2015


INFORME: BALANCEADOR DE CARGA

Presentado a:

ALEXANDER HERRERA CASTRO

Presentado por:

LUIS HERNANDEZ

NILSON MENDEZ

DANIEL VICTORIA

PONTIFICIA UNIVERSIAD JAVERIANA

ESPECIALIZACIÓN EN ARQUITECTURA EMPRESARIAL DE SOFTWARE

NUEVAS TECNOLOGÍAS PARA ARQUITECTURA

BOGOTÁ, MAYO 2015


CONTEXTO

Un balanceador de carga es una estrategia de diseño de arquitectura que se


utiliza para garantizar que un sistema informático ofrezca a sus clientes una alta
disponibilidad. Como una definición más formal se cita “Un balanceador de carga
fundamentalmente es un dispositivo de hardware o software que se pone al frente
de un conjunto de servidores que atienden una aplicación y, tal como su nombre lo
indica, asigna o balancea las solicitudes que llegan de los clientes a los servidores
usando algún algoritmo (desde un simple Round Robin hasta algoritmos más
sofisticados)” [1].

En este documento se ilustra la implementación de un balanceador de carga que


cumple las siguientes características:

 Arquitectura. El balanceador de carga está compuesto de cuatro servidores.


Uno de ellos es el balanceador y los tres restantes son los nodos
(servidores) donde se encuentra la aplicación web (hecha en lenguaje php).
Estos 3 últimos son los encargados de atender las solicitudes realizadas
por los clientes.

La arquitectura se montó en máquinas virtuales (Software VirtualBox). El


servidor balanceador se encuentra en una máquina virtual con sistema
operativo Ubuntu versión 12.04. Los tres servidores restantes se
encuentran en un sistema operativo Windows XP SP 3.

 Software utilizado en el servidor balanceador: En el servidor balanceador se


utilizó el servidor web apache versión 2.2.29 y los módulos de apache:
proxy_balancer y proxy_http. Las características y/o opciones de los
módulos que se configuraron son:

1. ProxyRequests off: Se configura esta opción para evitar cualquier


tráfico de red no deseado.

2. <Proxy balancer://mycluster>
# WebHead1
BalancerMember http://192.168.0.21
# WebHead2
BalancerMember http://192.168.0.22
# WebHead2
BalancerMember http://192.168.0.24

ProxySet lbmethod=byrequests
</Proxy>
En esta característica se configuran las cabeceras y los servidores que se
van a utilizar para el balanceo. La directiva BalanceMember se utiliza para
declarar los webheads (ips de los servidores). La directiva ProxySet
declara cómo se va a realizar el balanceo. Se utilizó el método
"Byrequest". Este método implemento el algoritmo de balanceo “Round
Robin”, esto implica que para cada nueva solicitud se obtendrá un nuevo
webhead con orden secuencial [2].

3. <Location /balancer-manager>
SetHandler balancer-manager
</Location>

El balancer-manager es una herramienta que viene con el módulo


mod_proxy_balance. Permite realizar configuraciones por medio de una
interfaz gráfica de usuario accedida a través del navegador web. Se
puede ver en http://domain.com/balancer-manager. Los cambios se
pierden después de reiniciar el servidor apache [2].

 Software utilizado en los nodos (servidores que atienden las solicitudes): En


los nodos se utilizó el servidor web apache versión 2.2.29 y el paquete para
aplicaciones en lenguaje php “windows.php.net” versión 5.4.

Para garantizar el correcto funcionamiento de los anteriores componentes


fue necesario utilizar los componentes de Microsoft: “Visual C++ 2008 SP1
Redistributable Package x86 (VC8 SP1 vcredist_x86.exe)” y “Visual C++
2010 SP1 Redistributable Package x86 (VC10 SP1 vcredist_x86.exe)”.
PASOS DE IMPLEMENTACIÓN DEL BALANCEADOR DE CARGA

A continuación se describen los pasos utilizados para la creación y configuración


del balanceador de carga.

1. Crear y/o configurar las máquinas virtuales. En este punto se debe configurar
la comunicación entre los cuatro servidores, es decir, establecer una red
interna entre los servidores. Para esto se configura las máquinas virtuales en
modo de red “Adaptador puente”. Hecho esto, se realizan las respectivas
pruebas haciendo ping entre servidores para verificar que los mismos estén en
red y se puedan ver. En la figura 1 se muestran las cuatro máquinas virtuales y
la configuración de la red.

Figura 1. Visualización de máquinas virtuales y configuración de red entre las mismas.

En la figura 2 se evidencian las pruebas que garantizan la correcta configuración


de la red entre las máquinas. Nota: por tamaño de la imagen no se muestra uno
de los nodos.
Figura 2. Visualización de conexión por medio de ping entre las máquinas virtuales.

2. Instalar y configurar el servidor web apache en el servidor balanceador. se


debe instalar apache version 2 con el comando: “apt-get install apache2”. Si
ya se tiene instalado verificar la instalación con el comando: “aptitude show
pache2”. Luego se deben habilitar los módulos para el balanceador con el
comando “sudo a2enmod proxy_balancer” y “sudo a2enmod proxy_http”.
Se debe ejecutar con el super usuario "sudo". Luego de habilitar los módulos
de apache se debe reiniciar el servidor con el comando: “service apache2
restart”. Referirse a la figura 3 para ver el resultado [4].
Figura 3. Visualización de conexión por medio de ping entre las máquinas virtuales.

3. Posteriormente se realiza la configuración del archivo “000-default” que se


encuentra en la ruta: “/etc/apache2/sites-enabled/000-default” colocando
antes la palabra nano. Para esto se debe ejecutar el comando: “sudo nano
/etc/apache2/sites-enabled/000-default”. En este archivo es donde se deben
configurar todas las características que se explicaron en el apartado “contexto”
de este documento. En primer lugar se debe configurar el módulo
<proxy></proxy>. El resultado de la configuración es [4]:

<Proxy balancer://mycluster>
# WebHead1
BalancerMember http://192.168.0.21 loadfactor=3

# WebHead2
BalancerMember http://192.168.0.22 loadfactor=3

# WebHead3
BalancerMember http://192.168.0.24 loadfactor=4

ProxySet lbmethod=byrequests
</Proxy>

Como se puede observar, en la configuración anterior se han establecido las


Ips de los tres nodos que van a atender las solicitudes de los clientes cuando
consuman la aplicación web. Adicionalmente se configuró el campo “loadfactor”
para establecer el factor de disponibilidad de cada nodo. Esto quiere decir que
el nodo1 tiene un factor de capacidad de disponibilidad del 30%, el nodo2 de
30% y el nodo3 de 40%. También se configuró el método de balanceo el cual
corresponde al algoritmo “Round Robin [5]”.

Posteriormente se habilitó la herramienta de configuración por medio de


interfaz gráfica y el proxtpass. El resultado se muestra a continuación:

<Location /balancer-manager>

SetHandler balancer-manager
</Location>

ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/

El resultado de toda la configuración se muestra en la figura 4.

<VirtualHost *:80>
ProxyRequests off
ServerName domain.com
<Proxy balancer://mycluster>
# WebHead1
BalancerMember http://192.168.0.21 loadfactor=3
# WebHead2
BalancerMember http://192.168.0.22 loadfactor=3
# WebHead3
BalancerMember http://192.168.0.24 loadfactor=4
Order Deny,Allow
Deny from none
Allow from all
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Allow from all
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
</VirtualHost>

Es de aclarar que para realizar la anterior configuración se deben conocer las


Ips de los nodos y que la red entre ellos y el servidor balanceador esté
correctamente configurada. Esta configuración fue realizada basándose en la
referencia [2] y [3].

4. El siguiente paso consiste en configurar los nodos. En esta configuración se


debe instalar y configurar el servidor web apache versión 2.2.29, y el paquete
para aplicaciones de php versión 5.4.

4.1. Una vez descargado el paquete del servidor apache y el paquete de php,
se debe crear dos carpetas en las siguientes rutas: “c:\apachre” y “c:\php”.
Luego se debe copiar el contenido de los paquetes descargados en las
carpetas creadas.

4.2. Posteriormente se debe configurar el archivo “c:\apache\conf\httpd.conf” de


la siguiente manera:

ServerRoot "c:/apache"
DocumentRoot "c:/apache/htdocs"
<Directory "c:/apache/htdocs">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module>
DirectoryIndex index.php index.html index.htm
</IfModule>
ErrorDocument 401 "<html><body bgcolor=#000000><center><h1><br><font
face='Verdana' color=#FF0000><b>ACCESO
DENEGADO</b></center></font></html>"
ErrorDocument 403 http://miservidor.com/
ErrorDocument 404 "<html><h1>Archivo no encontrado.</html>"
ErrorDocument 500 "<html><h1>ups!... un error.</html>"

4.3. Instalar los componentes de Microsoft: “Visual C++ 2008 SP1


Redistributable Package x86 (VC8 SP1 vcredist_x86.exe)” y “Visual C++ 2010
SP1 Redistributable Package x86 (VC10 SP1 vcredist_x86.exe)”. Estos
componentes se encuentran en la plataforma de descargas de Microsoft.

4.4. Instalar Apache Webserver como servicio de Windows ejecutando el


comando:
“c:\apache\bin\httpd.exe -k install”. Este comando se debe ejecutar con el
rol de administrador.

4.5. Ahora se debe configurar el componente “php” para Windows”. Primero se


debe renombrar el archivo “c:\php\php.ini-production” a “c:\php\php.ini”.

4.6. Copiar el archivo “c:\php\php5ts.dll” a la ruta “c:\apache\bin”.

4.7. Editar el archivo “c:\php\php.ini” de la siguiente manera:

doc_root = c:\apache\htdocs
extension_dir = c:\php\ext
enable_dl = on

4.8. Editar el archivo "c:\apache\conf\httpd.conf" y agregar lo siguiente:

LoadModule php5_module "c:/php/php5apache2_2.dll"


AddHandler application/x-httpd-php .php
PHPIniDir "C:/php"
4.9. Por último se debe iniciar el servicio de apache. Para esto ejecutar los
comandos: tecla inicio + R, luego escribir: “services.msc” y click en aceptar.
Se abre el administrador de servicios Windows. Buscar el servicio con
nombre “apache2” y dar click en iniciar. Para más detalle referirse a la figura
4.

5. Por último se debe crear la aplicación web para realizar la prueba del
balanceador. Para esto crear el archivo “c:\apache\htdocs\index.php”. Dentro
de este archivo colocar el siguiente bloque de código.

<?php
$now = time();
$num = date("w");
if ($num == 0)
{ $sub = 6; }
else { $sub = ($num-1); }
$WeekMon = mktime(0, 0, 0, date("m", $now) , date("d", $now)-$sub,
date("Y", $now)); //monday week begin calculation
$todayh = getdate($WeekMon); //monday week begin reconvert
$d = $todayh[mday];
$m = $todayh[mon];
$y = $todayh[year];
echo "Fecha: $d-$m-$y"; //getdate converted day
?>
<html>
<body><h1>Hola, Bienvenido a nuestra aplicación</h1>
<h3>Se creó y configuró un balanceador para garantizar alta disponibilidad
de esta aplición</h3>
<h3>El balanceador cuenta con 3 servidores (nodos) y un servidor
balanceador.</h3>
<p>El servidor balanceador está en plataforma libre: Ubuntu 12.04 y utiliza el
servidor web apache con versión 2.2.</p>
<p>Los nodos cuentan con plataforma: windows xp servipack 3. Utilizan el
servidor web apache con versión 2.2 y un controlador para php.</p>
<p>La siguiente información se muestra para ilustrar que nodo está
atendiendo la petición actual del cliente:</p>
<ul>
<li>Nodo uno.</li>
<li>Ip del servidor:</li><?php echo $_SERVER['SERVER_NAME']; ?>
</ul>
</body>
</html>

Los puntos 4 y 5 fueron desarrollados siguiendo las referencias [6] y [7].


PRUEBAS Y RESULTADOS

Una vez terminada la instalación y configuración descrita en el apartado


anterior se pasó a la realización de las pruebas. Con el objetivo de evidenciar
que cada petición realizada a la aplicación web fuese atendida por un nodo
diferente se decidió que la aplicación mostrase información propia de cada
nodo como: el nombre y la Ip.

Las pruebas se realizaron desde la máquina real cuya Ip es 192.168.0.18 y


sistema operativo es Windows 7. Ver figura 5

Figura 4. Configuración de red de la máquina real.

Por medio del navegador web Google crome se escribió la Ip (192.168.0.15)


del servidor balanceador (servidor que está encargado del balanceo) y se
obtuvieron los resultados mostrados en las figuras 5, 6 y 7.
Figura 5. Petición y respuesta del servidor nodo uno, ip: 192.168.0.21.

Figura 6. Petición y respuesta del servidor nodo dos, ip: 192.168.0.22.


Figura 7. Petición y respuesta del servidor nodo tres, ip: 192.168.0.24.

Como se puede apreciar en las figuras 5, 6 y 7, cuando se realiza una


petición al servidor balanceador, éste realiza el balanceo respectivo de
acuerdo al método utilizado “Round Robin”, alternando de forma secuencial el
nodo que debe atender la petición. Esto se traduce en que un mismo nodo
nunca va a atender peticiones dos veces seguidas.

En la figura 8 se muestra la herramienta de configuración por medio de


interfaz gráfica. En esta herramienta se visualizan los nodos que hacen parte
del cluster y balanceador.
Figura 8. Herramienta de administración de nodos configurados en el cluster.

Luego se realizaron pruebas deshabilitando nodos y se verificó que las


peticiones las atendían sólo los nodos habilitados. Para deshabilitar un nodo
se utilizó la herramienta “balancer-manager”. Ver figura 9.

Figura 9. Nodos que se deshabilitaron por etapas.

En la figura 10, 11 y 12 se muestran los nodos deshabilitados y se asocian las


peticiones hechas al servidor balanceador. En estas figuras se puede
corroborar que ahora todas las peticiones son atendidas por los nodos
habilitados.
Por ejemplo en la figura 11 se demuestra que al haber deshabilitado el nodo 3
(Ip: 192.168.0.24) las peticiones fueron atendidas por los nodos 1 y dos.

Figura 10. Respuesta a las peticiones donde se evidencia que sólo los nodos 1 y dos las
atendieron.

Del mismo modo en la figura 11 se demuestra que al haber deshabilitado el


nodo 2 (Ip: 192.168.0.22) las peticiones fueron atendidas por los nodos 1 y
tres.

Figura 11. Respuesta a las peticiones donde se evidencia que sólo los nodos 1 y tres las
atendieron.
De forma análoga sucedería si se deshabilitara el nodo 1. Por último se
realizó la prueba en la cual se deshabilitaron los nodos 2 y 3 y se dejó
habilitado el nodo 1. El resultado de esto fue que todas las peticiones las
atendió sólo el nodo uno. Ver figura 12 para evidencia.

Figura 12. Respuesta a las peticiones donde se evidencia que sólo el nodo 1 las atendió.

En la figura 13 se muestra que no hay respuesta a las peticiones si se


deshabilitan todos los nodos.

Figura 13. Respuesta del servidor balanceador a las peticiones donde se han deshabilitados
todos los nodos.
REFERENCIAS

[1] http://es.wikipedia.org/wiki/Balanceador_de_carga.
[2] http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html.
[3] http://www.rackspace.com/knowledge_center/article/simple-load-balancing-
with-apache.
[4] https://www.youtube.com/watch?v=pJ1JhM_3KQU.
[5]http://www.elmundoenbits.com/2011/10/round-robin-
dns.html#.VVSbZfl_NBc.
[6] https://sites.google.com/site/lucianoaibar/tutoriales/apache-php-mysql.
[7] http://php.net/manual/es/install.windows.apache2.php.