Loadbalance
Publicado por Marcelo Viana (última atualização em 06/01/2012)
[ Hits: 8.499 ]
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
Barra de progresso em shell script com cores roxa e verde
pptd - Simples daemon para controle de conexões pptp.
zsh: Sattolo's Random Cyclic Permutation
Descritores de Arquivos e Swappiness
tux-gpt - Assistente de IA para o Terminal
Instalação e configuração do Chrony
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
O Que Fazer Após Instalar Ubuntu 25.04
O que você está ouvindo agora? [2] (175)
Copiar Layout do Teclado para aplicar em outra Distribuição (10)
Autenticação necessária. um aplicativo quer acesso ao chaveiro (2)