Loadbalance
Publicado por Marcelo Viana (última atualização em 06/01/2012)
[ Hits: 8.491 ]
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 fazer funcionar o bloqueio por horário - Squid
Inventário e Análise de hardware
Criação de ports para slackware
Verificar conexão com Internet
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Criando uma Infraestrutura para uma micro Empresa
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
O Que Fazer Após Instalar Fedora 42
Debian 12 -- Errata - Correções de segurança
Instalando o Pi-Hole versão v5.18.4 depois do lançamento da versão v6.0
O FIM da minha distro predileta: ARCOLINUX ...que pena (5)
Copiar Layout do Teclado para aplicar em outra Distribuição (1)
Não acesso a conta do Banco do Brasil pelo Google Chrome [RESOLVIDO] (3)