GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment configurer un cluster haute disponibilité sur CentOS 8 / RHEL 8

Le cluster haute disponibilité, également appelé cluster de basculement ou cluster actif-passif, est l'un des types de cluster les plus largement utilisés dans un environnement de production pour avoir une disponibilité continue des services même si l'un des nœuds du cluster tombe en panne.

En technique, si le serveur exécutant l'application a échoué pour une raison quelconque (ex :panne matérielle), le logiciel du cluster (pacemaker) redémarrera l'application sur le nœud de travail.

Le basculement ne consiste pas seulement à redémarrer une application ; il s'agit d'une série d'opérations qui lui sont associées, comme le montage de systèmes de fichiers, la configuration de réseaux et le démarrage d'applications dépendantes.

Environnement

Ici, nous allons configurer un cluster de basculement avec Pacemaker pour faire du serveur Apache (web) une application hautement disponible.

Ici, nous allons configurer le serveur Web Apache, le système de fichiers et les réseaux en tant que ressources pour notre cluster.

Pour une ressource de système de fichiers, nous utiliserions un stockage partagé provenant du stockage iSCSI.

Nom d'hôte Adresse IP OS Objectif
node1.itzgeek.local 192.168.0.11 CentOS 8 Nœud de cluster 1
node2.itzgeek.local 192.168.0.12 Nœud de cluster 2
storage.itzgeek.local 192.168.0.20 Stockage partagé iSCSI
192.168.0.100 IP de cluster virtuel (Apache)

Tous s'exécutent sur VMware Workstation.

Stockage partagé

Le stockage partagé est l'une des ressources critiques du cluster haute disponibilité car il stocke les données d'une application en cours d'exécution. Tous les nœuds d'un cluster auront accès au stockage partagé pour les dernières données.

Le stockage SAN est le stockage partagé largement utilisé dans un environnement de production. En raison de contraintes de ressources, pour cette démo, nous allons configurer un cluster avec stockage iSCSI à des fins de démonstration.

Installer des packages

Serveur iSCSI

[root@storage ~]# dnf install -y targetcli lvm2
 

Nœuds de cluster

dnf install -y iscsi-initiator-utils lvm2
 

Configurer le disque partagé

Listons les disques disponibles sur le serveur iSCSI à l'aide de la commande ci-dessous.

[root@storage ~]# fdisk -l | grep -i sd
 
 Sortie:disque / dev / sda:100 gib, 107374182400 octets, 209715200 Secteurs / Dev / SDA1 * 2048 2099199 2097152 1G 83 Linux / Dev / SDA2 2099200 209715199 207616000 octets, 20971520 secteurs

À partir de la sortie ci-dessus, vous pouvez voir que mon système a un disque dur de 10 Go (/dev/sdb).

Ici, nous allons créer un LVM sur le serveur iSCSI à utiliser comme stockage partagé pour nos nœuds de cluster.

[root@storage ~]# pvcreate /dev/sdb

[root@storage ~]# vgcreate vg_iscsi /dev/sdb

[root@storage ~]# lvcreate -l 100%FREE -n lv_iscsi vg_iscsi
 

Créer un stockage partagé

Obtenez les détails de l'initiateur des nœuds.

cat /etc/iscsi/initiatorname.iscsi
 

Nœud 1 :

NomInitiateur=iqn.1994-05.com.redhat:121c93cbad3a

Nœud 2 :

NomInitiateur=iqn.1994-05.com.redhat:827e5e8fecb

Entrez la commande ci-dessous pour obtenir une CLI iSCSI pour une invite interactive.

[root@storage ~]# targetcli
 
