Comme nous le savons, NGINX est un serveur Web hautement coté qui peut également être utilisé comme proxy inverse, équilibreur de charge et cache HTTP. Dans cet article, nous allons montrer comment configurer un serveur Web NGINX hautement disponible (HA) avec keepalived sous Linux. Keepalived fonctionne sur VRRP (Virtual Router Redundancy Protocol) qui permet à une IP statique d'être basculée entre deux systèmes Linux.
Voici les détails de mon laboratoire pour NGINX HA :
- Nœud 1 - 192.168.1.130 - nginx1.example.com - minimum CentOS 8 / RHEL 8
- Nœud 2 - 192.168.1.140 - nginx2.example.com - minimum CentOS 8 / RHEL 8
- IP virtuelle (VIP) – 192.168.1.150
- utilisateur sudo pkumar
- Pare-feu activé
- SELinux en cours d'exécution
Passons aux étapes d'installation et de configuration,
Étape 1) Installer le serveur Web NGINX à partir de la ligne de commande
Le package NGINX est disponible dans les référentiels CentOS 8 / RHEL 8 par défaut, exécutez donc la commande dnf ci-dessous sur les deux nœuds pour installer le serveur Web nginx
$ sudo dnf install -y nginx
Pour CentOS 7 / RHEL 7
Le package NGINX n'est pas disponible dans les référentiels CentOS 7 / RHEL 7 par défaut, donc pour l'installer, nous devons d'abord activer le référentiel epel. Exécutez la commande suivante sur les deux nœuds
$ sudo yum install epel-release -y$ sudo yum install -y nginx
Pour Ubuntu / Debian
Pour les distributions Linux basées sur Debian, le package de serveur Web nginx est disponible dans les référentiels de packages par défaut. Pour installer nginx, exécutez
$ sudo apt update$ sudo apt install -y nginx
Étape 2) Configurer le fichier index.html personnalisé pour les deux nœuds
Créons un fichier index.html personnalisé pour les deux nœuds afin que nous puissions facilement identifier quel serveur dessert le site Web tout en accédant via une adresse IP virtuelle.
Pour le nœud 1, exécutez la commande echo suivante,
[[email protected] ~]$ echo "Ceci est le serveur Web NGINX du nœud 1
" | sudo tee /usr/share/nginx/html/index.html
Pour le nœud 2, exécutez
[[email protected] ~]$ echo "Ceci est le serveur Web NGINX du nœud 2
" | sudo tee /usr/share/nginx/html/index.html
Étape 3) Autoriser le port NGINX dans le pare-feu et démarrer son service
Si le pare-feu est activé et exécuté sur les deux nœuds, autorisez le port 80 en exécutant les commandes suivantes,
Pour le système CentOS / RHEL
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd –reload
Pour le système Ubuntu/Debian
$ sudo ufw allow 'Nginx HTTP'
Démarrez et activez le service nginx en exécutant sous les commandes de commande sur les deux nœuds,
$ sudo systemctl start nginx$ sudo systemctl enable nginx
Testez le serveur Web NGINX des deux nœuds en exécutant la commande curl suivante depuis l'extérieur,
$ curl http://192.168.1.130Voici le serveur Web NGINX du nœud 1
$ curl http://192.168.1.140Voici le serveur Web NGINX du nœud 2
Parfait, la sortie de la commande ci-dessus confirme que nginx est en cours d'exécution et accessible de l'extérieur avec l'adresse IP du système.
Étape 4) Installer et configurer Keepalived
Pour les systèmes CentOS / RHEL, le package keepalived et ses dépendances sont disponibles dans les référentiels de packages par défaut. Son installation est donc simple, exécutez simplement la commande ci-dessous sur les deux nœuds.
$ sudo dnf install -y keepalived // CentOS 8/ RHEL 8$ sudo yum install -y keepalived // CentOS 7 / RHEL 7Pour le système Ubuntu/Debian,
$ apt install -y keepalivedUne fois le keepalived installé, configurez-le en éditant son fichier de configuration ‘/etc/keepalived/keepalived.conf’. Nous garderons le nœud 1 comme nœud maître et le nœud 2 comme nœud de secours.
Faire une sauvegarde du fichier de configuration,
[[email protected] ~]$ sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-orgRemplacez le contenu de keepalived.conf par ci-dessous :
[[email protected] ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf[[email protected] ~]$ sudo vi /etc/keepalived/keepalived.confCollez le contenu suivant
global_defs { # Keepalived process identifier router_id nginx}# Script pour vérifier si Nginx est en cours d'exécution ou nonvrrp_script check_nginx { script "/bin/check_nginx.sh" interval 2 weight 50}# Interface virtuelle - La priorité spécifie l'ordre dans lequel interface assignée à prendre en charge lors d'un basculementvrrp_instance VI_01 { state MASTER interface enp0s3 virtual_router_id 151 priority 110 # L'adresse IP virtuelle partagée entre les deux serveurs Web NGINX qui flottera virtual_ipaddress { 192.168.1.150/24 } track_script { check_nginx } authentication { auth_type auth AH secret }}
Créez maintenant un script avec le contenu suivant qui vérifiera si le service nginx est en cours d'exécution ou non. Keepalived vérifiera toujours la sortie du script check_nginx.sh, s'il constate que le service nginx est arrêté ou ne répond pas, il déplacera l'adresse IP virtuelle sur le nœud de sauvegarde.
[[email protected] ~]$ sudo vi /bin/check_nginx.sh#!/bin/shif [ -z "`pidof nginx`" ] ; puis quittez 1fienregistrez et fermez le fichier et définissez l'autorisation requise avec la commande chmod,
[[email protected] ~]$ sudo chmod 755 /bin/check_nginx.shCopiez maintenant les fichiers keepalived.conf et check_nginx.sh du nœud 1 au nœud 2 en utilisant la commande scp suivante.
[[email protected] ~]$ scp /etc/keepalived/keepalived.conf [email protected] :/etc/keepalived/[[email protected] ~]$ scp /bin/check_nginx.sh [email protected]0 :/bin/Une fois les fichiers copiés, connectez-vous au nœud 2 et apportez quelques modifications au fichier keepalived.conf. Changez l'état de MASTER à BACKUP et réduisez la priorité en la définissant sur 100. Après avoir apporté les modifications, keepalived.conf sur le nœud 2 ressemblera à ci-dessous,
Dans le cas où le pare-feu du système d'exploitation est en cours d'exécution, autorisez VRRP en exécutant les commandes suivantes,
Remarque – Exécutez ces commandes sur les deux nœuds
Pour les systèmes CentOS / RHEL
$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent$ sudo firewall-cmd --reloadPour les systèmes Ubuntu/Debian
Autorisez VRRP en exécutant ce qui suit, à partir du nœud maître (nœud 1), exécutez
$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'$ sudo ufw allow from 192.168.1.140 comment 'VRRP Router'Depuis le nœud de secours/esclave (nœud 2)
$ sudo ufw allow to 224.0.0.18 comment 'VRRP Broadcast'$ sudo ufw allow from 192.168.1.130 comment 'VRRP Router'Maintenant, démarrez enfin le service keepalived en exécutant sous les commandes systemctl des deux nœuds,
$ sudo systemctl start keepalived$ sudo systemctl enable keepalivedVérifiez le service keepalive en exécutant ci-dessous :
$ sudo systemctl status keepalived
Parfait, vérifiez maintenant le statut VIP (adresse IP virtuelle) sur le nœud maître, dans notre cas, VIP est 192.168.1.130
$ ip add show
La sortie ci-dessus confirme que VIP est configuré sur le nœud maître sur son interface enp0s3. Alors, faisons des tests keepalived et nginx à l'étape suivante.
Étape 5) Test Keepalived et NGINX
Pour effectuer le test, essayez d'accéder au serveur Web nginx avec une adresse IP virtuelle (192.168.1.150), actuellement il devrait nous montrer la page nginx du nœud 1.
Ouvrez le navigateur wen et tapez "http://192.168.1.150" et appuyez sur Entrée,
Maintenant, essayez d'arrêter le service NGINX sur le nœud 1 et voyez si l'adresse IP virtuelle est commutée du nœud 1 au nœud 2, puis essayez d'accéder à la page Web nginx avec VIP (192.168.1.150) et cette fois, il devrait nous montrer la page nginx du nœud 2 .
[[email protected] ~]$ sudo systemctl stop nginx[[email protected] ~]$ ip add show
Connectez-vous au nœud 2 et exécutez la commande ip pour vérifier l'adresse IP virtuelle,
[[email protected] ~]$ ip add show
Maintenant, essayons d'accéder à la page Web en utilisant une adresse IP virtuelle,
Génial, ci-dessus confirme que nous avons réussi à configurer le serveur Web NGINX hautement disponible avec keepalived. C'est tout de cet article, s'il vous plaît partagez vos commentaires, commentaires et suggestions.