[FUG-BR] FreeBSD + 2 Links redundantes HA

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Sexta Julho 27 14:03:16 BRT 2007


Mario Augusto Mania wrote:
> Graaaaaannnde  eksffa :) hehehe (sem duplo sentido hehehe)

hahahaha, sou reconheco mesmo um sentido... aquele que eu vejo todo dia 
no espelho.. "e ai, ta grande em rapah?" hehehe =P

> 
> Eae, quanto tempo hein? :)
> 
> Bem, quanto a thread, o patrick esta certissimo, HA nao eh esse tipo
> de gambi que a gente faz, porem, nos, meros mortais, sem acesso a
> grandes recursos financeiros e tecnologicos, temos nas maos grandes
> ferramentas opensource, que, se bem usadas, soam como magica aos olhos
> do cliente.
> 
> Ou seja, vc chegar para um cliente (de pequeno porte, falando em
> realidade brasileira e principalmente em interiorrrrr hehehe) e falar
> pra ele, pode contratar dois link (adsl e radio, adsl da operadora a e
> outro da b, etc.. etc..) que eu monto o "servidor de internet" heheheh
> e vc nao fica offline nunca mais na vida.... e vc consegue fazer isso,
> e vc mostra pro cliente, manda ele "tirar o cabo da tomada" do
> primeiro modem, e ver q a internet continua funcionando, depois liga
> de volta o cabo e retira do outro link e continnua funcionando a net,
> ae vc abre dois ttys e mostra o trafshow das duas interfaces hehehe,
> mostrando que determinado pc esta "navegando" pelo link 1 e o outro pc
> navegando pelo link 2, bem.... desculpe minha impolgacao, mas isso eh:
> "Power to Server"...
> 
> Ou seja, vc pega hardware barato, software livre, links podres (adsl
> etc..) a custo baixo e mostra esse novo mundo on-line pro cliente, ele
> te paga feliz da vida, vc fica feliz da vida, os provedores ficam
> feliz da vida (afinal o cara teve que contratar dois links :)), e, no
> final da historia... todos viveram felizes para sempre...
> 
> 
> Eh logico que nao vamos chegar com uma solucao dessa para o Banco do
> Brasil, ou outro cliente de porte GIGANTE, porem, para os escritorios
> de contabilidades, escolas de informatica, lan-house, escolas de
> ensino medio e fundamental... etc... eh MUITO VANTAJOSO... e me
> desculpem a empolgacao novamente hehehehe.... essa eh a "GAMBIARRA"
> mais maravilho que poderia existir... :)
> 
> Bem... esse foi um desabafo, longe de ser um "flame" hehehe... e
> somente uma troca de experiencia :)

Exatamente. Obviamente tem seu valor e sua forma de fazer. Mas meu 
e-mail anterior foi pq vi um monte de indicacoes "usa isso, usa aquilo" 
e se o amigo q perguntou tentasse usar ia se frustrar e n conseguir nada 
hehe. Policy-routing é a unica coisa que sobra.

Alias ja que entramos no assunto gambi pro bem, eu gosto de uma 
abordagem um pouco diferente. Costumo colocar 2 maquinas onde 
normalmente so se usaria uma, ou as vezes 3.

Uma maquina multi-homed, recebendo o link da(s) operadoras (wireless, 
adsl, o que for) e fazendo NAT com balanceamento, que pode ser pf ou 
natd. Duas interfaces falsa, ligando em cross uma segunda maquina, numa 
rede 252 pra cada interface (seria possivel tambem trabalhar com alias e 
usar so uma interface, logico). essa segunda maquina, de fato, atuando 
como gateway, e ai, ela faz o policy-routing, e nao as maquinas na 
frente. As maquinas na frente fazem apenas o NAT, tambem seletivo em 
suas interfaces, e a segunda, faz o gateway. A vantagem é que essa 
segunda pode repassar os pacotes com "ipfw add prob X fwd" pra frente, 
para cada gateway falso, que por sua vez faz o NAT. Assim é possível, 
pra TCP, fazer o balanceamento com qualquer relacao de peso... "prob 
0.3" pra mandar 30% pra um link e o restante pro outro, e assim 
sucetivamente, de acordo com a variação necessária.

