LINUX:Pacemaker - ISCSI en Failover et SBD (fence)
→ retour au menu de la Haute disponibilité
But
A la configuration précédente, nous ajoutons la notion de "Fence" avec la couche SBD. Le logiciel SBD utilise un device de type Watchdog (chien de garde) qui permet d'arrêter la machine client ISCSI Initiator quand elle ne plus atteindre sa cible ISCSI de référence. Cette situation se présente, par exemple, dans le cas d'une défaillance réseau. Cette arrêt permet d'éviter des problèmes de corruptions de données sur les ressources distantes. Nous n'utiliserons qu'un serveur ISCSI Target mais nous garderons l'approche Failover.
Matériel et adressage IP
Dans notre exemple, nous utilisons un serveur ISCSI ("target") et deux clients ISCSI ("initiator"). Le schéma ci-dessous nous montre l'adressage IP et le nom de ces trois machines. En outre pour mettre la fonction Failover, une adresse IP virtuelle est ajoutée. Elle passera d'un client ISCSI à l'autre.
Le cluster Pacemaker ne comportera que les deux clients ISCSI (Initiator): "cl1.home.dom" et "cl2.home.dom".
Prérequis
Configurations de base
En premier, les Prérequis doivent être effectués.
Fichier "hosts"
Sur chaque machine du cluster, on ajoute un nom aux différentes adresses réseaux. On le fait en local dans le fichier "/etc/hosts" suivant le schéma ci-dessus. Son contenu devient:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.71 sv1.home.dom 192.168.1.73 cl1.home.dom 192.168.1.74 cl2.home.dom 192.168.1.75 cluster.home.dom # serveur mail 192.168.1.110 servermail.home.dom home.dom
ISCSI
Nous nous baserons sur la configuration de l'article sur ISCSI à part qu'on double le client Initiator. Mais le service "iscsi.service" ainsi que le montage du disque ISCSI "/datab" (fichier "/etc/fstab") sur les clients Initiator n'est pas lancé. C'est Pacemaker qui s'en chargera.
Nous expliciterons les quelques changements et leurs buts sera explicités par la suite.
Liste des parties à configurer
Cette configuration est plus compliquée et doit suivre une série d'étapes dans le bon ordre.
- Configuration du serveur ISCSI Target
- Configuration du côté des clients ISCSI Initiator
- Configuration de Watchdog sur les clients
- Configuration de SBD sur les clients
- Configuration de la base de Pacemaker sur les clients
- Configuration de SBD-fence sous Pacemaker sur les clients
- Configuration de ressources finales de Pacemaker sur les clients
ISCSI - Target
Sur le serveur ISCSI Target "sv1.home.dom", nous avons besoin de deux espaces disques. Nous les mettrons sur le même disque.
- la première partition va être utilisées par le processus SBD que nous verrons par la suite. Cette partition n'a pas besoin de beaucoup d'espace; nous utilisons 1MB. Il servira a l'échange de courts messages. Attention, cet espace ne doit pas avoir d'interaction avec d'autres espaces disques distants tels DRBD ou un RAID distant.
- la seconde partition sera utilisée comme espace disque distant par les clients. Le reste du disque lui sera attribué.
Partitionnement
Sur un disque vierge que nous nommerons "/dev/sdb", on le partitionne avec "fdisk":
fdisk /dev/sdb
Voici la suite des commandes (en gras) et de l'affichage lié:
Bienvenue dans fdisk (util-linux 2.38.1). Les modifications resteront en mémoire jusqu'à écriture. Soyez prudent avant d'utiliser la commande d'écriture. Commande (m pour l'aide) : p Disque /dev/sdb : 149,05 GiB, 160041885696 octets, 312581808 secteurs Modèle de disque : ST3160815AS Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : gpt Identifiant de disque : 043ACF55-DA46-944F-82A0-DB8258F243DC Commande (m pour l'aide) : n Numéro de partition (1-128, 1 par défaut) : Premier secteur (2048-312581774, 2048 par défaut) : Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (2048-312581774, 312580095 par défaut) : +1M Une nouvelle partition 1 de type « Linux filesystem » et de taille 1 MiB a été créée. Commande (m pour l'aide) : n Numéro de partition (2-128, 2 par défaut) : Premier secteur (4096-312581774, 4096 par défaut) : Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (4096-312581774, 312580095 par défaut) : Une nouvelle partition 2 de type « Linux filesystem » et de taille 149 GiB a été créée. Commande (m pour l'aide) : p Disque /dev/sdb : 149,05 GiB, 160041885696 octets, 312581808 secteurs Modèle de disque : ST3160815AS Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : gpt Identifiant de disque : 043ACF55-DA46-944F-82A0-DB8258F243DC Périphérique Début Fin Secteurs Taille Type /dev/sdb1 2048 4095 2048 1M Système de fichiers Linux /dev/sdb2 4096 312580095 312576000 149G Système de fichiers Linux Commande (m pour l'aide) : w La table de partitions a été altérée. Appel d'ioctl() pour relire la table de partitions. Synchronisation des disques.
Configuration de Tgt
La configuration générale de Tgt se trouve dans le répertoire "/etc/tgt" et la configuration spécifique qui nous concerne sera mise dans le fichier "/etc/tgt/conf.d/diskb.conf. Nous allons y inclure les deux partitions créées.
Voici son contenu:
<target iqn.2023-02.dom.home.sv1:sv1.target1> backing-store /dev/sdb1 initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 initiator-name iqn.2023-02.dom.home.sv:sv.initiator02 incominguser diskuser Eupen2Marron initiator-address 192.168.1.73 initiator-address 192.168.1.74 </target> <target iqn.2023-02.dom.home.sv1:sv1.target2> backing-store /dev/sdb2 initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 initiator-name iqn.2023-02.dom.home.sv:sv.initiator02 incominguser diskuser Eupen2Marron initiator-address 192.168.1.73 initiator-address 192.168.1.74 </target>
Le premier "Target" sera utilisé par le processus SBD et le second pour le stockage de données.
En outre, comme nous avons ici deux clients ISCSI Initiator, chacun a son propre "initiator-name". Si nous ne faisons pas cette distinction, les connexions se feront et se déferont perpétuellement et rapidement sans stabilité.
Nous devons permettre aux clients à se connecter avec la clause "initiator-address".
Nous ajoutons une authentification avec l'option "incominguser".
Il nous reste à activer et lancer le service "tgtd.service":
systemctl enable tgtd.service systemctl start tgtd.service
On peut vérifier la configuration avec la commande:
tgtadm --mode target --op show
qui donne:
Target 1: iqn.2023-02.dom.home.sv1:sv1.target1 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 1 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /dev/sdb1 Backing store flags: Account information: diskuser ACL information: 192.168.1.73 192.168.1.74 iqn.2023-02.dom.home.sv:sv.initiator01 iqn.2023-02.dom.home.sv:sv.initiator02 Target 2: iqn.2023-02.dom.home.sv1:sv1.target2 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00020000 SCSI SN: beaf20 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00020001 SCSI SN: beaf21 Size: 160039 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /dev/sdb2 Backing store flags: Account information: diskuser ACL information: 192.168.1.73 192.168.1.74 iqn.2023-02.dom.home.sv:sv.initiator01 iqn.2023-02.dom.home.sv:sv.initiator02
ISCSI Initiator
Le Target étant actif, on passe à la partie Initiator sur les deux machines clients Initiator: "cl1.home.dom" et "cl2.home.dom".
Configuration de Iscsi
Les fichiers de configuration se retrouvent dans le répertoire "/etc/iscsi". Il contient deux fichiers: initiatorname.iscsi et iscsid.conf
- Dans le fichier "iscsid.conf", nous allons y apporter quelques modifications. Ces modifications sont a effectuer sur les deux machines clients Initiator.
Ces modifications permettent que la machine s'authentifie auprès des serveurs targets ISCSI. Il s'agit des deux paramètres de l'option "incominguser" activés sur les machines Targets: nom d'utilisateur et son mot de passe. On ajoute ou active ces lignes:
node.session.auth.authmethod = CHAP node.session.auth.username = diskuser node.session.auth.password = Eupen2marron
- Dans le fichier "initiatorname.iscsi", on remplace la ligne existante par le nom d'initiator défini sur le serveur target ISCSI.
Sur la première machine "cl1.home.dom", ce fichier contient le premier InitiatorName:
InitiatorName=iqn.2023-02.dom.home.sv:sv.initiator01
Sur la seconde machine "cl2.home.dom", ce fichier contient le second InitiatorName:
InitiatorName=iqn.2023-02.dom.home.sv:sv.initiator02
Découverte des Targets
Maintenant on va pouvoir ajouter les targets qui sont attribués aux clients ISCSI Initiator. Sur ces deux machines, on exécute la commande suivante:
iscsiadm -m discovery -t st -p 192.168.1.71
qui donne:
192.168.1.71:3260,1 iqn.2023-02.dom.home.sv1:sv1.target1 192.168.1.71:3260,1 iqn.2023-02.dom.home.sv1:sv1.target2
On peut vérifier la bonne exécution en constatant que des sous-répertoires et des fichiers de paramètres ont été créés dans les répertoires "/var/lib/iscsi/nodes" et "/var/lib/iscsi/send_targets".
Connexions
On active et relance le processus "iscsid" sur les deux machines clients ISCSI Initiator:
systemctl enable remote-fs.target systemctl enable iscsi.service systemctl restart iscsi.service
La commande:
lsblk
permet de constater que deux nouveaux devices disques sont apparus:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 149,1G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 63,8G 0 part ├─fedora_cl1-root 253:0 0 15G 0 lvm / ├─fedora_cl1-swap 253:1 0 39,1G 0 lvm [SWAP] └─fedora_cl1-var 253:2 0 9,8G 0 lvm /var sdb 8:16 0 1M 0 disk sdc 8:32 0 149G 0 disk zram0 252:0 0 3,7G 0 disk [SWAP]
Partitionnement et formatage
A partir d'une des machines clients ISCSI Initiator, on crée une partition au device disque le plus gros de 149GB, "/dev/sdc" dans notre cas.
La partition "/dev/sdc1" est ajoutée:
lsblk
qui affiche:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 149,1G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 63,8G 0 part ├─fedora_cl1-root 253:0 0 15G 0 lvm / ├─fedora_cl1-swap 253:1 0 39,1G 0 lvm [SWAP] └─fedora_cl1-var 253:2 0 9,8G 0 lvm /var sdb 8:16 0 1M 0 disk sdc 8:32 0 149G 0 disk └─sdc1 8:33 0 149G 0 part zram0 252:0 0 3,7G 0 disk [SWAP]
On peut la formater:
mkfs.xfs /dev/sdc1
qui donne:
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=9767936 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=1 inobtcount=1 nrext64=0 data = bsize=4096 blocks=39071744, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=19078, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
Sur l'autre machine client ISCSI Initiator, on relance le service concerné pour tenir compte de ces changements:
systemctl restart iscsi.service
Noms des devices
Dans les étapes suivantes, nous aurons besoin du nom de fichier de ces nouveaux devices:
- Pour le processus SBD nous avons besoin de celui ayant un espace de 1MB:
ls -al /dev/disk/by-path | grep sdb
qui donne:
lrwxrwxrwx 1 root root 9 18 mar 11:53 ip-192.168.1.71:3260-iscsi-iqn.2023-02.dom.home.sv1:sv1.target1-lun-1 -> ../../sdb
- Pour le montage de l'espace de 149GB:
ls -al /dev/disk/by-uuid | grep sdc
qui donne:
lrwxrwxrwx 1 root root 10 18 mar 12:02 3d887218-4f2c-4f02-ba75-bea5f90e8031 -> ../../sdc1
Création du répertoire de montage
Pour pouvoir monter par la suite le disque ISCSI de 149GB, il faut un répertoire spécifique sur les deux machines clients ISCSI Initiator:
mkdir /datab
Watchdog
Le logiciel SBD a besoin de Watchdog. Watchdog est chargé d'arrêter ou de redémarrer la machine en cas de problème. C'est le logiciel SBD qui est chargé de le déclencher. Cette fonctionnalité doit être située sur les deux machines clients ISCSI Initiator: "cl1.home.dom" et "cl2.home.dom".
Module matériel
La majorité des machines sont équipées maintenant de ce genre de fonction. Pour les repérer, on va détecter le pilote associé chargé:
lsmod | grep wdt lsmod | grep softdog
qui donne sur une de mes deux machines: ---
iTCO_wdt 16384 0 intel_pmc_bxt 16384 1 iTCO_wdt iTCO_vendor_support 16384 1 iTCO_wdt mei_wdt 16384 0 mei 172032 3 mei_wdt,mei_me
On y remarque deux pilotes principaux.
S'il n'est pas seul, il faut en désactiver un, sinon aléatoirement un des deux sera chargé en premier lieu. Nous allons désactiver le module: "mei_wdt" car le module "iTCO_wdt" est plus connu et est présent sur l'autre machine. Pour y parvenir, on ajoute le fichier "/etc/modprobe.d/watchdog-blacklist.conf" qui contient:
blacklist mei_wdt install mei_wdt /bin/false
La première ligne l'empêche de se charger au démarrage et la seconde ne permet plus son chargement direct.
Pour le décharger soit on redémarre la machine, soit on exécute la commande suivante:
modprobe -r mei_wdt
Module logiciel
Si aucun module Watchdoc matériel n'est présent, on peut se retourner vers le Watchdog logiciel "watchdog". Mais dans ce cas, pour pouvoir exécuter sa tâche, le CPU doit être opérationnel. Il n'est pas à préférer.
Pour le charger, on crée le fichier "/etc/modules-load.d/watchdog.conf" qui contient la ligne:
softdog
Pour le charger soit on redémarre la machine, soit on exécute la commande suivante:
modprobe softdog
Device
→ retour au menu de la Haute disponibilité