Sortie :Avertissement :Impossible de charger le fichier de préférences /root/.targetcli/prefs.bin.targetcli shell version 2.1.fb49Copyright 2011-2013 par Datera, Inc et autres. Pour obtenir de l'aide sur les commandes, tapez "help"./> cd /backstores/block/backstores/block> créer iscsi_shared_storage /dev/vg_iscsi/lv_iscsiCreated block storage object iscsi_shared_storage using /dev/vg_iscsi/lv_iscsi./backstores/block> cd /iscsi/iscsi> createCreated target iqn.2003-01.org .linux-iscsi.storage.x8664:sn.eac9425e5e18.Created TPG 1.Global pref auto_add_default_portal=trueCreated default portal listening on all IPs (0.0.0.0), port 3260./iscsi> cd iqn.2003-01.org.linux -iscsi.storage.x8664:sn.eac9425e5e18/tpg1/acls < créer iqn.1994-05.com.redhat :121c93cbad3a < créer iqn.1994-05.com.redhat:827e5e8fecb < cd /iscsi/iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18/tpg1/luns/iscsi/iqn.20. ..e18/tpg1/luns> create /backstores/block/iscsi_shared_storageCreated LUN 0.Created LUN 0->0 mapping in node ACL iqn.1994-05.com.redhat:827e5e8fecbCreated LUN 0->0 mapping in node ACL iqn. 1994-05.com.redhat:121c93cbad3a/iscsi/iqn.20...e18/tpg1/luns> cd // lso- / ................... .................................................. .................................................. .. [...] o- backstores ............................................. .................................................. .................... [...] | o-bloc ....................................................... .................................................. .[Objets de stockage :1] | | o- iscsi_shared_storage .............................................. [ /dev/vg_iscsi/lv_iscsi (10.0GiB) écriture immédiate activée] | | o-alua ............................................... .................................................. .. [Groupes ALU :1] | | o- default_tg_pt_gp .............................................. ........................ [État ALU :Actif/optimisé] | o-fileio ............................................... .................................................. [Objets de stockage :0] | o-pscsi ............................................... .................................................. .[Objets de stockage :0] | o- disque virtuel .................................................. .................................................. [ Objets de stockage :0] o- iscsi ......................................... .................................................. ................ [Cibles :1] | o-iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18 ............................. ................................ [TPG :1] | o-tpg1 ............................................... ................................................ [non -gen-acls, pas d'authentification] | o-acls ....................................................... .................................................. ......... [ACL :2] | | o- iqn.1994-05.com.redhat:121c93cbad3a ..................................... ............................. [LUN mappés :1] | | | o-mapped_lun0 ............................................... ................... [bloc lun0/iscsi_shared_storage (rw)] | | o- iqn.1994-05.com.redhat:827e5e8fecb ..................................... .............................. [LUN mappés :1] | | o-mapped_lun0 ............................................... ................... [bloc lun0/iscsi_shared_storage (rw)] | o-luns ............................................... .................................................. ......... [LUN :1] | | o- lun0 ......................................... [block/iscsi_shared_storage (/ dev/vg_iscsi/lv_iscsi) (default_tg_pt_gp)] | o-portails ....................................................... .................................................. ... [Portails :1] | o-0.0.0.0:3260 ...................................................... .................................................. ........ [OK] o- bouclage ....................................... .................................................. ................... [Cibles :0]/> saveconfigConfiguration enregistrée dans /etc/target/saveconfig.json/> exitGlobal pref auto_save_on_exit=trueDernières 10 configs enregistrées dans /etc /target/backup/.Configuration enregistrée dans /etc/target/saveconfig.json

Activez et redémarrez le service cible.

[root@storage ~]# systemctl enable target

[root@storage ~]# systemctl restart target
 

Configurez le pare-feu pour autoriser le trafic iSCSI.

[root@storage ~]# firewall-cmd --permanent --add-port=3260/tcp

[root@storage ~]# firewall-cmd --reload
 

Découvrir le stockage partagé

Sur les deux nœuds du cluster, découvrez la cible à l'aide de la commande ci-dessous.

iscsiadm -m découverte -t ​​st -p 192.168.0.20
Sortie :192.168.0.20:3260,1 qn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18

Maintenant, connectez-vous au stockage cible avec la commande ci-dessous.

iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18 -p 192.168.0.20 -l
Sortie : Connexion à [iface :par défaut, cible :iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18, portail :192.168.0.20,3260]Connexion à [iface :par défaut, cible :iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18, portail :192.168.0.20,3260] réussi.

