Notez que l'article est un peu sommaire et mérite certainement d'être complété.
La doc officielle est https://www.keepalived.org/manpage.html
Sinon, vous avez par exemple 2 serveurs HAProxy et vous voulez assurer une redondance en créant une VIP, cad une Adresse IP virtuelle, pour que, quand un des 2 serveurs tombe, cela soit l'autre qui reprenne la main. Pour cela vous pouvez utiliser keepalived.
Sur vos deux serveurs, avec une distribution de type Red Hat comme CentOs etc, installer keepalived avec
dnf install keepalived
Lien vers le fichier : cliquez ici
Dans cet exemple c'est enp0s3
Sur vos deux serveurs, sauvegarder la configuration d'origine puis la modifier avec
cd /etc/keepalived
cp keepalived.conf backup_keepalived.conf
nano keepalived.conf
Lien vers le fichier : cliquez ici
Sur le premier serveur, remplacer intégralement la configuration avec cet exemple tout simple.
A noter que dans ce lien vmware :
Il est demandé de préciser le nom du serveur dans un paramètre router_id
global_defs {
router_id haproxy2 # The hostname of this host.
}
Vous prendrez soin de remplacer d'adapter le nom de l'interface qui est ici réglé à enp0s3 avec le résultat de la commande ip a.
Adaptez également l'adresse ip qui sera utilisée pour la VIP.
Notez également que si vous avez plusieurs cluster keepalived sur le même subnet, il faudrait modifier le numéro de virtual_router_id pour éviter les conflits
global_defs {
router_id haproxy2 # The hostname of this host.
}
vrrp_script haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 51
priority 252
advert_int 1
virtual_ipaddress {
192.168.0.149/24
}
track_script {
haproxy
}
}
Lien vers le fichier : cliquez ici
Sur le second serveur, remplacer également intégralement la configuration avec la même configuration sauf pour state MASTER qui devient state BACKUP
Le nom du serveur doit être adapté au niveau de router_id. La doc VMware semble dire qu'il ne faut pas toucher à la priorité qui sera donc la même de chaque côté.
Editer le fichier /etc/sysctl.conf pour modifier ce paramètre pour permettre d'utiliser une VIP (You should configure the kernel to use a VIP to bind )
net.ipv4.ip_nonlocal_bind=1
Lien vers le fichier : cliquez ici
Editer le fichier /etc/sysctl.conf pour modifier ce paramètre pour permettre d'utiliser une VIP (You should configure the kernel to use a VIP to bind )
Le service s'active avec
systemctl enable keepalived
systemctl start keepalived
Lien vers le fichier : cliquez ici
Vous pouvez aussi avoir un état du service avec
systemctl status keepalived -l
Lien vers le fichier : cliquez ici
Sur le master, si tout va bien la carte réseau doit se voir affecter une seconde adresse, celle de la VIP
Dans notre exemple de configuration, on a mis ce bloc
vrrp_script haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
Lien vers le fichier : cliquez ici
Il sert non pas à tuer le process nommé haproxy mais à surveiller qu'il existe bien, faute de quoi la vip basculera sur le noeud slave.
Ci-dessous la commande indique que le process haproxy n'a pas été trouvé.
Vous comprendrez qu'il faut adapter le nom du process à votre besoin.
Au lieu d'appeler directement la commande script "killall -0 haproxy"
vous pouvez appeler un script en .sh
Exemple
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
}
Lien vers le fichier : cliquez ici
Le contenu du script /etc/keepalived/check_haproxy.sh peut être
#!/bin/bash
# Vérifiez si le processus HAProxy est en cours d'exécution
if pgrep -x "haproxy" > /dev/null
then
# HAProxy est en cours d'exécution, retournez 0 (OK)
exit 0
else
# HAProxy n'est pas en cours d'exécution, retournez 1 (KO)
exit 1
fi
Lien vers le fichier : cliquez ici
Il faut s'assurer que le script est exécutable
chmod +x /etc/keepalived/check_haproxy.sh
Lien vers le fichier : cliquez ici
Au niveau du compte qui exécute les scripts de keepalived, la doc dit
# Specify the default username/groupname to run scripts under. # If this option is not specified, the user defaults to keepalived_script # if that user exists, otherwise the uid/gid under which keepalived is running. # If groupname is not specified, it defaults to the user's group. script_user username [groupname]
J'en comprends que le compte par défaut utilisé pour exécuter les scripts, si on ne le précise pas, se nomme keepalived_script
Voici une commande pour créer un compte de service keepalived_script
useradd keepalived_script -c "Compte de keepalived pour exécuter un script" -m -s /usr/sbin/nologin
Lien vers le fichier : cliquez ici
Au cas où, si vous voulez le supprimer
userdel -r keepalived_script
groupdel keepalived_script
Lien vers le fichier : cliquez ici
Donnez éventuellement des droits sudo à ce compte
Pour cela
nano /etc/sudoers.d/admins
Lien vers le fichier : cliquez ici
Par exemple pour donner des droits au groupe keepalived_script sur systemctl
%keepalived_script ALL=(ALL) NOPASSWD: /usr/bin/systemctl
Lien vers le fichier : cliquez ici
Article(s) en relation(s)