TOP

KeepAlived: Alta Disponibilidad y balanceo de carga

Keepalived nos ofrece una solución de alta disponibilidad mediante el uso del protocolo VRRP . Este protocolo, ideado para la L3 de la capa OSI, simula la presencia de un router "virtual" contra el que van dirigidas las peticiones, enrutando las peticiones sobre uno de los routers físicos que prestan servicio de manera totalmente transparente para el usuario. En caso de caida del router físico, se negocia el paso del servicio a otro router físico sin que se aprecie perdida de servicio.Keepalived también nos proporciona balanceo de carga basado en LVS.


El gran fuerte de Keepalived es posiblemente su sencillez. La configuración se basa unicamente en un fichero de configuración (keepalived.conf) donde se incluyen todas las opciones necesarias para la puesta a punto, (nada de linea de comandos, nada de interfaces gráficas), y los scripts de arranque y parada típicos. Quizá se pueda echar en falta algún método de configuración más elaborado, por ejemplo, para producir un failover controlado, cambiar el estado Master-Slave de los nodos mediante línea de comandos, ya que la única manera de hacerlo es producirlo manualmente, parando el servicio en el nodo Master.

Vamos ahora con un pequeño ejemplo de la forma que presenta el fichero de configuración. Necesitamos un fichero de configuración en cada uno de los nodos del cluster.

vrrp_sync_group VG1 {
    group {
        VI_1
        VI_2
    }
}


En Vrrp_sync_group especificamos los recursos que se van a sincronizar en caso de failover. En nuestro caso tenemos dos instancias VI_1 y VI_2 que se corresponden con dos interfaces virtuales. En caso de fallo queremos que ambas interfaces se cambien de nodo, por ello las metemos en este grupo.

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.110.115/24
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth1
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.5/24
    }
}

El resto del fichero se compondrá de las instancias, entendiendo por instancia, los servicios que mantendremos en alta disponibilidad. La forma de estas es la que sigue.

  • state MASTER: Aqui definimos quien será el Master/Slave sobre este recurso. En uno de los nodos estará puesto en Master, en el otro/otros estará/an como Slave.
  • interface eth1: Sobre qué interfaz se levantará nuestra Ip virtual.
  • virtual_router_id 51: Identificador de "Cluster". Debe ser el mismo en ambos (o los que sean) nodos del cluster y distinto a cualquier otro Id de cluster que utilice keepalived.
  • authentication: Opciones de autenticación.
    • auth_type PASS: tipo de autenticación por Password.
    • auth_pass xxxx: password que comparten los nodos para identificarse. Debe ser el mismo en todos los nodos. va en texto claro, así que ojito con quien ve este fichero.
  • virtual_ipaddress: Ip virtual. Formato IP/mascara.

Con estos parametros en todos los nodos de nuestro cluster tendriamos configurado la alta disponibilidad de interfaces en nuestro cluster. La forma de configurar los servicios es ligeramente distinta a la forma de configurar las interfaces y no entraremos en ello aquí.

Para ver quien tiene configuradas las interfaces virtuales que hemos configurado en keepalived, no es suficiente con el comando "ifconfig" . Podemos ver las interfaces con uno de los siguientes comando.
    • ip address list
    • ip -4 addr show
Ambos comandos nos mostrarán las ips virtuales asociadas a nuestras interfaces físicas. Por último, si queremos provocar un failover manual, es suficiente con apagar el servicio keepalived en el nodo que tenga los recursos.

V.




0 comentarios:

Publicar un comentario