Balanceamento de carga entre serviços com iptables

Vagabundando pela net encontrei uma situação mencionada pelo Matias Neiff que relatava atrasos em um gateway GPS desenvolvido em JAVA. Imagináva-se ser problema de banco, disco, rede, etc. O problema estava no próprio gateway que parava após um certo número de conexões.A solução foi fazer o balanceamento de conexões usando iptables para fazer um Round Robin nas conexões, ou seja, cria-se uma nova conexão (-m state –state NEW) e a envia para uma outra (-m statistic –mode nth) fazendo coincidir o número de pacotes (–packet 1), sobre a quantidade total de serviços (–every 3), cada vez que o limite é atingido o contador volta para zero.

Abaixo segue o exemplo mencionado:

iptables -t nat -I PREROUTING -p tcp –dport 5507 -m state –state NEW -m statistic –mode nth –every 3 –packet 0 -j DNAT –to-destination 192.168.1.4:5507

iptables -t nat -I PREROUTING -p tcp –dport 5507 -m state –state NEW -m statistic –mode nth –every 3 –packet 1 -j DNAT –to-destination 192.168.1.5:5507

iptables -t nat -I PREROUTING -p tcp –dport 5507 -m state –state NEW -m statistic –mode nth –every 3 –packet 2 -j DNAT –to-destination 192.168.1.4:5512

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s