Arquivos

Aplicando balanceamento de carga e alta disponibilidade em um proxy usando DNS round robin, Linux, Squid, Heart Beat e Mon.

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

1 comment to Aplicando balanceamento de carga e alta disponibilidade em um proxy usando DNS round robin, Linux, Squid, Heart Beat e Mon.

Leave a Reply