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

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

Le cluster haute disponibilité, également appelé cluster de basculement (cluster actif-passif), est l'un des types de cluster les plus largement 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 du cluster tombe en panne. Si le serveur exécutant l'application a échoué pour une raison quelconque (panne matérielle), le logiciel du cluster (pacemaker) 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 est associé à une série d'opérations telles que le montage de systèmes de fichiers, la configuration de réseaux et le démarrage d'applications dépendantes.

Environnement

CentOS 7 / RHEL 7 prend en charge le cluster de basculement à l'aide du stimulateur cardiaque. Ici, nous examinerons la configuration du serveur Apache (Web) en tant qu'application hautement disponible.

Comme je l'ai dit, le basculement est une série d'opérations, nous aurions donc besoin de 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 SE Objectif
node1.itzgeek.local 192.168.1.11 CentOS 7 Nœud de cluster 1
node2.itzgeek.local 192.168.1.12 Nœud 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 largement utilisé dans l'environnement de production. Pour cette démo, nous allons configurer un cluster avec stockage iSCSI à des fins de démonstration.

Installer des packages

Serveur iSCSI

[root@server ~]# yum install targetcli -y

Nœuds 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. Listons les disques disponibles attachés au serveur cible à l'aide de la commande.

[root@server ~]# fdisk -l | grep -i sd

Sortie :

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 209715199 104344576 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors

À partir 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 (remplacez /dev/sdb par le nom de votre disque)

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

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

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

Créer un espace de stockage partagé

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

cat /etc/iscsi/initiatorname.iscsi

Nœud 1 :

InitiatorName=iqn.1994-05.com.redhat:b11df35b6f75

Nœud 2 :

InitiatorName=iqn.1994-05.com.redhat:119eaf9252a

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

[root@server ~]# targetcli

Sortie :

targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> cd /backstores/block
/backstores/block> create iscsi_shared_storage /dev/vg_iscsi/lv_iscsi
Created block storage object iscsi_shared_storage using /dev/vg_iscsi/lv_iscsi.
/backstores/block> cd /iscsi
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (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> create iqn.1994-05.com.redhat:b11df35b6f75   << Initiator of Node 1
Created Node ACL for iqn.1994-05.com.redhat:b11df35b6f75
/iscsi/iqn.20...ad5/tpg1/acls> create iqn.1994-05.com.redhat:119eaf9252a    << Initiator of Node 1
Created Node ACL for 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> create /backstores/block/iscsi_shared_storage
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.1994-05.com.redhat:119eaf9252a
Created LUN 0->0 mapping in node 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- portals ................................................................................. [Portals: 1]
  |       o- 0.0.0.0:3260 .................................................................................. [OK]
  o- loopback ...................................................................................... [Targets: 0]
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
[root@server ~]#

Activez et redémarrez le service cible.

[root@server ~]# systemctl enable target

[root@server ~]# systemctl restart target

Configurez le pare-feu pour autoriser le trafic iSCSI.

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

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

Découvrez le stockage partagé

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

# iscsiadm -m discovery -t st -p 192.168.1.20

Sortie :

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

Sortie :

Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5, portal: 192.168.1.20,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5, portal: 192.168.1.20,3260] successful.

Redémarrez et activez le service initiateur.

# systemctl restart iscsid

# systemctl enable iscsid

Configurer les nœuds du cluster

Entrée de l'hôte

Créez 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

Sortie :

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors 
/dev/sda1 * 2048 1026047 512000 83 Linux 
/dev/sda2 1026048 209715199 104344576 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10733223936 bytes, 20963328 sectors

Sur l'un de vos nœuds (Ex, node1), 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.

