Configurando um Proxy com Balanceamento de carga e Alta disponibilidade usando DNS round robin, Linux, HeartBeat e Mon.
O propósito desse desse documento é explicar como funciona,instalar e configurar um ambiente de Proxy com Alta disponibilidade e balanceamento de carga.
Consideramos que o Proxy já está instalado e configurado, existem vários tutoriais na internet para isso.
Vou dar uma visão geral sobre como funciona o ambiente, segue abaixo uma imagem que ira ajudar a entender o ambiente:

Vamos la, as máquinas srv001.domain.com e srv002.domain.com respondem para os ips 192.168.1.101 e 192.168.1.102, mas cada máquina tem um vip (virtual ip) 192.168.1.110 e 192.168.1.111. Quando o DNS é consultado sobre o host proxy.domain.com o DNS responde os dois vips de forma aleatória (isso chama-se round robin) e assim garantimos o balanceamento de carga, como cada ip está em um servidor os dois ips serão usados e logo os dois servidores serão usados.
A imagem abaixo nos ajuda a entender como funciona a alta disponibilidade:

No exemplo acima o servidor srv001.domain.com parou de responder e o srv002.domain.com assumiu as duas vips, isso significa nenhum chamado aberto sobre a queda do proxy de internet.
Obs. Mesmo sem usuário reclamando, nós temos que identificar o problema e corrigir e nesse documento tem uma configuração que caso der problema no proxy o sistema Mon nos envia um e-mail avisando o que está acontecendo.
Com essa configuração aumentamos em um ‘9′ nossa disponibilidade, entenda isso no quadro abaixo:
| Disponibilidade (%) |
Downtime/ano |
Downtime/mês |
| 95% |
18 dias 6:00:00 |
1 dias 12:00:00 |
| 96% |
14 dias 14:24:00 |
1 dias 4:48:00 |
| 97% |
10 dias 22:48:00 |
0 dias 21:36:00 |
| 98% |
7 dias 7:12:00 |
0 dias 14:24:00 |
| 99% |
3 dias 15:36:00 |
0 dias 7:12:00 |
| 99,9% |
0 dias 8:45:35.99 |
0 dias 0:43:11.99 |
| 99,99% |
0 dias 0:52:33.60 |
0 dias 0:04:19.20 |
| 99,999% |
0 dias 0:05:15.36 |
0 dias 0:00:25.92 |
Ufa! Vamos começar a instalação e configuração do ambiente.
Onde fazer download dos pacotes ? ( A documentação foi feita baseada no RHEL 5.2 )
http://download.opensuse.org/repositories/server:/ha-clustering/RHEL_5/x86_64/
http://dag.wieers.com/
”’Obs. Todos os passos precisam ser feitos nas duas máquinas.”’
Vamos começar a instalação dos pacotes:
rpm -ivh libheartbeat2-2.99.2-1.1.x86_64.rpm
rpm -ivh heartbeat-common-2.99.2-1.1.x86_64.rpm
rpm -ivh heartbeat-resources-2.99.2-1.1.x86_64.rpm
rpm -ivh perl-TimeDate-1.16-1.2.el5.rf.noarch.rpm
rpm -ivh heartbeat-2.99.2-1.1.x86_64.rpm
rpm -ivh perl-Convert-BER-1.3101-1.el5.rf.noarch.rpm
rpm -ivh perl-Mon-0.11-2.2.el5.rf.noarch.rpm
rpm -ivh perl-AOL-TOC-0.340-1.el5.rf.noarch.rpm
rpm -ivh perl-Math-TrulyRandom-1.0-1.2.el5.rf.x86_64.rpm
rpm -ivh perl-Net-SNPP-1.17-1.2.el5.rf.noarch.rpm
rpm -ivh perl-Time-Period-1.20-2.el5.rf.noarch.rpm
rpm -ivh mon-1.2.0-1.el5.rf.x86_64.rpm
Obs. Pode ser que na sua máquina tenha mais dependencias.
Agora temos o sistema básico do HeartBeat e do Mon instalado.
O HeartBeat precisa de um canal para testar se o outro nó está no ar, ele aceita cabo serial ou cabo par trançado, a configuração será feita usando um cabo serial.
Primeiro iremos configurar o HeartBeat.
Copiando os arquivos originais:
cp /usr/share/doc/packages/heartbeat/ha.cf /etc/ha.d/
cp /usr/share/doc/packages/heartbeat/authkeys /etc/ha.d/
cp /usr/share/doc/packages/heartbeat/haresources /etc/ha.d/
Obs. Sempre antes de modificar um arquivo original salve um .orig do arquivo, assim sempre iremos saber as mudanças feitas.
cd /etc/ha.d/
cp authkeys authkeys.orig
cp ha.cf ha.cf.orig
cp haresources haresources.orig
Primeiro iremos editar o arquivo authkeys, que é onde se faz autenticação entre os nós.
cat /etc/ha.d/authkeys
auth 2
2 sha1 XXXXXX <- Coloque sua senha aqui, essa senha é para a autenticação entre os dois hosts
Precisamos deixar esse arquivo com permissão 600
chmod 600 /etc/ha.d/authkeys
Editaremos agora o ha.cf
egrep -v ‘(^#|^$)’ /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 10
serial /dev/ttyS0
auto_failback on
node srv001.domain.com
node srv002.domain.com
Obs. Declare os hosts que estão em nodes no /etc/hosts, e o hostname da máquina deve ser idêntico também.O comando uname -n pode te ajudar.
Editaremos o haresources, aqui ficam os comandos/serviços que mudaram quando o outro host cair
egrep -v ‘(^$|^#)’ /etc/ha.d/haresources
srv001.domain.com 192.168.1.110/24/eth0
srv002.domain.com 192.168.1.111/24/eth0
As linhas acima querem dizer que cada um dos nós tem um ip diferente, mas quando um deles cair o outro nó assume os dois.
O Importante agora é que você faça inúmeros testes, reboot a máquina, pare o heartbeat, estude o comportamento do cluster.
Agora vamos instalar o Mon, ele quem vai monitorar o squid e caso o processo pare de responder o Mon vai nos alertar e parar o heartbeat, assim o outro nó responderá pelos dois IPS.
Abaixo iremos usar um script de monitoramento de sockets tcp, o script se chama tcpch.monitor.
cd /tmp/
wget ftp://ftp.kernel.org/pub/software/admin/mon/contrib/all-monitors.tar.gz
tar -zxvf all-monitors.tar.gz
cp monitors/tcp/tcpch.monitor /usr/lib64/mon/mon.d/
Abaixo tem outro script bem simples, para parar o heartbeat quando for necessário.
cd /usr/lib64/mon/alert.d
cat heartbeat.alert
#!/usr/bin/perl
system (”/etc/init.d/heartbeat stop”);
Por fim vamos configurar o mon, lembrando-se que iremos usar a porta padrão do squid.
cd /etc/mon/
cp mon.cf mon.orig
cat /etc/mon/mon.cf
### global options
cfbasedir = /etc/mon
pidfile = /var/run/mon.pid
statedir = /var/lib/mon/state.d
logdir = /var/lib/mon/log.d
dtlogfile = /var/lib/mon/log.d/downtime.log
dtlogging = yes
alertdir = /usr/lib64/mon/alert.d
mondir = /usr/lib64/mon/mon.d
maxprocs = 20
histlength = 100
randstart = 60s
userfile = /etc/mon/userfile
### group definitions (hostnames or IP addresses)
hostgroup proxy localhost
watch proxy
service proxy
interval 30s
monitor tcpch.monitor -p 3128 -t 10 localhost
allow_empty_group
period wd {Sun-Sat}
alertafter 3
alert heartbeat.alert
alert mail.alert -S “Proxy srv001.domain.com down ” adminunix@domain.com
upalert mail.alert -S “Proxy srv001.domain.com adm up” adminunix@domain.com
alertevery 30m
Pronto, aqui termina a configuração do mon e do nosso pequeno cluster.
Vamos colocar no ar agora, segue abaixo os últimos passos, ”’por favor tudo isso nas duas máquinas”’:
chkconfig –add heartbeat –levels 3,5
chkconfig heartbeat on
chkconfig –add mon –levels 3,5
chkconfig mon on
Agora reinicie a máquina e veja como ficou bonito!
Referências:
http://www.linux-ha.org/HomePage
http://www.ibm.com/developerworks/library/l-halinux/
http://www.linuxjournal.com/article/5862
http://www.vivaolinux.com.br/dica/Configurar-HeartBeat
http://www.ultramonkey.org/
http://www.howtoforge.com/high_availability_heartbeat_centos
http://idefix.net/~koos/irregular.php/irregular-20060123/monitoring-squid-using-mon
http://www.lugatgt.org/articles/mon/
http://www.ha-mc.org/node/15