Nous allons voir la mise en place de KeepAlived sur Linux, pour notre exemple nous utiliserons 3 VM sous Debian 10.
La partie KeepAlived permet le failover IP de nos serveurs, ainsi si l’un vient à rencontrer un problème, alors l’autre peut récupérer la configuration IP du 1er.
Un keepalive (KA) est un message envoyé par un appareil à un autre pour vérifier que le lien entre les deux est actif, ou pour empêcher que le lien soit brisé.
Source : https://fr.wikipedia.org/wiki/Keepalive
Configuration réseau
Il faut commencer par la désactivation du bouclage réseau via la commande ci-dessous :
echo net.ipv4.ip nonlocal_bind=1 | tee -a /etc/sysctl.conf
Ensuite, nous vérifions la modification :
sysctl -p
Le résultat suivant doit en ressortir :
net.ipv4.ip nonlocal_bind = 1
Installation de KeepAlived
Installation des paquets
apt install keepalive gnupg
Après, il faudra créer l’utilisateur « keepalived » :
useradd -g users -M keepalived_script
Configuration de KeepAlived
A présent, on crée le fichier de configuration :
vi /etc/keepalived/keealived.conf
Ensuite, on remplit la configuration du 1er hôte de la façon suivante :
global_defs { enable_script_security notification_email { votre-adresse@mail.fr } vrrp_instance VI_SERVER_1 { state MASTER interface ens192 virtual_router_id 1 priority 103 virtual_ipaddress { 192.168.0.4/24 } } vrrp_instance VI_SERVER_2 { state MASTER interface ens192 virtual_router_id 2 priority 101 virtual_ipaddress { 192.168.0.5/24 } } vrrp_instance VI_SERVER_3 { state MASTER interface ens192 virtual_router_id 3 priority 102 virtual_ipaddress { 192.168.0.6/24 } }
Le 2ème sera rempli ainsi :
global_defs { enable_script_security notification_email { votre-adresse@mail.com } vrrp_instance VI_SERVER_1 { state MASTER interface ens192 virtual_router_id 1 priority 102 virtual_ipaddress { 192.168.0.4/24 } } vrrp_instance VI_SERVER_2 { state MASTER interface ens192 virtual_router_id 2 priority 103 virtual_ipaddress { 192.168.0.5/24 } } vrrp_instance VI_SERVER_3 { state MASTER interface ens192 virtual_router_id 3 priority 101 virtual_ipaddress { 192.168.0.6/24 } }
Enfin, le 3ème sera ainsi :
global_defs { enable_script_security notification_email { votre-adresse@mail.com } vrrp_instance VI_SERVER_1 { state MASTER interface ens192 virtual_router_id 1 priority 101 virtual_ipaddress { 192.168.0.4/24 } } vrrp_instance VI_SERVER_2 { state MASTER interface ens192 virtual_router_id 2 priority 102 virtual_ipaddress { 192.168.0.5/24 } } vrrp_instance VI_SERVER_3 { state MASTER interface ens192 virtual_router_id 3 priority 103 virtual_ipaddress { 192.168.0.6/24 } }
Priorisation
Le système de priorité est simple, l’adresse IP virtuelle est attribuée à l’hôte ayant la plus grande priorité, ainsi l’adresse 192.168.0.6 sera attribuée au serveur n°3 (priority 103).
Si celui-ci venait à tomber en panne, alors l’adresse IP 192.168.0.6 serait récupérée par le serveur n°1, car disposant de la seconde priorité la plus élevée (priority 102).
Exemple d’utilisation
Pour notre exemple on suit le schéma suivant :

Une fois le KeepAlived configuré comme précédemment indiqué, on arrive à ce résultat :

On voit que chaque serveur dispose de sa propre VIP, celle avec la priorité la plus élevée.
Panne
En cas de panne, prenons pour exemple la disparition de la VM 2 du LAN (ou sa perte d’adresse IP, ou n’importe quel autre problème réseau).
Nous nous retrouvons alors dans cette situation :

A ce moment, KeepAlived ne reçoit plus de message et bascule alors la VIP du serveur qui ne répond plus, il prend la priorité la plus élevé après celle de la VM 2, soit la VM 3 ayant comme priorité « 102 ».

Vérification des Services
Souvent, Keepalived est utilisé en lien avec des services, par exemple « HAProxy », dans ce cas vous pouvez indiquer de vérifier que le service est démarré en rajoutant cette option :
global_defs { enable_script_security notification_email { votre-adresse@mail.com } vrrp_script check_haproxy { script "/usr/bin/pgrep haproxy" interval 2 init_fail vrrp_instance VI_SERVER_1 { state MASTER interface ens192 virtual_router_id 1 priority 101 virtual_ipaddress { 192.168.0.4/24 } track_script { check_haproxy } } vrrp_instance VI_SERVER_2 { state MASTER interface ens192 virtual_router_id 1 priority 102 virtual_ipaddress { 192.168.0.5/24 } track_script { check_haproxy } }
Bien entendu vous pouvez adapter en fonction des services qui vous seront utiles.
Il vous suffira de modifier le script du début « check_haproxy », en modifiant à votre guise.
Reprise automatique d’IP ou non
Par défaut, après une panne, le serveur Master récupère son adresse IP.
Si vous souhaitez que votre serveur ne reprenne pas automatiquement son IP après un failover, il suffit d’ajouter l’option « nopreempt ».
vrrp_instance VI_SERVER_2 { state MASTER interface ens192 virtual_router_id 1 priority 102 nopreempt ... }
Ainsi le serveur ayant perdu son adresse IP ne la récupérera pas automatiquement, permettant par exemple une détection plus simple de la panne.
Vous êtes à présent capable d’effectuer une mise en place de KeepAlived sur Linux.
Si vous souhaitez allez plus loin, vous pouvez retrouver toute la documentation de KeepAlived à cette adresse : https://www.keepalived.org/manpage.html
Retrouvez également tous nos articles sur Linux à cette adresse : https://sqx-bki.fr/categorie/linux/