Comment configurer un cluster à haute disponibilité sur CentOS 7 / RHEL 7 – Bien choisir son serveur d impression
Le cluster haute disponibilité aka Failover-cluster (cluster actif-passif) est l'un des types de cluster les plus utilisés dans l'environnement de production. Ce type de cluster vous offre la disponibilité continue des services même si l'un des nœuds de cluster tombe en panne. Si le serveur exécutant l'application a échoué pour une raison quelconque (défaillance matérielle), le logiciel de cluster (stimulateur cardiaque) redémarrera l'application sur un autre nœud.
La haute disponibilité est principalement utilisée pour les bases de données, les applications personnalisées et également pour le partage de fichiers. Le basculement ne consiste pas seulement à démarrer une application. Il a 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.
Sommaire
Environnement
CentOS 7 / RHEL 7 prend en charge le cluster de basculement à l'aide du stimulateur cardiaque. Ici, nous chercherons à configurer le serveur Apache (Web) en tant qu'application hautement disponible.
Comme je l'ai dit, le basculement est une série d'opérations, nous devons donc configurer le système de fichiers et les réseaux en tant que ressource. Pour un système de fichiers, nous utiliserions un stockage partagé à partir du stockage iSCSI.
Nom d'hôte | Adresse IP | OS | Objectif |
---|---|---|---|
node1.itzgeek.local | 192.168.1.11 | CentOS 7 | Noeud de cluster 1 |
node2.itzgeek.local | 192.168.1.12 | Noeud de cluster 1 | |
server.itzgeek.local | 192.168.1.20 | Stockage partagé iSCSI | |
192.168.1.100 | IP de cluster virtuel (Apache) |
Tous s'exécutent sur VMware Workstation.
Stockage partagé
Le stockage partagé est l'une des ressources importantes du cluster à haute disponibilité car il contient 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 données récentes. Le stockage SAN est le stockage partagé le plus utilisé dans l'environnement de production. Pour cette démonstration, nous allons configurer un cluster avec stockage iSCSI à des fins de démonstration.
Installer des packages
Serveur iSCSI
[[email protected] ~]# yum install targetcli -y
Noeuds de cluster
Il est temps de configurer les nœuds de cluster pour utiliser le stockage iSCSI, effectuez les étapes ci-dessous sur tous vos nœuds de cluster.
# yum install iscsi-initiator-utils -y
Disque d'installation
Ici, nous allons créer 10 Go de disque LVM sur le serveur iSCSI à utiliser comme stockage partagé pour nos nœuds de cluster. Répertorions les disques disponibles attachés au serveur cible à l'aide de la commande.
[[email protected] ~]# fdisk -l | grep -i sd
Production:
Disque / dev / sda: 107,4 Go, 107374182400 octets, 209715200 secteurs
/ dev / sda1 * 2048 1026047 512000 83 Linux
/ dev / sda2 1026048 209715199 104344576 8e Linux LVM
Disque / dev / sdb: 10,7 Go, 10737418240 octets, 20971520 secteurs
De la sortie ci-dessus, vous pouvez voir que mon système dispose de 10 Go de disque dur (/ dev / sdb). Créez un LVM avec / dev / sdb (remplacer / dev / sdb avec le nom de votre disque)
[[email protected] ~]# pvcreate / dev / sdb [[email protected] ~]# vgcreate vg_iscsi / dev / sdb [[email protected] ~]# lvcreate -l 100% GRATUIT -n lv_iscsi vg_iscsi
Créer un stockage partagé
Obtenez les détails de l'initiateur des nœuds.
chat /etc/iscsi/initiatorname.iscsi
Noeud 1:
InitiatorName = iqn.1994-05.com.redhat: b11df35b6f75
Noeud 2:
InitiatorName = iqn.1994-05.com.redhat: 119eaf9252a
Entrez la commande ci-dessous pour obtenir une CLI iSCSI pour une invite interactive.
[[email protected] ~]# targetcli
Production:
shell shell targetcli version 2.1.fb46 Copyright 2011-2013 par Datera, Inc et autres. Pour obtenir de l'aide sur les commandes, tapez «help». /> cd / backstores / bloc / backstores / block> créer iscsi_shared_storage / dev / vg_iscsi / lv_iscsi L'objet de stockage de bloc créé est iscsi_shared_storage à l'aide de / dev / vg_iscsi / lv_iscsi. / backstores / block> cd / iscsi / iscsi> créer Cible créée iqn.2003-01.org.linux-iscsi.server.x8664: sn.518a1f561ad5. TPG créé 1. Global pref auto_add_default_portal = true Création du portail par défaut à l'écoute sur toutes les IP (0.0.0.0), port 3260. / iscsi> cd iqn.2003-01.org.linux-iscsi.server.x8664: sn.518a1f561ad5 / tpg1 / acls /iscsi/iqn.20 ... ad5 / tpg1 / acls> créer iqn.1994-05.com.redhat: b11df35b6f75 << Initiateur du nœud 1 ACL du noeud créé pour iqn.1994-05.com.redhat: b11df35b6f75 /iscsi/iqn.20 ... ad5 / tpg1 / acls> créer iqn.1994-05.com.redhat: 119eaf9252a << Initiateur du nœud 1 ACL du noeud créé pour iqn.1994-05.com.redhat: 119eaf9252a /iscsi/iqn.20 ... ad5 / tpg1 / acls> cd /iscsi/iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5/tpg1/luns /iscsi/iqn.20 ... ad5 / tpg1 / luns> créer / backstores / block / iscsi_shared_storage Création du LUN 0. Création du mappage de LUN 0-> 0 dans le noeud ACL iqn.1994-05.com.redhat: 119eaf9252a Création du mappage LUN 0-> 0 dans le noeud ACL iqn.1994-05.com.redhat: b11df35b6f75 /iscsi/iqn.20 ... ad5 / tpg1 / luns> cd / /> ls o- / ............................................... .................................................. ..... [...] o- backstores ............................................... ............................................ [...] | o- block ............................................... ................................ [Storage Objects: 1] | | o- iscsi_shared_storage ........................... [/dev/vg_iscsi/lv_iscsi (10.0GiB) write-thru activated] | | o- alua ............................................... ................................. [ALUA Groups: 1] | | o- default_tg_pt_gp ............................................... ..... [ALUA state: Active/optimized] | o- fileio ............................................... ............................... [Storage Objects: 0] | o- pscsi ............................................... ................................ [Storage Objects: 0] | o- ramdisk ............................................... .............................. [Storage Objects: 0] o- iscsi ............................................... .......................................... [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.server.x8664: sn.518a1f561ad5 ............................. .......... [TPGs: 1] | o- tpg1 ............................................... ............................. [no-gen-acls, no-auth] | o- acls ............................................... ........................................ [ACLs: 2] | | o- iqn.1994-05.com.redhat: 119eaf9252a ..................................... ........... [Mapped LUNs: 1] | | | o- mapped_lun0 ............................................... [lun0 block/iscsi_shared_storage (rw)] | | o- iqn.1994-05.com.redhat: b11df35b6f75 ..................................... .......... [Mapped LUNs: 1] | | o- mapped_lun0 ............................................... [lun0 block/iscsi_shared_storage (rw)] | o- luns ............................................... ........................................ [LUNs: 1] | | o- lun0 ...................... [block/iscsi_shared_storage (/dev/vg_iscsi/lv_iscsi) (default_tg_pt_gp)] | o- portails ............................................... .................................. [Portals: 1] | o- 0.0.0.0:3260 ........................................... ....................................... [OK] o- bouclage ............................................... ....................................... [Targets: 0] /> saveconfig Configuration enregistrée dans /etc/target/saveconfig.json /> sortie Préférence globale auto_save_on_exit = true Les 10 dernières configurations enregistrées dans / etc / target / backup /. Configuration enregistrée dans /etc/target/saveconfig.json [[email protected] ~]#
Activez et redémarrez le service cible.
[[email protected] ~]# systemctl enable target [[email protected] ~]# cible de redémarrage systemctl
Configurez le pare-feu pour autoriser le trafic iSCSI.
[[email protected] ~]# firewall-cmd --permanent --add-port = 3260 / tcp [[email protected] ~]# firewall-cmd --reload
Découvrez le stockage partagé
Sur les deux nœuds de cluster, découvrez la cible à l'aide de la commande ci-dessous.
# iscsiadm -m discovery -t st -p 192.168.1.20
Production:
192.168.1.20:3260,1 iqn.2003-01.org.linux-iscsi.server.x8664: sn.518a1f561ad5
Maintenant, connectez-vous à la cible avec la commande ci-dessous.
# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.server.x8664: sn.518a1f561ad5 -p 192.168.1.20 -l
Production:
Se connecter à [iface: default, target: iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5, portal: 192.168.1.20,3260] (plusieurs) Se connecter à [iface: default, target: iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5, portal: 192.168.1.20,3260] réussi.
Redémarrez et activez le service initiateur.
# systemctl restart iscsid # systemctl enable iscsid
Configuration des nœuds de cluster
Entrée d'hôte
Effectuez une entrée d'hôte sur chaque nœud pour 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.1.11 node1.itzgeek.local node1 192.168.1.12 node2.itzgeek.local node2
Stockage partagé
Accédez à tous vos nœuds et vérifiez si le nouveau disque est visible ou non. Dans mes nœuds, / dev / sdb est le disque provenant de notre stockage iSCSI.
# fdisk -l | grep -i sd
Production:
Disque / dev / sda: 107,4 Go, 107374182400 octets, 209715200 secteurs
/ dev / sda1 * 2048 1026047 512000 83 Linux
/ dev / sda2 1026048 209715199 104344576 8e Linux LVM
Disque / dev / sdb: 10,7 Go, 10733223936 octets, 20963328 secteurs
Sur n'importe lequel de vos nœuds (Ex, nœud1), créez un système de fichiers pour le serveur Web Apache pour contenir les fichiers du site Web. Nous allons créer un système de fichiers avec LVM.
[[email protected] ~]# pvcreate / dev / sdb [[email protected] ~]# vgcreate vg_apache / dev / sdb [[email protected] ~]# lvcreate -n lv_apache -l 100% GRATUIT vg_apache [[email protected] ~]# 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.
[[email protected] ~]# pvscan [[email protected] ~]# vgscan [[email protected] ~]# lvscan
Enfin, vérifiez le LVM que nous avons créé sur node1 est disponible pour vous sur un autre nœud (Ex. nœud2) en utilisant la commande ci-dessous.
[[email protected] ~]# lvdisplay / dev / vg_apache / lv_apache
Production: Tu devrais voir / dev / vg_apache / lv_apache sur node2.itzgeek.local
--- Volume logique --- Chemin LV / dev / vg_apache / lv_apache Nom LV lv_apache VG Name vg_apache LV UUID mFUyuk-xTtK-r7PV-PLPq-yoVC-Ktto-TcaYpS Accès en écriture LV lecture / écriture Hôte de création LV, heure node1.itzgeek.local, 2019-07-05 08:57:33 +0530 Statut LV disponible # ouvert 0 Taille BT 9,96 Gio Entreprise actuelle Segments 1 Héritage d'allocation Lire à l'avance secteurs auto - actuellement fixé à 8192 Bloquer le périphérique 253: 3
Si le système n'affiche pas le volume logique, envisagez de redémarrer le deuxième nœud.
Installer des packages
Installez les packages de cluster (pacemaker) sur tous les nœuds à l'aide de la commande ci-dessous.
# yum install pcs fence-agents-all -y
Autorisez toutes les applications à haute disponibilité sur le pare-feu à avoir une communication appropriée entre les nœuds. Vous pouvez ignorer cette étape si le système n'a pas de pare-feu installé.
# firewall-cmd --permanent --add-service = haute disponibilité # firewall-cmd --add-service = haute disponibilité
Utilisez la commande ci-dessous pour répertorier les applications autorisées dans le pare-feu.
# firewall-cmd --list-service
Production:
ssh dhcpv6-client haute disponibilité
Définissez le mot de passe pour hacluster utilisateur. 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. De plus, activez-le pour qu'il démarre automatiquement au démarrage du système.
# systemctl start pcsd # systemctl enable pcsd
N'oubliez pas d'exécuter les commandes ci-dessus sur tous vos nœuds de 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.
[[email protected] ~]# pcs cluster auth node1.itzgeek.local node2.itzgeek.local
Production:
Nom d'utilisateur: hacluster Mot de passe: << Entrez le mot de passe node1.itzgeek.local: autorisé node2.itzgeek.local: autorisé
Créez un cluster.
[[email protected] ~]# configuration du cluster pcs --start --name itzgeek_cluster node1.itzgeek.local node2.itzgeek.local
Production:
Détruire le cluster sur les nœuds: node1.itzgeek.local, node2.itzgeek.local ... node1.itzgeek.local: Arrêt du cluster (stimulateur cardiaque) ... node2.itzgeek.local: Arrêt du cluster (stimulateur cardiaque) ... node2.itzgeek.local: cluster détruit avec succès node1.itzgeek.local: cluster détruit avec succès Envoi de 'pacemaker_remote authkey' à 'node1.itzgeek.local', 'node2.itzgeek.local' node1.itzgeek.local: distribution réussie du fichier 'pacemaker_remote authkey' node2.itzgeek.local: distribution réussie du fichier 'pacemaker_remote authkey' Envoi de fichiers de configuration de cluster aux nœuds ... node1.itzgeek.local: Réussi node2.itzgeek.local: Réussi Démarrage du cluster sur les nœuds: node1.itzgeek.local, node2.itzgeek.local ... node1.itzgeek.local: Démarrage du cluster (corosync) ... node2.itzgeek.local: Démarrage du cluster (corosync) ... node1.itzgeek.local: Démarrage du cluster (stimulateur cardiaque) ... node2.itzgeek.local: Démarrage du cluster (stimulateur cardiaque) ... Synchronisation des certificats pcsd sur les nœuds node1.itzgeek.local, node2.itzgeek.local ... node1.itzgeek.local: Succès node2.itzgeek.local: Succès Redémarrer pcsd sur les nœuds afin de recharger les certificats ... node1.itzgeek.local: Succès node2.itzgeek.local: Succès
Activez le cluster pour démarrer au démarrage du système.
[[email protected] ~]# pcs cluster enable --all
Production:
node1.itzgeek.local: Cluster Enabled node2.itzgeek.local: Cluster Enabled
Utilisez la commande ci-dessous pour obtenir l'état du cluster.
[[email protected] ~]# pcs statut du cluster
Production:
Statut du cluster: Pile: corosync DC actuel: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition avec quorum Dernière mise à jour: ven.5 juil.09: 14: 57 2019 Dernière modification: ven.5 juil.09: 13: 12 2019 par hacluster via crmd sur node2.itzgeek.local 2 nœuds configurés 0 ressources configurées Statut PCSD: 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, y compris ses ressources, l'état du stimulateur cardiaque et les détails des nœuds.
[[email protected] ~]# statut des pcs
Production:
Nom du cluster: itzgeek_cluster AVERTISSEMENTS: Aucun périphérique Stonith et compatible Stonith n'est pas faux Pile: corosync DC actuel: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition avec quorum Dernière mise à jour: ven.5 juil.09: 15: 37 2019 Dernière modification: ven.5 juil.09: 13: 12 2019 par hacluster via crmd sur node2.itzgeek.local 2 nœuds configurés 0 ressources configurées En ligne: [ node1.itzgeek.local node2.itzgeek.local ] Pas de ressources Statut du démon: corosync: actif / activé stimulateur cardiaque: actif / activé pcsd: actif / activé
Dispositifs d'escrime
Le périphérique d'escrime est un périphérique matériel / logiciel qui aide à déconnecter le nœud problématique en réinitialisant le nœud / en déconnectant le stockage partagé d'y accéder. Mon cluster de démonstration s'exécute au-dessus de la machine virtuelle VMware, donc je ne vous montre pas la configuration d'un périphérique d'escrime, mais vous pouvez suivre ce guide pour configurer un périphérique d'escrime.
Ressources du cluster
Préparer les ressources
Serveur Web Apache
Installez le serveur Web Apache sur les deux nœuds.
# yum install -y httpd wget
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 de cluster.
Statut du serveur SetHandler Ordonner refuser, autoriser Refuser de tout Autoriser à partir de 127.0.0.1
Nous devons maintenant utiliser le stockage partagé pour stocker le fichier de contenu Web (HTML). Effectuez l'opération ci-dessous dans l'un des nœuds.
[[email protected] ~]# mount / dev / vg_apache / lv_apache / var / www / [[email protected] ~]# mkdir / var / www / html [[email protected] ~]# mkdir / var / www / cgi-bin [[email protected] ~]# mkdir / var / www / error [[email protected] ~]# restorecon -R / var / www [[email protected] ~]# chat <<-END >/var/www/html/index.html Bonjour bienvenue!. Cette page est desservie par le cluster de disponibilité Red Hat Hight FIN [[email protected] ~]# umount / var / www
Autorisez 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.
# pcs resource create httpd_fs Filesystem device = "/ dev / mapper / vg_apache-lv_apache" directory = "/ var / www" fstype = "ext4" --group apache
Production:
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 du nœud individuel.
# pcs resource create httpd_vip IPaddr2 ip = 192.168.1.100 cidr_netmask = 24 --group apache
Production:
Nom d'agent supposé «ocf: heartbeat: IPaddr2» (déduit de «IPaddr2»)
Créez une ressource Apache qui surveillera l'état du serveur Apache et déplacera la ressource vers un autre nœud en cas de panne.
# pcs resource create httpd_ser apache configfile = "/ etc / httpd / conf / httpd.conf" statusurl = "http://127.0.0.1/server-status" --group apache
Production:
Nom d'agent supposé 'ocf: battement de coeur: apache' (déduit de 'apache')
Puisque nous n'utilisons pas de clôture, désactivez-la (STONITH). Vous devez désactiver pour démarrer les ressources du cluster, mais la désactivation de STONITH dans l'environnement de production n'est pas recommandée.
# jeu de propriétés pcs activé par stonith = false
Vérifiez l'état du cluster.
[[email protected] ~]# statut des pcs
Production:
Nom du cluster: itzgeek_cluster
Pile: corosync
DC actuel: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition avec quorum
Dernière mise à jour: ven.5 juil.09: 26: 04 2019
Dernière modification: Fri Jul 5 09:25:58 2019 par root via cibadmin sur node1.itzgeek.local
2 nœuds configurés
3 ressources configurées
En ligne: [ node1.itzgeek.local node2.itzgeek.local ]
Liste complète des ressources:
Groupe de ressources: apache
httpd_fs (ocf :: heartbeat: Filesystem): Démarré node1.itzgeek.local
httpd_vip (ocf :: heartbeat: IPaddr2): démarré node1.itzgeek.local
httpd_ser (ocf :: heartbeat: apache): Démarré node1.itzgeek.local
Statut du démon:
corosync: actif / activé
stimulateur cardiaque: actif / activé
pcsd: actif / activé
Vérifier le cluster haute disponibilité
Une fois le cluster opérationnel, pointez 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 du nœud en arrêtant le cluster sur le nœud actif.
[[email protected] ~]# pcs cluster stop node1.itzgeek.local
Conclusion
C'est tout. Dans cet article, vous avez appris à configurer un cluster haute disponibilité sur CentOS 7. Veuillez nous faire part de vos réflexions dans la section des commentaires.
Commentaires
Laisser un commentaire