Loadbalance
Publicado por Marcelo Viana (última atualização em 06/01/2012)
[ Hits: 8.423 ]
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
Instalação do Nagios por script
Instala os modulos de bateria dos notebook da Acer
Script de Autenticação simples do Speedy HOme
Firewall para Compartilhamento de Conexão 3G
BACKUP para micros com Windows XP utilizando o share administrativo ( C$ )
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Plasma 6 com partes em inglês (0)
A area de trabalho ficou preta (6)
De volta para o futuro - ou melhor, para o presente (22)