Loadbalance
Publicado por Marcelo Viana (última atualização em 06/01/2012)
[ Hits: 8.674 ]
Homepage: infSite.org
LoadBalance para servidor com dois links de Internet e um para rede local.
O Script faz o balanciamento através de marcação de pacotes (ip rule) para serem distribuídos pelo "ip route" de acordo com a tabela indicada.
# Em outros casos, poderá servir apenas de exemplo para ser estudado.
#!/bin/bash
### INTERFACES:
rede1="eth0"
iface1="eth1"
iface2="eth2"
### Obs.: As interfaces tem que está de acordo com os gateways.
### Exemplo: eth1 10.15.20.21 gateway 10.15.20.10
### Exemplo: eth2 10.26.20.21 gateway 10.26.20.1
### GATEWAYS
gw1="10.15.20.1"
gw2="10.26.20.1"
### Outras variáveis
nomeScript="loadbalance-s.sh"
op=0
a=true
### HABILITA ROTEAMENTO:
echo "1" > /proc/sys/net/ipv4/ip_forward
function start(){
### Chama funções.
limpeza ; nat ; rotas ; looping
}
function limpeza(){
### Limpa tabelas.
iptables -t mangle -F
iptables -t mangle -X
iptables --flush
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
ip route flush cache
}
function nat(){
### MASCARAMENTO(NAT) E MARCAÇÃO DE PACOTES PARA ROTEAMENTO.
iptables -t nat -A POSTROUTING -o $iface1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $iface2 -j MASQUERADE
iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
}
function marcacao1(){
### Altera a marcação de pacotes da tabela "mangle"
iptables -t mangle -R PREROUTING 1 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
}
function marcacao2(){
### Altera a marcação de pacotes da tabela "mangle"
iptables -t mangle -R PREROUTING 1 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 2
}
function rotas(){
### MARCA E PRIORIZA DE ACORDO COM A TABELA
ip rule add fwmark 1 table 10 prio 0
ip rule add fwmark 2 table 20 prio 0
### DESTINA OS PACOTES
ip route add default via $gw1 dev $iface1 table 10
ip route add default via $gw2 dev $iface2 table 20
}
function looping(){
### LOOP PARA MUDAR A MARCAÇÃO
while [ $a ]; do
sleep 1
if [ $op == 0 ]; then
op=1
marcacao1
else
op=0
marcacao2
fi
done
}
function para(){
### PARA O LOADBALANCE.
a=false
limpeza
kill -9 `ps aux |grep $nomeScript|awk '{print $2}'`
}
function helpp(){
### HELP
echo "Uso: loadbalance + opção"
echo "Modos:"
echo "./$nomeScript start &"
echo "./$nomeScript stop &"
echo "sh $nomeScript start &"
echo "sh $nomeScript stop &"
echo "Modo depuração: sh -x $nomeScript start"
}
case $1 in
### RECEBE VALOR EXTERNO
'start') start ; exit ;;
'stop') para ; exit ;;
'--help') helpp ; exit ;;
*) echo "Utilize start ou stop. Ex.: ./$nomeScript start."; exit ;;
esac
# É o Senhor que mostra os caminhos. Obrigado Senhor por me ajudar atravez de tantos exemplos.
# www.technocristo.com
Script Para reiniciar o Debian
Descompactar vários arquivos ao mesmo tempo de um diretório específico
gera saída com substituindo coluna por outra (substr)
arrcomb: Gerando Arranjos e Combinações
Script para tirar relatorios de acesso discado
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Podem me chamar de 1mbecil :) (3)
diferença entre o Tor baixado pelo Gerenciador de Aplicativos e o Tor ... (3)
Servidor de DNS BIND Ubuntu server (0)
Debian Stable travado em atualizações: dist-upgrade não resolve [RESOL... (11)









