Load Balancer com Failover, Perlbal e Heartbeat para servidores web

Explicarei aqui como montar um LoadBalancer com Failover e Heartbeat para seus servidores web. Como este é meu primeiro artigo, caso eu cometa algum erro, por favor, fiquem a vontade para corrigir.

[ Hits: 49.869 ]

Por: Igor Pereira Santos em 16/02/2009


Instalando e configurando o HeartBeat



Ainda nos dois servidores (srv-1 e srv-2) instalaremos o pacote Heartbeat.

Logado como root:

# apt-get install heartbeat

Vamos editar o arquivo abaixo e acrescentar uma linha:

# vim /etc/sysctl.conf

Adicione no final do arquivo a linha abaixo:

net.ipv4.ip_nonlocal_bind=1

Salve o arquivo e saia.

Logo após execute o comando:

# sysctl -p

Edite também o arquivo:

# vim /etc/ha.d/authkeys

Adicione o conteúdo abaixo:

auth 3
3 md5 somerandomstring

Coloque as seguintes permissões no arquivo:

# chmod 600 /etc/ha.d/authkeys

Agora somente no servidor 1 (srv-1), edite o arquivo abaixo:

# vim /etc/ha.d/ha.cf

E acrescente o conteúdo abaixo:

keepalive 2
#
#        deadtime: seconds-to-declare-host-dead
#

deadtime 10
#
#        What UDP port to use for udp or ppp-udp communication?
#

udpport 694
bcast eth0
mcast eth0 225.0.0.1 694 1 0
ucast eth0 192.168.0.2
#        What interfaces to heartbeat over?
udp eth0
#
#        Facility to use for syslog()/logger (alternative to log/debugfile)
#

logfacility local0
#
#        Tell what machines are in the cluster
#        node    nodename ...    -- must match uname -n

node srv-1
node srv-2

Importante: Como "node names" temos de utilizar a saída do comando uname.

# uname -n

Agora apenas no servidor 2 (srv-2) edite o arquivo abaixo:

# vim /etc/ha.d/ha.cf

E acrescente o conteúdo abaixo:

#
#        keepalive: how many seconds between heartbeats
#

keepalive 2
#
#        deadtime: seconds-to-declare-host-dead
#

deadtime 10
#
#        What UDP port to use for udp or ppp-udp communication?
#

udpport 694
bcast eth0
mcast eth0 225.0.0.1 694 1 0
ucast eth0 192.168.0.1
#        What interfaces to heartbeat over?
udp eth0
#
#        Facility to use for syslog()/logger (alternative to log/debugfile)
#

logfacility    local0
#
#        Tell what machines are in the cluster
#        node    nodename ...    -- must match uname -n

node    srv-1
node    srv-2

Agora nos dois servidores (srv-1 e srv-2).

Edite o arquivo:

# vim /etc/ha.d/haresources

Insira a linha abaixo:

srv-1 192.168.0.3

Para finalizar reinicie o Heartbeat nos dois servidores.

# /etc/init.d/heartbeat start

Rode o comando:

# ip addr sh eth0

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:a5:5b:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.3/24 brd 192.168.0.255 scope global secondary eth0:0
    inet6 fe80::20c:29ff:fea5:5b93/64 scope link
       valid_lft forever preferred_lft forever

Para checar se está rodando:

# ifconfig
eth0  Link encap:Ethernet  HWaddr 00:0C:29:A5:5B:93
      inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
      inet6 addr: fe80::20c:29ff:fea5:5b93/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:63983 errors:0 dropped:0 overruns:0 frame:0
      TX packets:31480 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:92604963 (88.3 MiB)  TX bytes:2689903 (2.5 MiB)
      Interrupt:177 Base address:0x1400

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:A5:5B:93
      inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      Interrupt:177 Base address:0x1400

lo    Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:16436  Metric:1
      RX packets:56 errors:0 dropped:0 overruns:0 frame:0
      TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:3888 (3.7 KiB)  TX bytes:3888 (3.7 KiB)

Agora no srv-2:

# ip addr sh eth0
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:e0:78:92 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
    inet6 fe80::20c:29ff:fee0:7892/64 scope link
       valid_lft forever preferred_lft forever

A saída do ifconfig:

# ifconfig
eth0   Link encap:Ethernet  HWaddr 00:0C:29:E0:78:92
       inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
       inet6 addr: fe80::20c:29ff:fee0:7892/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:75127 errors:0 dropped:0 overruns:0 frame:0
       TX packets:42144 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:109669197 (104.5 MiB)  TX bytes:3393369 (3.2 MiB)
       Interrupt:169 Base address:0x1400

lo     Link encap:Local Loopback
       inet addr:127.0.0.1  Mask:255.0.0.0
       inet6 addr: ::1/128 Scope:Host
       UP LOOPBACK RUNNING  MTU:16436  Metric:1
       RX packets:56 errors:0 dropped:0 overruns:0 frame:0
       TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0
       RX bytes:3888 (3.7 KiB)  TX bytes:3888 (3.7 KiB)

Página anterior     Próxima página

Páginas do artigo
   1. O que é e como funciona?
   2. Instalando e configurando
   3. Configuração dos Loadbalancer
   4. Instalando e configurando o HeartBeat
   5. Iniciando o Perlbal
   6. Suporte a virtual hosts no Perlbal
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Modem USB 3G largado na gaveta! Nãããõooo...

Como montar um proxy reverse no servidor Apache

Roteamento por origem no Linux

Interoperabilidade monitorando servidores e estações Windows com servidor Linux usando MRTG

Compartilhando internet via rádio entre um servidor Linux e clientes Windows

  
Comentários
[1] Comentário enviado por walber em 16/02/2009 - 18:07h

Parabéns, ótimo artigo.

[2] Comentário enviado por rogi.band em 17/02/2009 - 10:20h

Obrigado amigo.

[3] Comentário enviado por walber em 18/02/2009 - 18:06h

Rogi, por acaso vc teria alguma dica para fazer um server com heartbeat para servidor de internet tipo.

firewall-1 com ip 192.168.0.4
firewall-2 com ip 192.168.0.5
e ip virtual 192.168.0.6 no meios desses caras daí quando o firewall 1 caisse o firewall 2 assumisse, se tiver alguma sugestão da um help ae.

Valeu.

[4] Comentário enviado por rogi.band em 18/02/2009 - 23:01h

Opa, blzinha?!

Da pra fazer sim. Já vi esse esquema que voce está querendo mais com OpenBSD usando CARP.
Nunca montei um do zero, mas já trabalhei com Open usando CARP, funciona legal e não parece ser difícel de montar um, da uma olhada no site do Open e no google que voce deve achar alguma coisa explicando legal em como montar um assim.

Outra coisa que voce pode tentar, é pegar meu artigo e montar sem os webservers, e tentar fazer um firewall como voce está querendo.

Derrepente pode ser meu proximo artigo, já que é dificel de encontrar manuais sobre loadbalancer e failover, principalmente em português.

[]s,
Igor

[5] Comentário enviado por jpfaria em 02/03/2009 - 16:03h

Galera,

Existe a possibilidade de fazer o cluster load-balancer utilizando somente o apache
e utilizar Heartbeat para fazer o cluster de alta disponibilidade.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts