Howto Keepalived
- Documentation : https://keepalived.readthedocs.io/en/latest/introduction.html
- Rôle Ansible : https://gitea.evolix.org/evolix/ansible-roles/src/branch/stable/keepalived
Keepalived est un service d’équilibrage de charge et de haute disponibilité. Il implémente le protocole VRRP permettant à plusieurs équipements sur un même segment réseau de partager une même adresse IP en gérant des états master/backup.
Installation
# apt install keepalived
Configuration
La configuration se fait dans
/etc/keepalived/keepalived.conf
:
vrrp_script chk_sshd {
script "/usr/bin/pkill -0 sshd"
interval 5
weight -4
fall 2
rise 1
}
vrrp_instance vrrp {
interface ens3
virtual_router_id 67
state MASTER
priority 100
virtual_ipaddress {
192.0.2.5
}
authentication {
auth_type PASS
auth_pass XXXXXX
}
track_script {
chk_sshd
}
notify /etc/keepalived/notify.sh
}
Le bloc vrrp_script
indique des checks permettant de
vérifier que le serveur est opérationnel, on peut en avoir plusieurs
:
script
indique un script ou une commande à exécuter comme vérification. Ici,pkill -0 sshd
va vérifier que sshd tourne, sans envoyer aucun signal au processusinterval
est l’intervalle en seconde à laquelle faire le checkweight
est la valeur de priorité à modifier. Ici, si le check échoue, 4 points de priorité sont levésfall
est le nombre de fois que le check doit être en échec avant que le paramètreweight
soit appliquérise
est le nombre de fois que le check doit être en succès avant d’inverser le paramètreweight
Le bloc vrrp_instance
définit les paramètres VRRP :
interface
définit l’interface sur laquelle l’IP VRRP sera ajoutéevirtual_router_id
est l’identifiant VRID, qui doit être unique sur un même segment réseaustate
définit l’état dans lequel le process doit être au démarragepriority
est la priorité utilisé pour élir le master : le plus haut sera master ; c’est cette valeur qui est modifié par le paramètreweight
virtual_ipaddress
est l’IP VRRP à configurer sur l’interface spécifiée parinterface
authentication
permet d’avoir une authentification entre les nœuds VRRP ayant le même VRIDtrack_script
indique les scripts sur lesquels se baser pour vérifier que le serveur est opérationnel ou nonnotify
indique un chemin vert un script qui permettra d’indiquer l’état VRRP du nœud, utile par exemple pour un check NRPE
Firewall
Au niveau du pare-feu, il faut ajouter la règle suivante :
# iptables -A INPUT -s <adresse IP du pair> -d 224.0.0.18 -j ACCEPT
NRPE
Un script notify
peut être utilisé, par exemple dans
/etc/keepalived/notify.sh
:
#!/bin/bash
echo $1 $2 is in $3 state > /var/run/keepalive.state
Le fichier contiendra par exemple le texte : « INSTANCE vrrp is in MASTER state »
Ensuite, ce check
NRPE check_keepalived peut être utilisé. Il lira le contenu du
fichier /var/run/keepalive.state
et sera en succès ou en
échec selon l’état master
ou backup
attendu
(et configuré dans le check).
Différences avec vrrpd
Concernant le protocole VRRP, le paquet vrrpd et le paquet keepalived ont une différence majeure : pour attribuer l’IP flottante virtuelle, keepalived n’utilise pas d’interface supplémentaire contrairement à vrrpd, mais il attribue l’IP comme alias sur l’interface parente. Cela a plusieurs conséquences :
- L’IP virtuelle n’est pas visible avec
ifconfig
, mais est visible avecip a
- L’adresse MAC de l’IP virtuelle est celle de l’interface parente, sur la machine master, et change donc selon quelle est la machine master
- Les paramètres sysctl nécessaires au fonctionnement de vrrpd ne sont pas nécessaires à keepalived