Esta pesquisa sobre um Software de Load Balance eu fiz outro dia porque um fornecedor não conseguiu nos passar uma realmente plausível para resolver um problema que estamos tendo com nossa solução de Groupware/MTA.
Não vou entrar no mérito da questão, até porque isto é assunto para um post separado. Mas, no fundo, tecnicamente, a maioria das provedoras de serviços relacionados a produtos proprietários anda realmente deixando a desejar em termos de técnicos atender. No fundo, eu pelo menos enxergo que o fornecedor deve ser um provedor de soluções e não um agente que precisa do cliente para que sua solução funcione como deveria.
Como sou fuçador por natureza, comecei a pesquisar. E não é que achei o software Balance, da In Lab Software , que provém o que eu precisava, uma solução de Load Balance e Alta Disponibilidade bem simples e fácil de ser implementada, sem deixar a qualidade de lado. Ou seja, é um modo bem rápido de tornar suas soluções mais "robustas" sem às vezes ter que tomar mão de montar cluster e aquela coiseirada que normalmente somos forçados a fazer no dia a dia.
A solução que eu irei apresentar pode ser aplicadas do modo como está explicad no CentOS. Em outras distros, o processo só vai se modificar no modo como vai ser instalado o software.
Em distros baseadas no Red Hat, tenho desconfiança que o processo será ativar o RPMForge, ou outro diretório de pacotes qualquer que possua pacotes extras.
O processo para instalação do RPMForge no CentOS está explicado aqui e explicá-lo foge um pouco do escopo deste post.
Com o rpmforge instalado, é só fazer isto aqui:
# yum install balance.i386 -y
Com o software instalado, agora é só partir para fuçar no nosso amiguinho. O Balance funciona todo em linha de comando, nada melhor que estudar o mesmo via linha de comando, não é ?
Primeiramente, vamos entender o conceito do Balance. O Balance trabalha com o conceito de grupos e canais.
O conceito principal do Balance são os canais e grupos. Um canal é membro de um "grupos de canais", ou seja, um grupo. Assim, cada membro de um grupo é denominado canal.
Tanto os grupos, quanto os canais, são numerados começando de zero.
Meio complexo, mas fácil de entender neste comando abaixo.
# balance smtp -B 10.10.10.234 hostgrp01 hostgrp02 hostgrp03 ! hostgrp11 hostgrp12 hostgrp13 ! hostgrp21 hostgrp22 hostgr23
Não ficou difícil entender agora quem são os grupos né ? Os grupos são os hosts que estão em cores diferentes. Ou seja, o primeiro grupo contém os hosts de nome hostgrp01 , hostgrp02 e hostgrp03, e assim sucessivamente.
A separação, ou seja, quem diz para o balance onde terminam os hosts de um grupo é o sinal de exclamação.
Se nenhum servidor do grupo 0, passamos a usar os do grupo 1 e assim sucessivamente.
Mas o Balance não pára por aí. E, para entender mais e mais conceitos do mesmo, nada melhor que testando via comandos não é. Esta coletânea de comandos foi pega diretamente da man page do programa, que aliás, é bem completa e lhe ajuda a montar o cenário que você quiser.
# balance smtp host1.test.net host2.test.net
As conexões locais do smtp são alternadamente enviadas para o host1.test.net e o host2.test.net
# balance -b 2001:DB8::1 80 10.1.1.1 10.1.1.2
O Balance começa a ouvir na porta 80 do endereço ipv6 fornecido enviando as conexões da porta 80 alternadamente para 10.1.1.1 e 10.1.1.2
# balance -b ::ffff:10.1.1.3 80 10.1.1.1 10.1.1.2
O Balance começa a ouvir na porta 80 do endereço local 10.1.1.3 e envia as conexões alternadamente para 10.1.1.1 e 10.1.1.2
# balance -fp imap mailserver
Conexões locais no IMAP são automaticamente enviadas para o host "mailserver".
O Balance não está rodando como daemon ( segundo plano ) e todos os dados são impressos na stdout padrão.
$ balance -f 8888 host1 10.1.1.1:8000
Conexões para a porta local 8888 são alternadamente enviadas para o host1 e para o host 10.1.1.1 na porta 8888.
Novamente, ele não está em segundo plano, e trava a tty onde está rodando.
$ balance imap mailserver1::16 ! mailserver2
Dois grupos são especificados aqui, cada um contendo um membro.
O primeiro, ao receber o máximo de 16 conexões, já começa a ter todas as conexões direcionadas para o segundo host ( mailserver2 ).
$ balance pop3 host1 host2 host3 ! failover1
O Balance aqui faz o round robin entre os três hosts no primeiro grupo. Se todos os hosts do primeiro grupo falharem, ele automaticamente envia as conexões para o host "failover1".
$ balance telnet target.munich.net::1
Este é um modo bem legal de restringir uma conexão por vez somente em uma porta teleonet. Ou seja, o Balance aqui é utilizado como um filtro de conexões.
$ balance 8888 localhost::12 ! localhost::4 ! localhost::2 localhost::2 ! localhost:25
Este é um teste simples, com 5 grupos, onde o Balance referencia seus próprios serviços 20 vezes.
Teoria explicada, agora vamos para um cenário bem bobinho, somente para vermos qual comando usaríamos em um cenário qualquer.
O cenário apresentado, consiste de três servidores, onde o Balance está instalado em um servidor, e envia as requisições para o Servidor Web 1 e o Servidor Web 2.
Como estamos redirecionando o tráfego web ( http ) o balance irá ouvir na porta 80.

Ou seja, o servidor com o Balance irá ouvir na porta 80 ( HTTP ) com o ip 10.10.244.126. Cada requisição efetuada ao ip 10.10.244.126 irá ou para o ip 10.10.244.127 ou para o ip 10.10.244.128.

E, finalmente, o comando utilizado para esta solução é, nada mais, nada menos que este aqui :
# balance 80 -B 10.10.244.126 10.10.244.127 10.10.244.128
Se quiser debugar, é só usar este comando aqui :
# balance 80 -F -B 10.10.244.126 10.10.244.127 10.10.244.128
No fundo, o ponto mais legal do Balance é te ajudar em muito quando precisar de migrar sua rede de IPV4 para IPV6.
É um dos melhores achados dos últimos tempos :-)