Pen - Balanceador de Carga, en Oracle Linux y Centos, de un servidor Web

Pen -  Balanceador de Carga,  en Oracle Linux y Centos,  de un servidor Web




Posted by  On June 11, 2014 2 Comments
http://www.jsitech.com/linux/montando-un-balanceador-de-carga-simple-en-linux-centos/


Una de nuestras responsabilidades más importantes cuando somosadministradores de Sistema es llevar al usuario una experiencia agradable cuando acceden a algunos de los servicios que actualmente hosteamos en nuestra infraestructura, ya sea un portal o aplicación web entre otros. Cuando tenemos un porta o aplicación web que es utilizada por muchos usuarios es posible que la velocidad de respuesta de ese servidor pueda ir degradándose a medida que aumentan los usuarios llevándonos a aumentar los recursos del servidor en cuestión o simplemente podemos agregar un servidor que nos ayude con la carga.


En este caso es necesario que montemos un servidor que reciba las peticiones y la distribuya entre los servidores que configuremos, sea uno, dos, tres, etc. Y en este punto es que entra una pequeña herramienta ligera y que ha mostrado ser bastante efectiva para realizar este trabajo con una velocidad excelente, llamada Pen.
Pen es una balanceador de carga simple que nos permitirá tener varios servidores en línea proveyendo un servicio y que aparezcan como uno públicamente. Es capaz de detectar los servidores que no están disponibles y distribuir la carga entre los que están, dándonos alta disponibilidad y rendimiento escalable. Cuenta con varias características y podemos implementarlo en una máquina virtual o en una maquina sin muchos recursos reduciendo el costo de implementación. Soporta sesiones constantes así como Round Robin. Es bueno mencionar y por mi experiencia en la configuración, si contamos con un Firewall que filtra las conexiones, este servidor debe contar con las conexiones necesarias dependiendo de los servidores a los que está balanceando. Para darles un ejemplo, si los servidores a los que está balanceando deben contar con una conexión a una base de datos remoto por x puerto, etc, el servidor que balancea debe contar con los permisos en el Firewall para acceder a esos servidores remotos que consultan los equipos que proveen el servicio.
Ya que conocemos lo que es Pen, vamos a ver como lo implementamos en un servidor con Linux Centos. Vamos a seguir estos pasos como root.

Instalamos los repositorios de EPEL.

Centos 6.x
# rpm  –ivh epel-release-6-8.noarch/rpm
Centos 5.x
# rpm –ivh epel-release-5-4.noarch.rpm

Ahora instalamos pen

# yum –y install pen
Una vez instalado podemos iniciarlo con un simple comando.
# pen –daf IP-Balanceador:80 Servidor1:80 Servidor2:80
Las opción “d” nos permite ver el tráfico, “a” formatea la salida en formado ASCII y “f” que se ejecute en Foreground.
Si queremos lanzarlo y que escriba la salida en una archivo log, lo ejecutamos de la siguiente manera
# pen –l ruta/archivo/log IP-Balanceador:80 Servidor1:80 Servidor2:80
El único problema aquí es que al lanzarlo de esa manera si algo sucede con el servidor, ya sea que tenga alguna interrupción eléctrica o haya que reiniciarlo el servicio no se ejecutara automáticamente por lo que es necesario que creemos un script para estos fines. Vamos a crearlo en /etc/rc.d/init.d/, este script lo inicamos para balancear el tráfico de una pagina web accedida por el puerto 80. Esto lo pueden modificar según lo que deseen balancear y por que puerto.
# cd /etc/rc.d/init.d/
# vi pen
Agregamos lo siguiente a nuestro archivo
#!/bin/bash
#
# Pen: Starting Pen
#
# chkconfig: 345 93 92
# description: Simple load-balancer
# processname: pen. /etc/rc.d/init.d/functions
pen=”/usr/bin/pen”
lockfile=”/var/lock/subsys/pen”
prog=”pen”
RETVAL=0
# PID file
PID=/var/run/pen.pid-80
# log file
LOGFILE=/var/log/pen.log
# control port
CONTROL=localhost:10080
# max connections
MAX_CONNECTIONS=500
# listening port
PORT=80
# number of backend servers
SERVERS=2
# IP of server #1
SERVER1=IP-Servidor1:80
# IP of server #2
SERVER2=IP-Servidor2:80
start() {
echo -n $”Starting $prog: ”
daemon $pen -x $MAX_CONNECTIONS -S $SERVERS -p $PID -l $LOGFILE -C $CONTROL $PORT $SERVER1 $SERVER2
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch $lockfile
return $RETVAL
}
stop() {
echo -n $”Stopping $prog: ”
kill -9 `cat $PID`
rm $PID
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $lockfile
return $RETVAL
}
case “$1″ in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status $pen
;;
*)
echo “Usage: $prog {start|stop|restart|status}”
exit 1
esac
exit $?
Hacemos que el archivo sea ejecutable y lo agregamos al inicio del sistema
# chmod 755 /etc/rc.d/init.d/pen
#chkconfig –add pen
#chkconfig pen on
Finalmente iniciamos nuestro balanceador de carga y dejamos que haga su trabajo.
# /etc/rc.d/init.d/pen start
Si queremos que lo haga al estilo Round Robin simplemente le agregamos la opción –r en el comando de inicio que tenemos en el script.
Llegue a esta solución ya que teníamos una aplicación web que por la cantidad de usuarios este tardaba mucho para responder las peticiones, se agregó un servidor similar e implementamos la herramienta para balancear entre estos servidores y la velocidad de respuesta aumento considerablemente. Pueden utilizar esta herramienta para los servicios que deseen ya sea, smtp, ,http, https, etc.

El link de la pagina del programa es :  http://morestuff.siag.nu/pen/

Comentarios