Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Alta disponibilidad mediante Keepalive


Keepalive es un magnífico sistema de alta disponibilidad, nos permitirá migrar de forma automática ips entre diferentes servers, esto nos permitirá tener un sistema altamente disponible con un downtime mínimo.

En este ejemplo vamos a utilizar keepalive para mantener varias vips(ips compartidas) por el proceso haproxy.

Keepalive funciona en base a:

  • VRRP: Este protocolo consiste en el envio de mensajes keepalive a nivel 2, esto implica que los equipos deben de estar en el mismo segmento de red.
  • vrrp_script: Script que comprueba que el proceso a monitorizar sigue activo.

 

Los equipos que tengan el mismo PASS configurado se monitorizan entre ellos, si se cae las VIPs se configuran automáticamente en la interfaz indicada.
NOTA: En la misma lan se pueden tener varios keepalives pero cada uno con un router_id, virtual_router_id y vrrp_instance diferentes.

emerge -av keepalived

 

En ha10:

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server localhost
   smtp_connect_timeout 30
   router_id LVS_MAIN_HA
}
vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2 # check cada 2 segundos

    weight 2 # anyade 2 puntos de prioridad si OK

}

vrrp_instance VI_HA_1 {
    state MASTER
    interface eth1
    virtual_router_id 10
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass XXXXXXXXX
    }
    virtual_ipaddress {
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
    }

    track_script {
        chk_haproxy
    }
}

En ha11:

vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server localhost
   smtp_connect_timeout 30
   router_id LVS_MAIN_HA
}
vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 2
    weight 2
}
vrrp_instance VI_HA_1 {
    state BACKUP
    interface eth1
    virtual_router_id 10
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass XXXXXXXXX
    }

    virtual_ipaddress {

        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
        AAA.BBB.CCC.DDD/MASK dev INTERFAZ
    }

    track_script {
        chk_haproxy
    }
}

 

Hemos configurado las prioridades 100 y 99, los pesos 2(en el script de chequeo), mientras esté activo :
- ha10: 100+2=102 -- INACTIVO--> 100
- ha11: 99+2=101 -- INACTIVO--> 99

Con el kill -0 se comprueba que el servicio del ha esté activo, en el momento en el que este chequeo falle las ips se migrarán de forma automática.

 

ADVERTENCIA:
Tendremos que tener en cuenta varios aspectos para que todo esto funcione automágicamente hay que dejar el servicio configurado con las ips finales en el ha, para poder bindear en el backup unas ips que no tiene hay que hacer pirulas:

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.ip_nonlocal_bind=1

sysctl -p

Arrancamos keepalive y lo metemos en el arranque:

/etc/init.d/keepalived start
rc-update add keepalived default

NOTA: VRRP tiene un límite de 20 vips por instancia, si se requieren de mas hay que configurar una segunda instancia.

Hay redes en las que la tabla ARP del router no se refresca correctamente, para forzarlo:
arping -s VIP -I eth0 GW_IP

Se puede automatizar esto con:

vrrp_instance VI_HA_1 {
    state BACKUP
    interface eth0
    virtual_router_id 10
    priority 100
    notify_master /root/keepMASTER.sh
vi /root/keepMASTER.sh

#! /bin/bash
VIP="A.B.C.D"
IF="eth1"
IPROUTER="E.F.G.H"
DATE=$(date)
echo -e "NEW ROLE: MASTER -- ReARPing Router ARP table: $DATE" >> /tmp/keepalived.log
arping -s $VIP -I $IF -c 5 $IPROUTER

Este artículo es muy interesante y espero que le saquéis el máximo provecho ;)


Autor: Kr0m -- 11/01/2014 22:01:53