Recentemente tive a missão de retirar uma solução de terminal server usando o TSWEB por questões burocráticas e incompatibilidade com softwares (TSWEB não roda em outro browser que não seja o IE).
Hoje temos um script em .php que faz uma contagem quando alguém acessa o TSWEB, esse por vez redireciona as conexões (quando o botão conectar é pressionado) para 3 de nossos servidores de TS.
Como os servidores tem as configurações distintas (memória, processador, disco etc), existem algumas prioridades.
Assim:
- As primeiras 5 conexões ele joga para o SERVIDOR_A.
- As próximas 3 conexões ele joga para o SERVIDOR_B.
- As próximas 2 conexões ele joga para o SERVIDOR_C.
Temos aí 10 conexões que são contadas por um arquivo .txt que zera quando alcança esse número (10) e começa tudo de novo.
Bom, vou deixar um pouco de blá-blá-blá e colocar a mão na massa.
Instalação do Balance
A distribuição usada foi
Debian Lenny.
Para quem usa outra distribuição, segue link para download:
Instalando:
# aptitude install balance
Após isso é só rodar o programa conforme sua necessidade (man balance).
No meu caso fiz assim:
# balance 3389 SERVIDOR_C::40 SERVIDOR_B::40 ! SERVIDOR_A
Explicando:
Ele cria um "daemon", uma instância ouvindo na porta 3389 e joga ALTERNANDO 40 conexões para o SERVIDOR_C e 40 conexões para o SERVIDOR_B. Quando ambos alcançarem seu limites de conexões, ele começa a jogar todas as outras novas conexões para o SERVIDOR_A.
Sempre que um cliente desconecta digamos do SERVIDOR_B (esse estava com seu limite todo ocupado 40), a próxima conexão ele deveria jogar para o SERVIDOR_A, mas antes ele vê que tem uma conexão livre no SERVIDOR_B e ocupa essa.
Considerações
Bom, não é algo "EXTRAORDINÁRIO", mas me ajudou bastante e espero que ajude alguém.
Para quem ia fazer via iptables (rsrsrsr)... aí vai uma dica:
# iptables -t nat -A PREROUTING -i eth0 -p tcp -m statistic --mode nth --every 3 --packet 0 -d $if_lan --dport 3389 -j DNAT --to 192.168.0.3
# iptables -t nat -A PREROUTING -i eth0 -p tcp -m statistic --mode nth --every 3 --packet 1 -d $if_lan --dport 3389 -j DNAT --to 192.168.0.5
# iptables -t nat -A PREROUTING -i eth0 -p tcp -m statistic --mode nth --every 3 --packet 2 -d $if_lan --dport 3389 -j DNAT --to 192.168.0.3
É algo bem parecido, porém é sempre 1 para 1.
Referências
- apt-cache search balance (foi assim que achei o carinha rsrsrsrs).
- man balance
- man iptables
[]s
NOTA DE MODERAÇÃO: Apesar do texto não possuir conteúdo o suficiente para ser publicado como artigo, o mesmo ganha pontos por sua relevância, objetividade, utilidade e por se tratar de um assunto inédito no VOL.