Redémarrez et activez le service initiateur.

systemctl restart iscsid

systemctl enable iscsid
 

Configurer les nœuds du cluster

Stockage partagé

Accédez à tous vos nœuds de cluster et vérifiez si le nouveau disque du serveur iSCSI est visible ou non.

Dans mes nœuds, /dev/sdb est le disque partagé du stockage iSCSI.

fdisk -l | grep -i sd
 
 Sortie:disque / dev / sda:100 gib, 107374182400 octets, 209715200 Secteurs / Dev / SDA1 * 2048 2099199 2097152 1G 83 LINUX / DEV / SDA2 2099200 209715199 207616000 octets, 20963328 secteurs

Sur l'un de vos nœuds (Ex, node1), créez un système de fichiers pour que le serveur Web Apache contienne les fichiers du site Web. Nous allons créer un système de fichiers avec LVM.

[root@node1 ~]# pvcreate /dev/sdb

[root@node1 ~]# vgcreate vg_apache /dev/sdb

[root@node1 ~]# lvcreate -n lv_apache -l 100%FREE vg_apache

[root@node1 ~]# mkfs.ext4 /dev/vg_apache/lv_apache
 

Maintenant, allez sur un autre nœud et exécutez les commandes ci-dessous pour détecter le nouveau système de fichiers.

[root@node2 ~]# pvscan

[root@node2 ~]# vgscan

[root@node2 ~]# lvscan
 

Enfin, vérifiez le LVM que nous avons créé sur node1 est disponible sur un autre nœud (Ex. node2) en utilisant les commandes ci-dessous.

ls -al /dev/vg_apache/lv_apache
 

et

[root@node2 ~]# lvdisplay /dev/vg_apache/lv_apache
 
Sortie :_Vous devriez voir /dev/vg_apache/lv_apache sur node2.itzgeek.local_ --- Volume logique --- Chemin LV /dev/vg_apache/lv_apache Nom LV lv_apache Nom VG vg_apache UUID LV gXeaoB-VlN1-zWSW- 2VnZ-RpmW-iDeC-kQOxZE LV Write Access read/write LV Creation host, time node1.itzgeek.local, 2020-03-30 08:08:17 -0400 LV Status NOT available LV Size 9.96 GiB Current LE 2551 Segments 1 Allocation hériter des secteurs de lecture anticipée auto
Si le système n'affiche pas le volume logique ou le fichier de périphérique introuvable, envisagez de redémarrer le deuxième nœud.

Entrée de l'hôte

Créez une entrée d'hôte pour chaque nœud sur tous les nœuds. Le cluster utilisera le nom d'hôte pour communiquer entre eux.

vi /etc/hosts
 

Les entrées d'hôte seront quelque chose comme ci-dessous.

192.168.0.11 node1.itzgeek.local  node1
192.168.0.12 node2.itzgeek.local  node2
 

Installer des packages

Les packages de cluster sont disponibles dans le référentiel haute disponibilité. Configurez donc le référentiel haute disponibilité sur votre système.

CentOS 8

dnf config-manager --set-enabled HighAvailability
 

RHEL 8

Activez l'abonnement Red Hat sur RHEL 8, puis activez un référentiel haute disponibilité pour télécharger les packages de cluster depuis Red Hat.

subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
 

Installez les packages de cluster (pacemaker) avec tous les agents fence disponibles sur tous les nœuds à l'aide de la commande ci-dessous.

dnf install -y pcs fence-agents-all pcp-zeroconf
 

Ajoutez une règle de pare-feu pour permettre à toutes les applications à haute disponibilité d'avoir une bonne communication entre les nœuds. Vous pouvez ignorer cette étape si le système n'a pas activé le pare-feu.

firewall-cmd --permanent --add-service=high-availability

firewall-cmd --add-service=high-availability

firewall-cmd --reload
 

Définissez un mot de passe pour l'utilisateur hacluster.

Ce compte d'utilisateur est un compte d'administration de cluster. Nous vous suggérons de définir le même mot de passe pour tous les nœuds.