[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 pour vous sur un autre nœud (Ex. node2) en utilisant la commande ci-dessous.

[root@node2 ~]# lvdisplay /dev/vg_apache/lv_apache

Sortie : Vous devriez voir /dev/vg_apache/lv_apache sur node2.itzgeek.local

 --- Logical volume ---
  LV Path                /dev/vg_apache/lv_apache
  LV Name                lv_apache
  VG Name                vg_apache
  LV UUID                mFUyuk-xTtK-r7PV-PLPq-yoVC-Ktto-TcaYpS
  LV Write Access        read/write
  LV Creation host, time node1.itzgeek.local, 2019-07-05 08:57:33 +0530
  LV Status              available
  # open                 0
  LV Size                9.96 GiB
  Current LE             2551
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           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 à établir 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=high-availability

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

Utilisez la commande ci-dessous pour répertorier les applications autorisées dans le pare-feu.

# firewall-cmd --list-service

Sortie :

ssh dhcpv6-client high-availability

Définissez le 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. Activez-le également 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.

[root@node1 ~]# pcs cluster auth node1.itzgeek.local node2.itzgeek.local

Sortie :

Username: hacluster
Password:      << Enter Password
node1.itzgeek.local: Authorized
node2.itzgeek.local: Authorized

Créez un cluster.

[root@node1 ~]# pcs cluster setup --start --name itzgeek_cluster node1.itzgeek.local node2.itzgeek.local

Sortie :

Destroying cluster on nodes: node1.itzgeek.local, node2.itzgeek.local...
node1.itzgeek.local: Stopping Cluster (pacemaker)...
node2.itzgeek.local: Stopping Cluster (pacemaker)...
node2.itzgeek.local: Successfully destroyed cluster
node1.itzgeek.local: Successfully destroyed cluster

Sending 'pacemaker_remote authkey' to 'node1.itzgeek.local', 'node2.itzgeek.local'
node1.itzgeek.local: successful distribution of the file 'pacemaker_remote authkey'
node2.itzgeek.local: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
node1.itzgeek.local: Succeeded
node2.itzgeek.local: Succeeded

Starting cluster on nodes: node1.itzgeek.local, node2.itzgeek.local...
node1.itzgeek.local: Starting Cluster (corosync)...
node2.itzgeek.local: Starting Cluster (corosync)...
node1.itzgeek.local: Starting Cluster (pacemaker)...
node2.itzgeek.local: Starting Cluster (pacemaker)...

Synchronizing pcsd certificates on nodes node1.itzgeek.local, node2.itzgeek.local...
node1.itzgeek.local: Success
node2.itzgeek.local: Success
Restarting pcsd on the nodes in order to reload the certificates...
node1.itzgeek.local: Success
node2.itzgeek.local: Success

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 Enabled
node2.itzgeek.local: Cluster Enabled

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

[root@node1 ~]# pcs cluster status

Sortie :

Cluster Status:
 Stack: corosync
 Current DC: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
 Last updated: Fri Jul  5 09:14:57 2019
 Last change: Fri Jul  5 09:13:12 2019 by hacluster via crmd on node2.itzgeek.local
 2 nodes configured
 0 resources configured

PCSD Status:
  node1.itzgeek.local: Online
  node2.itzgeek.local: Online

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.

[root@node1 ~]# pcs status

Sortie :

Cluster name: itzgeek_cluster

WARNINGS:
No stonith devices and stonith-enabled is not false

Stack: corosync
Current DC: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Fri Jul  5 09:15:37 2019
Last change: Fri Jul  5 09:13:12 2019 by hacluster via crmd on node2.itzgeek.local

2 nodes configured
0 resources configured

Online: [ node1.itzgeek.local node2.itzgeek.local ]

No resources


Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Dispositifs d'escrime

Le dispositif de clôture est un dispositif matériel/logiciel 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. Mon cluster de démonstration s'exécute sur la machine virtuelle VMware. Je ne vous montre donc pas la configuration d'un périphérique de clôture, mais vous pouvez suivre ce guide pour configurer un périphérique de clôture.

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 du cluster.

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Location>

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.

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

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

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

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

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

[root@node2 ~]# 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@node2 ~]# 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.

# pcs resource create httpd_fs Filesystem device="/dev/mapper/vg_apache-lv_apache" directory="/var/www" fstype="ext4" --group apache

Sortie :

Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from '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

Sortie :

Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from '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

Sortie :

Assumed agent name 'ocf:heartbeat:apache' (deduced from '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.

# pcs property set stonith-enabled=false

Vérifiez l'état du cluster.

[root@node1 ~]# pcs status

Sortie :

Cluster name: itzgeek_cluster
Stack: corosync
Current DC: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Fri Jul  5 09:26:04 2019
Last change: Fri Jul  5 09:25:58 2019 by root via cibadmin on node1.itzgeek.local

2 nodes configured
3 resources configured

Online: [ node1.itzgeek.local node2.itzgeek.local ]

Full list of resources:

 Resource Group: apache
     httpd_fs   (ocf::heartbeat:Filesystem):    Started node1.itzgeek.local
     httpd_vip  (ocf::heartbeat:IPaddr2):       Started node1.itzgeek.local
     httpd_ser  (ocf::heartbeat:apache):        Started node1.itzgeek.local

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

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 de ressource du nœud en arrêtant le cluster sur le nœud actif.

[root@node1 ~]# 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.


Cent OS
  1. Comment configurer une interface réseau virtuelle sur RHEL 8 / CentOS 8

  2. CentOS / RHEL 7 :Comment configurer le serveur de noms en cache uniquement

  3. CentOS / RHEL 6,7 :Comment configurer les pages énormes

  4. Comment configurer le proxy dans CentOS/RHEL/Fedora

  5. Comment configurer la journalisation du pare-feu dans CentOS/RHEL 8

Comment configurer une adresse IP statique dans CentOS 8 / RHEL 8

Comment installer et configurer Ansible sur CentOS 8 / RHEL 8

Comment configurer le serveur DNS (BIND) sur CentOS 8 / RHEL 8

Comment installer et configurer Jenkins sur CentOS 8 / RHEL 8

Configurer VCS sur CentOS 8 | RHEL 8 étape par étape

Comment configurer le serveur VNC sur CentOS/RHEL 6