Nginx est un serveur Web gratuit, open-source et l'un des plus populaires au monde. Il peut également être utilisé comme proxy inverse, équilibreur de charge et cache HTTP. La haute disponibilité permet à une application de rediriger le travail vers un autre système en cas de panne. Il existe différentes technologies disponibles pour mettre en place un système hautement disponible.
Keepalived est un démon système qui surveille en permanence les services ou les systèmes et assure une haute disponibilité en cas de panne. Si un nœud est en panne, le deuxième nœud a servi les ressources.
Dans ce didacticiel, je vais vous montrer comment configurer un serveur Web Nginx hautement disponible avec KeepAlived sur CentOS 8.
Prérequis
- Deux serveurs exécutant CentOS 8, un pour le nœud maître et un pour le nœud de sauvegarde.
- Un mot de passe root est configuré sur votre serveur.
Installer Nginx sur les deux nœuds
Tout d'abord, vous devrez installer le package Nginx dans les deux nœuds. Vous pouvez l'installer à l'aide de la commande suivante :
dnf install nginx -y
Une fois le Nginx installé sur les deux nœuds, démarrez le service Nginx et activez-le pour qu'il démarre au redémarrage du système :
systemctl start nginx
systemctl enable nginx
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Créer un fichier sur les deux nœuds
Ensuite, vous devrez créer un fichier index.html personnalisé sur les deux nœuds pour identifier chaque nœud.
Sur le premier nœud, créez un fichier index.html avec la commande suivante :
echo "<h1>This is My First NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
Sur le deuxième nœud, créez un fichier index.html avec la commande suivante :
echo "<h1>This is My Second NGINX Web Server Node</h1>" | tee /usr/share/nginx/html/index.html
Enregistrez et fermez le fichier lorsque vous avez terminé.
Installer et configurer Keepalived
Ensuite, vous devrez installer Keepalived sur les deux nœuds. Par défaut, le package Keepalived est disponible dans le référentiel par défaut de CentOS 8. Vous pouvez l'installer en exécutant la commande suivante :
dnf install keepalived -y
Une fois le package keepalived installé sur les deux nœuds, vous devrez modifier le fichier de configuration par défaut keepalived sur les deux nœuds.
Sur le premier nœud, éditez le fichier keepalived.conf :
nano /etc/keepalived/keepalived.conf
Supprimez le contenu par défaut et ajoutez le contenu suivant :
global_defs { # Keepalived process identifier router_id nginx } # Script to check whether Nginx is running or not vrrp_script check_nginx { script "/bin/check_nginx.sh" interval 2 weight 50 } # Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover vrrp_instance VI_01 { state MASTER interface eth0 virtual_router_id 151 priority 110 # The virtual ip address shared between the two NGINX Web Server which will float virtual_ipaddress { 192.168.1.10/24 } track_script { check_nginx } authentication { auth_type AH auth_pass secret } }
Enregistrez et fermez le fichier lorsque vous avez terminé.
Sur le deuxième nœud, éditez le fichier keepalived.conf :
nano /etc/keepalived/keepalived.conf
Supprimez le contenu par défaut et ajoutez le contenu suivant :
global_defs { # Keepalived process identifier router_id nginx } # Script to check whether Nginx is running or not vrrp_script check_nginx { script "/bin/check_nginx.sh" interval 2 weight 50 } # Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover vrrp_instance VI_01 { state BACKUP interface eth0 virtual_router_id 151 priority 100 # The virtual ip address shared between the two NGINX Web Server which will float virtual_ipaddress { 192.168.1.10/24 } track_script { check_nginx } authentication { auth_type AH auth_pass secret } }
Enregistrez et fermez le fichier, puis vous devrez créer un script pour vérifier si le service Nginx est en cours d'exécution ou non. Vous pouvez le créer à l'aide de la commande suivante :
Remarque :Remplacez simplement MASTER par BACKUP et 110 par 100 dans le fichier de configuration ci-dessus.
nano /bin/check_nginx.sh
Ajoutez les lignes suivantes :
#!/bin/sh if [ -z "`pidof nginx`" ]; then exit 1 fi
Enregistrez et fermez le fichier, puis définissez les autorisations appropriées avec la commande suivante :
chmod 755 /bin/check_nginx.sh
Enfin, démarrez le service keepalived et activez-le au redémarrage du système à l'aide de la commande suivante :
systemctl start keepalived
systemctl enable keepalived
Vous pouvez également vérifier l'état du service keepalived à l'aide de la commande suivante :
systemctl status keepalived
Vous devriez obtenir le résultat suivant :
? keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS) Main PID: 3142 (keepalived) Tasks: 2 (limit: 12524) Memory: 2.1M CGroup: /system.slice/keepalived.service ??3142 /usr/sbin/keepalived -D ??3143 /usr/sbin/keepalived -D Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Changing effective priority from 110 to 160 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Receive advertisement timeout Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entering MASTER STATE Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) setting VIPs. Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Sending/queueing gratuitous ARPs on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10 Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Vous pouvez également vérifier l'état de l'adresse IP virtuelle sur le nœud maître à l'aide de la commande suivante :
ip add show
Vous devriez voir l'adresse IP virtuelle 192.168.1.10 dans la sortie suivante :
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 192.168.1.10/24 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::200:2dff:fe3a:209b/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff inet6 fe80::200:aff:fe3a:209b/64 scope link valid_lft forever preferred_lft forever
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Configurer le pare-feu sur les deux nœuds
Ensuite, vous devrez autoriser le port 80 et autoriser VRRP sur les deux nœuds. Vous pouvez le faire en utilisant la commande suivante :
firewall-cmd --permanent --add-service=http
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
Ensuite, rechargez le pare-feu pour appliquer les modifications :
firewall-cmd –reload
Vérifier Keepalived
À ce stade, Nginx et Keepalived sont installés et configurés. Il est temps de tester si la haute disponibilité de Nginx fonctionne ou non.
Ouvrez votre navigateur Web et accédez à l'URL http://your-virtual-ip . Vous devriez voir la page suivante :
Maintenant, arrêtez le service Nginx sur le nœud maître et testez si l'adresse IP virtuelle est passée du nœud 1 au nœud 2.
Sur le nœud maître, arrêtez le service Nginx à l'aide de la commande suivante :
systemctl stop nginx
Ensuite, connectez-vous à Node2 et vérifiez l'adresse IP virtuelle à l'aide de la commande suivante :
ip add show
Vous devriez voir votre adresse IP virtuelle dans la sortie suivante :
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 192.168.1.10/24 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::200:2dff:fe3a:2637/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff inet6 fe80::200:aff:fe3a:2637/64 scope link valid_lft forever preferred_lft forever
Maintenant, accédez à votre serveur Web Nginx en utilisant l'URL http://your-virtual-ip . Vous devriez voir la page Node2 :
Conclusion
Toutes nos félicitations! vous avez configuré avec succès un serveur Nginx hautement disponible avec Keepalived. J'espère que vous avez maintenant suffisamment de connaissances pour configurer un serveur Nginx hautement disponible dans un environnement de production.