passwd hacluster
 

Démarrez le service de cluster et activez-le pour qu'il démarre automatiquement au démarrage du système.

systemctl start pcsd

systemctl enable pcsd
 

N'oubliez pas :vous devez exécuter les commandes ci-dessus sur tous les nœuds de votre cluster.

Créer un cluster haute disponibilité

Autorisez les nœuds à l'aide de la commande ci-dessous. Exécutez la commande ci-dessous dans l'un des nœuds pour autoriser les nœuds.

[root@node1 ~]# pcs host auth node1.itzgeek.local node2.itzgeek.local
 
Sortie : Nom d'utilisateur :haclusterPassword :< 

Créez un cluster. Modifiez le nom du cluster itzgeek_cluster selon vos besoins.

[root@node1 ~]# configuration du cluster pcs itzgeek_cluster --start node1.itzgeek.local node2.itzgeek.local
Sortie :Aucune adresse spécifiée pour l'hôte 'node1.itzgeek.local', en utilisant 'node1.itzgeek.local'Aucune adresse spécifiée pour l'hôte 'node2.itzgeek.local', en utilisant 'node2.itzgeek.local'Détruire le cluster sur hôtes :'node1.itzgeek.local', 'node2.itzgeek.local'...node1.itzgeek.local :cluster détruit avec succèsnode2.itzgeek.local :cluster détruit avec succèsRequesting remove 'pcsd settings' from 'node1.itzgeek.local' , 'node2.itzgeek.local'node1.itzgeek.local :suppression réussie du fichier 'pcsd settings'node2.itzgeek.local :suppression réussie du fichier 'pcsd settings'Envoi de 'corosync authkey', 'pacemaker authkey' à ' node1.itzgeek.local', 'node2.itzgeek.local'node1.itzgeek.local :distribution réussie du fichier 'corosync authkey'node1.itzgeek.local :distribution réussie du fichier 'pacemaker authkey'node2.itzgeek.local :distribution réussie du fichier 'corosync authkey'node2.itzgeek.local :distribution réussie du fichier 'pacemaker authkey'Envoi de 'corosync.conf' à 'node 1.itzgeek.local', 'node2.itzgeek.local'node1.itzgeek.local :distribution réussie du fichier 'corosync.conf'node2.itzgeek.local :distribution réussie du fichier 'corosync.conf'Cluster a été réussi configuration.Démarrage du cluster sur les hôtes :'node1.itzgeek.local', 'node2.itzgeek.local'...

Activez le cluster pour qu'il démarre au démarrage du système.

[root@node1 ~]# pcs cluster enable --all
 
Sortie :node1.itzgeek.local :cluster activénode2.itzgeek.local :cluster activé

Utilisez la commande ci-dessous pour obtenir l'état du cluster.

[root@node1 ~]# pcs cluster status
 
Sortie :État du cluster :Pile :corosync DC actuel :node1.itzgeek.local (version 2.0.2-3.el8_1.2-744a30d655) - partition avec quorum Dernière mise à jour :lun. 30 mars 08:28:08 2020 Dernière changement :Mon Mar 30 08:27:25 2020 par hacluster via crmd sur node1.itzgeek.local 2 nœuds configurés 0 ressources configuréesPCSD Statut :node1.itzgeek.local :En ligne node2.itzgeek.local :En ligne

Exécutez la commande ci-dessous pour obtenir des informations détaillées sur le cluster, notamment ses ressources, l'état du stimulateur cardiaque et les détails des nœuds.

[root@node1 ~]# pcs status
 
Sortie :Nom du cluster :itzgeek_clusterWARNINGS :Aucun appareil stonith et stonith-enabled n'est pas falseStack :corosyncCurrent DC :node1.itzgeek.local (version 2.0.2-3.el8_1.2-744a30d655) - partition avec quorumDernière mise à jour :lun 30 mars 08:33:37 2020Dernière modification :lundi 30 mars 08:27:25 2020 par hacluster via crmd sur node1.itzgeek.local2 nœuds configurés0 ressources configuréesEn ligne :[ node1.itzgeek.local node2.itzgeek.local ]Aucune ressourceStatut du démon :corosync :actif/activé stimulateur :actif/activé pcsd :actif/activé

