Bom dia pessoal,

Eu estou com um pequeno e importante problema com relacao ao uso de load
balance com PF.
Atualmente uso o PF com funcionabilidade de Load Balance em substituto a
Switchs de load balance Layer 3, sendo alguns cenarios com aplicacoes
que compartilham as sessoes e outras que nao compartilham.
Vamos ao problema:

AMBIENTE:

Basicamente o ambiente de exemplo e' 1 servidor com PF e 3 servidores
com Web Server que nao compartilham sessao.

table <lb> { 10.0.0.1, 10.0.0.2, 10.0.0.3 }
rdr on xl0 inet proto tcp from any to IP_PUBLICO port 80 -> { <lb> }
round-robin sticky-address
pass in quick log on xl0 proto tcp from any to <lb> port 80 flags S/SA
modulate state (src.track 1800)

A opcao "sticky-address" faz com que o PF sempre que redirecione a
conexao para um servidor, crie uma entrada no "Source" (source-track
"pfctl -vs Source"), e que durante a permanencia desta source ele
encaminhe outras requisicoes vindas do mesmo IP para o mesmo servidor web.
A permanencia no "Source", por padrao e' ate' a ultima state existir.
Para que nos incrementamos este valor, devemos alterar o limit
"src.track" (set timeout src.track), eu fiz isso atraves da regra que
libera a conexao.

Resumindo:
O servidor vai fazer load balance entre os servidores na tabela <lb>, e
manter o mesmo servidor para o mesmo cliente em ate 1800 segundos (30
min) depois da ultima state excluida.

PROBLEMA:

Tudo isso descrito acima funciona perfeitamente, o problema comeca
quando temos que eliminar um IP do load balance.
O servidor 10.0.0.2, esta down e precisamos tira-lo do load balance,
neste caso executamos:
pfctl -t lb -T del 10.0.0.2

Neste caso tecnicamente o load balance ficara apenas entre os IPs
10.0.0.1 e 10.0.0.3, porem o problema e' que mesmo nao estando na tabela
<lb>, as requisicoes de clientes que ja estavam na tabela Source
apontando para o IP 10.0.0.2 vao continuar sendo redirecionadas para ele
10.0.0.2 ate expirar os timeout do src.track (no meu caso 30 min), ou
rodando o comando "pfctl -F Source", porem neste ultimo caso perdendo
TODAS as referencias de "sessoes" deste e de outros load balance e
source-tracks, neste firewall.

POSSIVEIS SOLUCOES:

Infelizmente as unicas solucoes que consegui visualizar, e' alterando o
codigo do PF, vamos as sugestoes:
1) Criar algo similar a "pfctl -k" de states para Source.
   Neste caso na hora de tirar um servidor do load balance, executariamos:
   pfctl -t lb -T del 10.0.0.2
   pfctl -PARAMETRO_NOVO 10.0.0.2
2) Fazendo o sticky-address, checar antes de redirecionar se o IP esta
ainda nas opcoes de load balance (no meu caso se esta na tabela <lb>).

Alguem conhece outra alternativa ?
Algum hacker de PF se habilita ? hehehe

Abraços

-- 
Diego Linke
Public Key: http://www.gamk.com.br/gamk.asc


-------------------------
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

Responder a