documentation/services/networking/keepalived.md

3.6 KiB

Keepalived

Keepalived est une implémentation du protocole VRRP. Il permet de partager des ips entre plusieurs machines. Si celle qui qui porte l'adresse à un moment tombe, c'est une des autres qui prend le relai.

Principe

Le protocole VRRP permet de s'assurer qu'un ensemble d'adresses ip soit toujours tenues par un pair sur le reseaux. Par exemple, au crans, pour rajouter de la résilience sur la panne d'un routeur, les ips du routeurs sont partagées entre plusieurs machines. Celle qui porte les ressources en fonctionnement normal est appelée le MASTER et les autres sont appelées les BACKUP et on leur assigne des priorités décroissantes. Sur le lien local que partage les différentes machines, elles négocient qui devrait porter les ressources actuellement. En ipv4, la négociation se fait en multicast en utilisant l'ip 224.0.0.18 et en ipv6 cela ce fait via le groupe ff02::12 (il faut bien faire attention à ce que le parefeu ou qu'un commutateur ne le filtre pas). Si le porteur de l'ip actuel arrète de transmettre des alertes VRRP alors le candidat avec la plus haute priorité s'affectera les ressources.

Installation

On se contente de tirer le logiciel des repositorys debian sudo apt install keepalived. Il y est packagé (correctement) depuis Jessie.

Configuration

Il est fortement recommandé de sortir le man 5 keepalived.conf qui détaille assez bien les différents cas d'utilisation du logiciel.

Le logiciel nous permet de définir quelques options générale dans la section global_defs. En particulier on peut y préciser le nom de la machine et la configuration de l'envoi de mail :

global_defs {
  notification_email { root@crans.org }
  notification_email_from keepalived@crans.org
  smtp_server smtp.adm.crans.org
  router_id routeur-sam
}

On peut ensuite rentré dans la configuration des instances. Une instance correspond à un bloc de ressource que l'on souhaite partagé entre deux machines. Comme les protocoles sous-jacent sont distincts en ipv4 et en ipv6, la configuration pour des ressources ipv4 et ipv6 se fait dans des blocs différents. Dans une instance, on doit préciser la priorité de la machine dans l'instance, l'interface surlaquelle se font les alertes vrrp, l'identifiant de l'instance et un bloc définissant les ressources qui sont partagées. Il est aussi possible de définir un script qui sera appelé au changement d'état. On donne ici l'exemple d'une instance en ipv4.

vrrp_instance VI_ALL {
  # Définit l'état de priorité de la machine dans l'instance
  state MASTER
  priority 150
  # Active l'envoie des mails lors des changement d'état
  smtp_alert

  # Lien sur lequel se font les alertes VRRPS
  interface ens18
  # Identifiant de l'instance sur le lien
  virtual_router_id 60
  # Fréquence des envois d'alertes VRRPs
  advert_int 2

  # Script appelé lors des changement d'état
  notify /var/local/services/keepalived/keepalived.py

  # Bloc définissant les ressources partagées
  virtual_ipaddress {
      185.230.79.62/26 brd 185.230.79.63 dev ens22 scope global
  }
}

Script de changement d'état

Comme préciser dans la section précédente, il est possible d'appeler un script lors des changements d'état de l'instance. Keepalived appelera alors le script avec les paramètres suivant : script [TYPE] [NAME] [STATE] [PRIORITY][TYPE] vaut INSTANCE dans notre cas, [NAME] donne le nom de l'instance concernée, [STATE] donne l'état vers lequel on transitionne et [PRIORITY] la priorité dans l'instance.

En utilisant un script, il est possible (comme on le fait actuellement au crans) de laisser à keepalived le soin de démarrer certains services.