La haut disponibilité permet à un système d’être disponible à tout moment en cas de panne. cela est réalisable en mettant en cluster (càd en groupe) plusieurs serveurs, si l’un d’eux tombe en panne l’autre prend le relais.
Dans cet article nous allons voir comment bénéficier de la haute disponibilité en cas d’une défaillance sur un serveur actif sous CentOS 7, afin d’avoir de la continuité de service avec le logiciel open source pacemaker.
pacemaker :
Pacemaker est le gestionnaire du cluster qui assure la haute disponibilité des nœuds du cluster. Il permet de définir, démarrer ou arrêter les ressources (les services, les données) et gère un grand nombre d’applications que l’on peut trouver sur un serveur Linux (apache, nginx ..)
Cluster en mode Actif/Passif :
La configuration que nous allons mette en place dans cet article est la configuration en mode Actif/passif. Dans ce cas l’équipement passif est en mode veille tant que l’équipement actif ne rencontre aucun problème.
Ci-dessous l’environnement que nous allons mettre en place :
web1.local.lan : 192.168.162.2 web2.local.lan : 192.168.162.3
Installation du pacemaker :
Nous allons installer pacemaker sur les deux serveurs web1 et web2
[root@web1 ~]# yum install pcs Loaded plugins: fastestmirror Determining fastest mirrors base: mirror.marwan.ma extras: mirror.marwan.ma updates: mirror.marwan.ma base | 3.6 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 extras/7/x86_64/primary_db | 242 kB 00:00:00 Resolving Dependencies --> Running transaction check
[root@web2 ~]# yum install pcs Loaded plugins: fastestmirror Determining fastest mirrors base: mirror.marwan.ma extras: mirror.marwan.ma updates: mirror.marwan.ma base | 3.6 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 extras/7/x86_64/primary_db | 242 kB 00:00:00 Resolving Dependencies --> Running transaction check
Firewall :
Autoriser la haut disponibilité au niveau du firewall sur web1 et web2:
[root@web1 ~]# firewall-cmd --permanent --add-service=high-availability
success
[root@web2 ~]# firewall-cmd --permanent --add-service=high-availability
success
Mot de passe pour hacluster :
Lors de l’installtion de pacemaker un utilisateur nommé hacluster a été créé automatiquement:
[root@web1 ~]# cat /etc/passwd | grep hacluster hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin
[root@web2 ~]# cat /etc/passwd | grep hacluster hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin
Mettez un mot de passe pour cette utilisateur sur les deux serveurs :
[root@web1 ~]# passwd hacluster Changing password for user hacluster. New password:
[root@web2 ~]# passwd hacluster Changing password for user hacluster. New password:
Démarrez ensuite le service de pacemaker pcsd et mettez-le en enabled au niveau des deux serveurs:
[root@web1 ~]# systemctl start pcsd.service [root@mpcc01 ~]# systemctl enable pcsd.service Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service.
[root@web2 ~]# systemctl start pcsd.service [root@mpcc01 ~]# systemctl enable pcsd.service Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service.
taper ensuite la commande ci-dessous pour que chaque serveur s’authentifie à l’autre, cette commande ne doit être lancé que sur qu’un seul serveur (web1 dans mon cas) :
[root@web1 ~]# pcs cluster auth web1 web2 web1: Already authorized web2: Already authorized
Création du cluster :
Nous allons créer notre cluster nommé « Cluster » qui comporte nos deux serveur web1 et web2 avec la commande pcs :
les commandes ci-dessous à faire uniquement sur un seul serveur :
[root@web1 ~]# pcs cluster setup --name Cluster web1 web2 Destroying cluster on nodes: mpcc01, mpcc02… mpcc01: Stopping Cluster (pacemaker)… mpcc02: Stopping Cluster (pacemaker)… mpcc01: Successfully destroyed cluster mpcc02: Successfully destroyed cluster Sending 'pacemaker_remote authkey' to 'mpcc01', 'mpcc02' mpcc01: successful distribution of the file 'pacemaker_remote authkey' mpcc02: successful distribution of the file 'pacemaker_remote authkey' Sending cluster config files to the nodes… mpcc01: Succeeded mpcc02: Succeeded Synchronizing pcsd certificates on nodes mpcc01, mpcc02… mpcc02: Success mpcc01: Success Restarting pcsd on the nodes in order to reload the certificates… mpcc02: Success mpcc01: Success
Démarrer ensuite le cluster :
[root@mpcc01 ~]# pcs cluster start --all mpcc01: Starting Cluster (corosync)… mpcc01: Starting Cluster (pacemaker)…
Configurez le cluster pour démarrer au boot :
[root@mpcc01 ~]# pcs cluster enable --all mpcc01: Cluster Enabled mpcc02: Cluster Enabled
Vérifier ensuite le status du cluster :
[root@mpcc01 ~]# pcs cluster status Cluster Status: Stack: corosync Current DC: mpcc01 (version 1.1.23-1.el7_9.1-9acf116022) - partition WITHOUT quorum Last updated: Sun Jul 11 10:53:08 2021 Last change: Sun Jul 11 10:40:31 2021 by hacluster via crmd on mpcc01 2 nodes configured 0 resource instances configured PCSD Status: web1: Online web2: Online
Installation du serveur Web :
Nous allons mettre la haute disponibilité pour un serveur web, nous avons d’abord installer apache sur les deux serveurs :
[root@mpcc01 ~]# yum install httpd
[root@mpcc02 ~]# yum install httpd
Ajouter la config ci-dessous au fichier httpd.conf pour les deux serveurs :
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location>
Autoriser le service httpd au niveau du firewall :
[root@mpcc01 ~]# firewall-cmd --permanent --add-service=http
success
[root@mpcc01 ~]# firewall-cmd --reload
[root@mpcc02 ~]# firewall-cmd --permanent --add-service=http
success
[root@mpcc02 ~]# firewall-cmd --reload
Création des ressources :
Les commandes ci-dessous à faire uniquement sur une seul nœud:
La première ressource à ajouter est l’adresse VIP ( Virtual IP) , elle permet aux nœuds de communiquer avec une seule adresse .
[root@mpcc01 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.139.150 cidr_netmask=32 op monitor interval=10s
Ajouter snsuite la ressource httpd :
[root@mpcc01 ~]# pcs resource create web_server apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apache Assumed agent name 'ocf:heartbeat:apache' (deduced from 'apache')
Désactiver ensuite stonith et no-quorum-policy :
[root@mpcc01 ~]# pcs property set stonith-enabled=false [root@mpcc01 ~]# pcs property set no-quorum-policy=ignore
Il faut lier la ressource « web_server » à la VIP :
[root@mpcc01 ~]# pcs constraint colocation add web_server vip INFINITY
[root@mpcc01 ~]# pcs constraint colocation add apache VIP INFINITY
Vérifiez ensuite le status des ressources :
[root@mpcc01 ~]# pcs status resources vip (ocf::heartbeat:IPaddr2): Started mpcc01 Resource Group: apache web_server (ocf::heartbeat:apache): Started mpcc01
Comme vous pouvez le constater, les deux ressources sont démarré uniquement sur web1
vous pouvez aussi vérifier le status des ressources avec la commandes ci-dessous :
[root@mpcc01 ~]# pcs status Cluster name: Cluster Stack: corosync Current DC: mpcc01 (version 1.1.23-1.el7_9.1-9acf116022) - partition WITHOUT quorum Last updated: Sun Jul 11 12:51:45 2021 Last change: Sun Jul 11 12:39:32 2021 by root via cibadmin on mpcc01 2 nodes configured 2 resource instances configured Online: [ mpcc01 ] OFFLINE: [ mpcc02 ] Full list of resources: vip (ocf::heartbeat:IPaddr2): Started mpcc01 Resource Group: apache web_server (ocf::heartbeat:apache): Started mpcc01 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
Test du failover (basculement) :
Après avoir configurer le cluster, nous allons tester le basculement entre les deux noeuds, pour cela nous allons créer un fichier index sur les deux noeud avec un contenu diffèrent :
[root@web1 ~]# cat /var/www/html/index.html noeud1
[root@web2 ~]# cat /var/www/html/index.html noeud2
Avec un navigateur accéder à la page http://Adress_VIP :
Comme vous pouvez le constater, c’est le serveur web1 qui a répondu à la requête vu que c’est le serveur actif.
Maintenant arrêter le serveur web1 et réessayer d’accéder à la page http://Adress_VIP :
Avec la même IP, c’est le contenu de web2 qui s’est affichée vu que le web1 n’est plus joignable.
Installation d’un certificat SSL sur un serveur Nginx
Sudo : Comment paramétrer sudoers
tar: Les 14 commandes les plus utilisé
mkfs : Création des systèmes de fichier
Fail2Ban : How to protect Linux services