Balance es un simple proxy TCP fácil de usar que permite el uso de balanceo de carga mediante round-robin o hash. Ofreciendo también conmutación por error entre varios destinos. Soporta IPv6 a la escucha de peticiones para balancear, lo cual lo hace muy útil en migraciones de servicios y servidores de IPv4 a IPv6.
Balance está disponible en http://www.inlab.de/balance.html.
Sintaxis
balance [ -b addr ] [ -B addr ] [ -t sec ] [ -T sec ] [ -adfpHM6 ] port host1[:port1[:maxc]] [!|%] [ ... hostn[:portn[:maxc]]] balance [ -b addr ] -i [ -d ] [ -M ] port balance [ -b addr ] -c cmd [ -d ] [ -M ] port
Conceptos
Un destino compuesto por la dirección de un host y un puerto se denomina “canal”. Un canal a su vez es miembro de un grupo de canales. Los canales son numerados dentro de un grupo empezando por el 0. Los grupos de canales a su vez son también numerados a partir de 0, siendo este el grupo inicial por defecto.
Balance acepta conexiones en el puerto configurado y las envía a los canales correspondientes. Al menos un canal (en el grupo por defecto) debe ser especificado. Si hay dos o más canales dentro de un grupo, balance realiza un simple balanceo por round-robin (por defecto) o hash entre los canales que estén disponibles.
Balance permite la definición de nuevos grupos de canales. El esquema de conexión funciona de la siguiente manera: balance trata de establecer conexiones a los canales del primer grupo (0) y realiza el balanceo de carga entre ellos. Si no hay un canal disponible en el primer grupo, balance prosigue ascendentemente con el siguiente grupo de canales.
Los grupos son siempre separados mediante el carácter “!” en la linea de comandos y pueden ser controlados dentro del modo interactivo con el comando “group”.
Utilizar “%” en vez de “!” como separador de grupo, indica que el balanceo para el grupo previo es del tipo “hash”. A diferencia del algoritmo de round-robin, una distribución por hash se basa en la dirección IP del cliente, la cual determina el canal destino. Esto permite conectar clientes siempre el mismo servidor (ej. balanceo en sesiones http).
Los hosts destino pueden ser especificados usando el hostname o la IP. Los puertos pueden ser nombrados mediante su número, o bien el nombre de servicio utilizando /etc/services. Si no se especifica un puerto destino se usará de manera predeterminada el mismo puerto origen que balance esté manejando en dicho canal.
Balance permite configurar un límite máximo de conexiones por canal. Este parámetro puede ser añadido justo después de especificar el puerto mediante dos puntos (“:”). Si se especifica un número máximo de conexiones en un canal, este sólo será utilizado hasta alcanzar dicho máximo de conexiones simultáneas. Un valor de 0 en “maxc” indica que no hay límite definido, siendo esa la configuración predeterminada.
El número máximo de grupos y canales soportados en balance puede ser configurado en tiempo de compilación, teniendo de forma predeterminada un límite de 16 canales en 16 grupos.
La conmutación por error a otro destino (“canal”) ocurre cuando la conexión es denegada en el canal en uso, o bien si el tiempo de espera tratando de establecer una conexión vence. Si todos los canales fallan, la conexión del cliente con el balanceador será cerrada.
Modo interactivo
Conecta con el puerto SMTP local y reenvía el tráfico alternando entre el puerto SMTP de host1 y host2. Balance arranca automáticamente en segundo plano.
$ balance smtp host1.test.net host2.test.net
Balance Escucha en el puerto 80 de la dirección local IPv6 2001:DB8::1 y distribuye las conexiones entre las direcciones IPv4 10.1.1.1 y 10.1.1.2.
$ balance -b 2001:DB8::1 80 10.1.1.1 10.1.1.2
Balance Escucha en el puerto 80 de la dirección IPv4 10.1.1.3 (en notación IPv6) y distribuye las conexiones a las direcciones IPv4 10.1.1.1 y 10.1.1.2.
$ balance -b ::ffff:10.1.1.3 80 10.1.1.1 10.1.1.2
Conecta con el puerto local IMAP y reenvía todo el tráfico al host “mailserver”. Balance permanece en primer plano mostrando en la salida estándar información legible.
$ balance -fp imap mailserver
Escucha en el puerto local 8888 y reenvía el tráfico alternando entre el host1 y su puerto 8888 y el puerto 8000 del host 10.1.1.1. Balance permanece en primer plano conectado a la tty.
$ balance -f 8888 host1 10.1.1.1:8000
Dos grupos son especificados, cada uno contiene un único canal. El primero puede manejar 16 conexiones simultaneas reenviando información a mailserver1. Tan pronto como ese límite de conexiones es sobrepasado, balance procede a utilizar el siguiente grupo de canales reenviando el tráfico al puerto imap del host mailserver2.
$ balance imap mailserver1::16 ! mailserver2
Balance hace un balanceo mediante round robin para los tres hosts del grupo 0 usando el puerto del servicio pop3. Si los tres hosts no están disponibles, se conmutará por error al host “failover1”.
$ balance pop3 host1 host2 host3 ! failover1
Aquí balance limita a una todas las conexiones al puerto telnet local.
$ balance telnet target.munich.net::1
Esta es una prueba formando 5 grupos donde se redirecciona el tráfico a si mismo 20 veces. Es simplemente un test que se puede realizar en casa.
$ balance 8888 localhost::12 ! localhost::4 ! localhost::2 localhost::2 ! localhost:25