Dispositifs de clôture

Le dispositif de clôture est un dispositif matériel qui aide à déconnecter le nœud problématique en réinitialisant le nœud/en déconnectant le stockage partagé de son accès. Ce cluster de démonstration s'exécute au-dessus de VMware et n'a aucun périphérique de clôture externe à configurer. Cependant, vous pouvez suivre ce guide pour configurer un dispositif d'escrime.

Puisque nous n'utilisons pas de clôture, désactivez-la (STONITH). Vous devez désactiver le fencing pour démarrer les ressources du cluster, mais la désactivation de STONITH dans l'environnement de production n'est pas recommandée.

[root@node1 ~]# pcs property set stonith-enabled=false
 

Ressources du cluster

Préparer les ressources

Serveur Web Apache

Installez le serveur Web Apache sur les deux nœuds.

dnf install -y httpd
 

Modifiez le fichier de configuration.

vi /etc/httpd/conf/httpd.conf
 

Ajoutez le contenu ci-dessous à la fin du fichier sur les deux nœuds du cluster.

<Location /server-status>
    SetHandler server-status
    Require local
</Location>
 

Modifiez la configuration logrotate du serveur Web Apache pour indiquer de ne pas utiliser systemd car la ressource de cluster n'utilise pas systemd pour recharger le service.

Modifiez la ligne ci-dessous.

DE :

/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
 

À :

/usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd.pid" -k graceful > /dev/null 2>/dev/null || true
 

Maintenant, nous allons utiliser le stockage partagé pour stocker le fichier de contenu Web (HTML). Effectuez l'opération ci-dessous dans l'un des nœuds.

[root@node1 ~]# mount /dev/vg_apache/lv_apache /var/www/

[root@node1 ~]# mkdir /var/www/html

[root@node1 ~]# mkdir /var/www/cgi-bin

[root@node1 ~]# mkdir /var/www/error

[root@node1 ~]# restorecon -R /var/www

[root@node1 ~]# cat <<-END >/var/www/html/index.html
<html>
<body>Hello, Welcome!. This Page Is Served By Red Hat Hight Availability Cluster</body>
</html>
END

[root@node1 ~]# umount /var/www
 

Autoriser le service Apache dans le pare-feu sur les deux nœuds.

firewall-cmd --permanent --add-service=http

firewall-cmd --reload
 

Créer des ressources

Créez une ressource de système de fichiers pour le serveur Apache. Utilisez le stockage provenant du serveur iSCSI.

[root@node1 ~]# ressource pcs crée httpd_fs Filesystem device="/dev/mapper/vg_apache-lv_apache" directory="/var/www" fstype="ext4" --group apache
Sortie :Nom d'agent supposé 'ocf:`heartbeat`:Filesystem' (déduit de 'Filesystem')

Créez une ressource d'adresse IP. Cette adresse IP agira comme une adresse IP virtuelle pour Apache, et les clients utiliseront cette adresse IP pour accéder au contenu Web au lieu de l'adresse IP d'un nœud individuel.

[root@node1 ~]# ressource pcs créer httpd_vip IPaddr2 ip=192.168.0.100 cidr_netmask=24 --group apache
Sortie :nom d'agent supposé 'ocf:`heartbeat`:IPaddr2' (déduit de 'IPaddr2')

Créez une ressource Apache pour surveiller l'état du serveur Apache qui déplacera la ressource vers un autre nœud en cas de panne.

[root@node1 ~]# ressource pcs créer httpd_ser apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apache 
Sortie :Nom supposé de l'agent 'ocf:`heartbeat`:apache' (déduit de 'apache')

Vérifiez l'état du cluster.

[root@node1 ~]# pcs status
 
