91 lines
3.7 KiB
Markdown
91 lines
3.7 KiB
Markdown
# 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]` où
|
|
`[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.
|