[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