Sortie :Nom du cluster :itzgeek_clusterStack :corosyncCurrent DC :node1.itzgeek.local (version 2.0.2-3.el8_1.2-744a30d655) - partition avec quorumDernière mise à jour :lundi 30 mars 09:02:07 2020Dernière modification :lundi 30 mars 09:01:46 2020 par root via cibadmin sur node1.itzgeek.local2 nœuds configurés3 ressources configuréesEn ligne :[ node1.itzgeek.local node2.itzgeek.local ]Liste complète des ressources :Resource Group :apache httpd_fs (ocf:💓Filesystem ):Node1.itzgeek.local httpd_vip (ocf:💓IPaddr2) :Node1.itzgeek.local httpd_ser (ocf:💓apache) :Node1.itzgeek.localDaemon démarré Statut :corosync :stimulateur cardiaque actif/activé :pcsd actif/activé :actif/activé

Vérifier le cluster haute disponibilité

Une fois le cluster opérationnel, faites pointer un navigateur Web vers l'adresse IP virtuelle Apache. Vous devriez obtenir une page Web comme ci-dessous.

Tester le cluster haute disponibilité

Vérifions le basculement des ressources en mettant le nœud actif (où toutes les ressources sont en cours d'exécution) en mode veille.

[root@node1 ~]# pcs node standby node1.itzgeek.local
 

Commandes de cluster importantes

Lister les ressources du cluster :

pcs resource status
 

Redémarrer la ressource du cluster :

pcs resource restart <resource_name>
 

Déplacez la ressource d'un nœud :

pcs resource move <resource_group> <destination_node_name>
 

Mettre le cluster en maintenance :

pcs property set maintenance-mode=true
 

Supprimer le cluster de la maintenance :

pcs property set maintenance-mode=false
 

Démarrez le nœud de cluster :

pcs cluster start <node_name>
 

Arrêter le nœud du cluster :

pcs cluster stop <node_name>
 

Démarrer le cluster :

pcs cluster start --all
 

Arrêter le cluster :

pcs cluster stop --all
 

Détruire le cluster :

pcs cluster destroy <cluster_name>
 

Interface utilisateur Web du cluster

L'interface utilisateur Web pcsd vous aide à créer, configurer et gérer les clusters Pacemaker.

L'interface Web sera accessible une fois que vous aurez démarré le service pcsd sur le nœud et elle sera disponible sur le port numéro 2224.

https://node_name:2224

Connectez-vous avec l'utilisateur administratif du cluster hacluster et son mot de passe.

Puisque nous avons déjà un cluster, cliquez sur Ajouter existant pour ajouter le cluster Pacemaker existant. Si vous souhaitez configurer un nouveau cluster, vous pouvez lire la documentation officielle.

Entrez l'un des nœuds de cluster pour détecter un cluster existant.

Dans une minute ou deux, vous verrez votre cluster existant dans l'interface utilisateur Web.

Sélectionnez le cluster pour en savoir plus sur les informations du cluster.

Cliquez sur le nom du cluster pour voir les détails du nœud.

Cliquez sur les ressources du cluster pour voir la liste des ressources et leurs détails.

Référence :Documentation Red Hat.

Conclusion

C'est tout. Dans cet article, vous avez appris à configurer un cluster haute disponibilité sur CentOS 8/RHEL 8.


Cent OS
  1. Comment configurer le serveur SysLog sur CentOS 7 / RHEL 7

  2. Comment configurer le serveur NFS sur CentOS 7 / RHEL 7

  3. Comment configurer Icinga Web 2 sur CentOS 7 / RHEL 7

  4. Comment configurer le cluster haute disponibilité Nginx à l'aide de Pacemaker sur CentOS 7

  5. Comment configurer mutt dans CentOS/RHEL

Comment configurer un Chef 12 sur CentOS 7 / RHEL 7

Comment configurer le serveur SysLog centralisé sur CentOS 8 / RHEL 8

Comment configurer un cluster Pacemaker pour Linux haute disponibilité

Comment configurer la réplication MySQL dans RHEL/Centos

Comment configurer Redis pour une haute disponibilité avec Sentinel dans CentOS 8 - Partie 2

Comment configurer un cluster Redis dans CentOS 8 - Partie 3