Isso é bom, em casos onde o cara tenha links com largura de banda 
diferente (1 com 1mb e outro com 2mb por exemplo). Ai voce manda 1/3 pra 
um link a cada 2/3 pra outro. Porem, so com 1 box isso tbm seria 
possivel. O grande barato porem, é que, devido a "gambiarra" em questao 
ser limitada, o que a gente balanceia? A saida, as requisicoes ou as 
sessoes...

Assim sendo, voce manda "essa sessao pelo link 1" e "essa outra pelo 
link2" e voce nao sabe o que vai voltar, e nao tem controle nenhum sobre 
o que vai voltar. Assim sendo, mesmo com links iguais, ter um mero 
round-robin é negativo. Um ou dois clientes podem, em 1 ou 2 sessões 
consumir o link todo, simplismente porque voce nao sabe o que volta. 
Logico, que pode por controle de banda ou impor uma politica WF2Q+ pra 
nao deixar um cara destruir um link.

Mas convenhamos, em todo e qualquer caso que nao estejamos falando de um 
provedor querendo pindurar varios carinhas em "fatias de 64Kbps" nos 
adsl, controlar banda n se aplica. E ainda se se aplicar, o problema 
continua, por exemplo, voce manda "20 sessoes de saida pro link1 e mais 
20 pro link2" todos com banda controlada a 64Kbit/s, e ai no primeiro 
link voce tem 20 sessoes que precisem apenas, naquele momento, de 
32Kbit/s. Mesmo assim suas proximas sessoes sendo balaceadas serao 
round-robin. E ai como algumas estao abaixo da banda controlada, é 
inevitavel: voce vai sobrecarregar mais um link do que o outro.

Com a abordagem que eu mencionei, na primeira maquina voce pode 
monitorar (com snmp, ou ifmon, ou ate mesmo netstat, ou ipfw count) o 
consumo daquele link e "servir" a outra maquina com essa informação, 
que, aquele mesmo script gambiarrento pode passar tambem modificar as 
regras de "ipfw prob X fwd" e mudar o "prob" para balancear mais ou 
menos sessoes de saida, pro link 1, em favor do link 2, para nao 
congestiona-lo ainda mais.

Porem, como toda boa gambiarra tem limites tambem.

Se alguem precisar e quiser fazer isso, la vai os problemas que eu 
enfrentei:

1 - so consigo fazer isso funcionar "direitinho" com tcp; pois o "prob X 
fwd" é so na saida e identifico "setup" pra balancear por sessao; UDP e 
ICMP ficam seletivos, e nao balaceados;

2 - Com nat do pf isso é mais facil.
3 - Com natd voce tem que:
	- usar "instance" no natd.conf
	- usar "tee" pro divert da primeira "instance" ao inves de divert, e 
divert pro divert da segunda (tee é um divert mais elaborado que desvia 
um pacote e deixa uma copia dele seguir no firewall)

O instance do natd não é documentado. É uma daquelas coisas que você tem 
que garimpar no código-fonte ou alguem (normalmente o desenvolvedor que 
fez isso) fala que existe hehe. Tem um exemplo pratico que eu postei na 
lista ipfw. Seu uso é simples, e funcional, com a vantagem que 2 natd 
instanciados nao sao 2 natd independentes. Um conhece a parte "T" do 
"NAT" alheio.

http://lists.freebsd.org/pipermail/freebsd-ipfw/2007-May/003003.html

Meus 2 cents a discussao, só pra ilustrar o quão adepto eu tbm sou, 
dessa gambiarra. Mas que é gambiarra é... hehehe

-- 
Patrick Tracanelli

FreeBSD Brasil LTDA.
(31) 3281-9633 / 3281-3547
316601 em sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"



Mais detalhes sobre a lista de discussão freebsd