terça-feira, 25 de maio de 2010

Rodando VRRP no CentOS

Este post fala de como rodar o VRRP (RFC 2338) em Linux. Aqui é especialmente no CentOS, mas isso pode ser feito em qualquer outra distribuição Linux. É somente um ".tar.gz" e um make e já era. Para saber o propósito disso, imagine uma situação onde você quer redundância, tanto na parte de redes quanto em aplicações onde é necessário alta disponibilidade (Nas distros RHEL/CentOS, o VRRP é presente no Cluster Suite e para o LVS, para manter disponibilidade em ambientes de aplicativos em cluster...Corrija-me se precisar...). Com isso, podemos fazer com que um servidor web "tome conta" dos pedidos dos clientes enquanto um outro servidor está down ou para manter redundância de first-hop (Default Gateway) em uma rede. Segue uma topologia abaixo:



  • O que acontece?

    Nesta topologia, um dos servidores ou gateways têm uma prioridade definida. O que tiver maior valor, será o master. Sendo o master, logo ele irá responder pelo endereço virtual (192.168.100.23), até que por algum motivo, ele fique "offline" e um backup assuma o posto. Isso é feito através de multicast com pacotes UDP no endereço 224.0.0.18. Depois que o master "cai", o backup percebe que não há mais mensagens do master e o backup acaba tornando-se o master.

  • Instalando

    A instalação é bem simples. Em uma instalação mínima, vamos precisar dos pacotes make, gcc e do libpcap0-devel. Só instalar com o comando make e depois copiar o arquivo vrrpd em /usr/sbin (rodar como root) e o arquivo vrrpd.8 em /usr/share/man/man8/ do seu CentOS, para consultar no man pages ;). O mesmo pode ser feito na outra máquina, pois estamos falando de redundância aqui.

   [root@scooby ~]# tar  xvfz vrrpd-1.0.tar.gz 
   [root@scooby ~]# cd vrrpd-1.0
   [root@scooby ~]# make
   [root@scooby ~]# cp vrrpd /usr/sbin/
   [root@scooby ~]# cp vrrpd.8 /usr/share/man/man8/

  • Pondo para funcionar


    A configuração dele é bem simples. Para que ele funcione depois do boot, podemos pôr a linha de comando no arquivo /etc/rc.local onde -i especifica a interface , -p a prioridade (O valor maior será o master), -v para o grupo, pode ser usado quando tiver redes diferentes e o endereço IP a seguir é o endereço IP virtual que irá ser usado para os requests ou como default gateway de uma rede. Para mais informações podemos ver pelo man pages do vrrpd. Você pode ver os logs gerados pelo daemon vrrpd em /var/log/messages. Podemos ver quando um nó se tornou master e quando ele se tornou backup, devido alguma mudança de prioridade.


Note que o host que tiver maior prioridade (opção -p) , será eleito como master:

[root@shaggy ~]# vrrpd -i eth0 -p 46 -v 1 192.168.100.23
Remove a stale pid file /var/run/vrrpd_eth0_1.pid
[root@shaggy ~]#
[root@shaggy ~]# tail -f /var/log/messages
[...]
May 25 23:32:04 shaggy vrrpd: vrrpd version 0.4 starting...
May 25 23:32:05 shaggy vrrpd: VRRP ID 1 on eth0: we are now a backup router.
May 25 23:32:12 shaggy kernel: eth0: Using EEPROM-set media 100baseTx-FDX.
May 25 23:32:12 shaggy vrrpd: VRRP ID 1 on eth0: 192.168.100.21 is down, we are now the master router.
E o com menor prioridade... O backup:

[root@scooby ~]# vrrpd -i eth0 -p 45 -v 1 192.168.100.23
Remove a stale pid file /var/run/vrrpd_eth0_1.pid
[root@scooby ~]#
[root@scooby ~]# tail -f /var/log/messages
[...]
May 25 23:23:34 scooby vrrpd: vrrpd version 0.4 starting...
May 25 23:23:34 scooby vrrpd: VRRP ID 1 on eth0: we are now a backup router.
May 25 23:23:48 scooby kernel: eth0: Using EEPROM-set media 100baseTx-FDX.
May 25 23:23:49 scooby vrrpd: VRRP ID 1 on eth0: we are now the master router.
May 25 23:24:58 scooby kernel: eth0: Using EEPROM-set media 100baseTx-FDX.
May 25 23:24:58 scooby vrrpd: VRRP ID 1 on eth0: 192.168.100.22 is up, we are now a backup router.

Por hoje é só...

Abraços!

2 comentários:

  1. Parabéns Vitão! Este post é muito objetivo e é exatamente o que eu estava procurando.
    Pretendo montar um lab em breve.
    Abraços!
    Thiago Ozaki

    ResponderExcluir
  2. Valeu Thiago! Ainda achei algumas coisas sobre a isso no Linux, parece que tem que por a interface física em modo broadcast.. Nunca tentei depois que vi isso, mas é +- essa a config:

    ifconfig eth0 MULICAST

    Abrass e bom estudo ae!!

    Vitor

    ResponderExcluir