Loadbalance
Publicado por Marcelo Viana (última atualização em 06/01/2012)
[ Hits: 8.727 ]
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
Localizar e Matar Determinado Processo Pelo Nome
PKG Sync v3.0 - Utilitário para backup de pacotes deb baixados - Versão final
Busca de arquivos nas ports FreeBSD
Script Firewall Iptables + compartilhar internet
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Removendo entradas de boot UEFI "fantasmas" via terminal
Atualizações de Segurança Automáticas no Debian
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Uma pergunta bem simples mas não achei resposta (ainda) [RESOLVIDO] (2)
Tentativa de instalar Linux em um notebook HP 246 G6 (2)
O que você está ouvindo agora? [2] (228)









