Présentation de Keepalived
Keepalived est un logiciel de routage écrit en C. Il offre des fonctionnalités simples et robustes d'équilibrage de charge et de haute disponibilité aux systèmes Linux.
Dans cet article, je vais vous présenter comment faire du Failover avec Nginx et Keepalived. L'idée est simple, dans notre cas, nous allons monter deux serveurs nginx et le but, c'est que lorsque le serveur Nginx MASTER est down, Keepalived bascule automatiquement sur le SLAVE grâce à une IP virtuel (VIP).
Sur nos deux serveurs
- Installons le package
keepalived
sudo dnf install keepalived- Nous allons mettre en place nginx status et appliquer la configuration
vi /etc/nginx/conf.d/00-nginx-status.confserver {
listen 80;
location = /nginx-status {
stub_status on;
allow 127.0.0.1;
allow ::1;
deny all;
}
}systemctl reload nginx- Nous allons créer un script
check_nginx.shqui va nous servir à vérifier si nginx répond
vi /etc/keepalived/check_nginx.sh#!/bin/bash
# Check if nginx process is running
if [ -z "$(pidof nginx)" ]; then
exit 1
fi
# Check if nginx is responding
if [ -z "$(curl -s http://localhost/nginx-status)" ]; then
exit 1
fi
exit 0- Mettons-les droits d'exécution sur le script
chmod +x /etc/keepalived/check_nginx.shSur notre serveur maitre
- Dans le dossier de configuration keepalived, nous allons faire une sauvegarde du fichier de configuration
cd /etc/keepalived/
mv keepalived.conf keepalived.conf.origin- Maintenant, nous allons éditer cette configuration
vi /etc/keepalived/keepalived.confvrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2 # Check every 2 seconds
weight 2 # Add 2 points if check is successful
fall 2 # Require 2 failures to mark as failed
rise 1 # Require 1 success to mark as recovered
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # Update with your network interface
virtual_router_id 51 # Must be the same on all nodes
priority 101 # Higher value means higher priority
advert_int 1
authentication {
auth_type PASS
auth_pass YourSecurePassword # Generate a secure password with `openssl rand -hex 32`
}
virtual_ipaddress {
192.168.15.112/24 # Your virtual IP address
}
track_script {
check_nginx
}
}- Remplacer
YourSecurePasswordpar une pass phrase longue que vous pouvez générer via la commande openssl
openssl rand -hex 32Sur notre serveur slave
- Dans le fichier
keepalived.confque nous venons de créer, nous allons replacer les valeursstateetprioriry
state BACKUP
priority 100 # Lower than the MASTER prioritySur nos deux serveurs
- Et, enfin, nous allons activer et lancer le service
keepalived
systemctl enable --now keepalived.serviceTest
- Sur le serveur maitre via la commande
ipvous deviez voir apparaître maintenant la VIP
[root@front-1 ~]# ip a show eth0
2: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.15.113/24 brd 192.168.15.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.15.112/24 scope global secondary eth0
valid_lft forever preferred_lft forever- Et si vous arrêtez le serveur maitre, la VIP devrait basculer sur le serveur slave