<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Redhat Cluster Suite on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/redhat-cluster-suite/</link><description>Recent content in Redhat Cluster Suite on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Wed, 07 Jan 2015 16:05:17 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/redhat-cluster-suite/index.xml" rel="self" type="application/rss+xml"/><item><title>Partage de VMDK entre plusieurs VMs</title><link>https://blog.zwindler.fr/2015/01/07/partage-de-vmdk-entre-plusieurs-vms/</link><pubDate>Wed, 07 Jan 2015 16:05:17 +0000</pubDate><guid>https://blog.zwindler.fr/2015/01/07/partage-de-vmdk-entre-plusieurs-vms/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/07/vmware2.webp" alt="Featured image of post Partage de VMDK entre plusieurs VMs" /&gt;&lt;p&gt;Si vous déjà voulu faire un POC de cluster Linux sur des machines virtuelles VMware, vous vous êtes déjà demandé comment vous alliez faire pour partager entre deux serveurs un espace de stockage commun à ces deux machines.&lt;/p&gt;
&lt;p&gt;Une façon de faire consiste à rajouter une couche d’abstraction du stockage au dessus de l’OS (via GlusterFS ou DRBD par exemple), mais dans le cas d’un POC pour valider un cluster connecté au SAN, ce n’est pas forcément la première solution qui vient à l’esprit. Personnellement, la plupart des clusters que je construis sont encore dans un schéma plus simple à base de LUNs  iSCSI ou FC partagés sur un SAN en actif/actif ou actif/passif.&lt;/p&gt;
&lt;p&gt;Cependant, pour simuler ce fonctionnement sur vos VMs, il va falloir bidouiller un peu.&lt;/p&gt;
&lt;p&gt;En effet, pour éviter toute erreur malencontreuse (et même désastreuse), VMware interdit par défaut le démarrage de toute machine virtuelle qui aurait un disque en cours d’utilisation par une autre machine virtuelle. Aïe&amp;hellip;&lt;/p&gt;
&lt;p&gt;Voici un petit mode opératoire pour s’en sortir ;-)&lt;/p&gt;
&lt;p&gt;Dans ce mode opératoire, les disques qu’on souhaite partager entre les deux serveurs sont des disques LVM en miroir, hébergés sur les baies de disques qui sont accessibles depuis les deux serveurs ESXi.&lt;/p&gt;
&lt;p&gt;Cet exemple permet de valider la fiabilité de la méthode dans le cadre d’un cluster Linux virtuel de type RedHat Cluster Suite. Le principe reste tout de même valide pour une utilisation en dehors de RedHat Cluster Suite, certaines opérations ne seront juste pas nécessaires (qui peut le plus peut le moins).&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Pour les besoins de la documentation, deux machines virtuelles &lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt; et &lt;strong&gt;test_partage_vmdk_2&lt;/strong&gt; ont été créés. Elles disposent des caractéristiques techniques suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;hébergée sur ESXi1&lt;/li&gt;
&lt;li&gt;RedHat Entreprise Linux 5.8&lt;/li&gt;
&lt;li&gt;2 vCPU, 1 Go de RAM&lt;/li&gt;
&lt;li&gt;50 Go de disque interne sur un espace partagé&lt;/li&gt;
&lt;li&gt;IP 192.168.111.1/24 sur un réseau virtuel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;test_partage_vmdk_2&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;hébergée sur ESXi2&lt;/li&gt;
&lt;li&gt;RedHat Entreprise Linux 5.8&lt;/li&gt;
&lt;li&gt;2 vCPU, 1 Go de RAM&lt;/li&gt;
&lt;li&gt;50 Go de disque interne sur un espace partagé&lt;/li&gt;
&lt;li&gt;IP 192.168.111.2/24 sur un réseau virtuel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="création-des-disques-virtuels"&gt;Création des disques virtuels
&lt;/h2&gt;&lt;p&gt;Les machines &lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt; et &lt;strong&gt;test_partage_vmdk_2&lt;/strong&gt; doivent être éteintes avant de réaliser les modifications.&lt;/p&gt;
&lt;p&gt;Ouvrir les paramètres de la machine virtuelle &lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt;, et ajouter un nouveau périphérique (Disque dur).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le provisionnement du disque doit impérativement être « statique immédiatement mis à zéro ». De plus, il doit aussi être hébergé sur un datastore commun aux deux machines physiques ESXi.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage31.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Créer le disque et l’affecter à un &lt;em&gt;Nœud périphérique virtuel&lt;/em&gt; qui n’est pas encore utilisé.&lt;/p&gt;
&lt;p&gt;Ici, le disque interne est stocké sur l’adresse SCSI (0:0). &lt;strong&gt;Par défaut&lt;/strong&gt; VMware propose de créer le disque à la suite en SCSI (**0:**1).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il faut impérativement&lt;/strong&gt; dérouler la liste pour affecter le disque à l’adresse SCSI (**1:**0) qui représente un nouveau contrôleur SCSI.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;De plus, pour permettre l’usage des snapshots sur la partie disque dur interne, les disques doivent être créés en Mode Indépendant/Persistant. &lt;em&gt;Dans le cas contraire, les snapshots seront impossibles sur la machine virtuelle&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Une fois le disque créé, un nouveau contrôleur SCSI est également créé. Avant de valider la création du disque et du contrôleur SCSI, il faut modifier le paramètre de Partage de bus de SCSI en mode « Physique ».&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage5.avif"
loading="lazy"
&gt;[4]Le second disque dur devra être créé de la même manière, et affecté au même contrôleur SCSI (on prendra l’adresse &lt;strong&gt;1:1&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Remettre &lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt; sous tension.&lt;/p&gt;
&lt;h2 id="ajout-des-disques-virtuels-sur-la-deuxième-machine-virtuelle"&gt;Ajout des disques virtuels sur la deuxième machine virtuelle
&lt;/h2&gt;&lt;p&gt;Ouvrir les paramètres de la machine virtuelle &lt;strong&gt;test_partage_vmdk_2&lt;/strong&gt;, ajouter un nouveau périphérique (Disque dur) puis sélectionner « Utiliser un disque virtuel déjà configuré ».&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage6.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Sélectionner le premier disque créé précédemment.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage7.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;De la même manière que précédemment, on doit créer un disque dur virtuel sur un nouveau contrôleur SCSI et en mode &lt;strong&gt;Indépendant-Persistant&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage8.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Modifier le nouveau contrôleur SCSI comme précédemment :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage9.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ajouter enfin le second disque de la même manière à l’adresse SCSI (1:1).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/01/vmdk_partage101.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Valider et mettre la machine virtuelle sous tension. Si elle boot correctement c’est que le partage fonctionne.&lt;/p&gt;
&lt;h2 id="créer-le-miroir-lvm-partagé"&gt;Créer le miroir LVM partagé
&lt;/h2&gt;&lt;p&gt;Sur &lt;strong&gt;les deux&lt;/strong&gt; serveurs, exécuter les commandes suivantes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;chkconfig acpid off #seulement pour RHCS
service acpid stop #seulement pour RHCS
vi /etc/lvm/lvm.conf
     filter = [ &amp;#34;a/.*/&amp;#34; ]
   #filter = [ &amp;#34;a|/dev/cciss/.*|&amp;#34;, &amp;#34;a|/dev/mpath.*|&amp;#34;, &amp;#34;r|.*|&amp;#34; ] #utiliser cette ligne en cas d’utilisation de multipath et de disques locaux présentés en tant que /dev/cciss. A adapter au contexte
[…]
volume_list = [ &amp;#34;vg01&amp;#34; , &amp;#34;@[TAG]&amp;#34; ]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans le cas de RedHat Cluster Suite, remplacer &lt;em&gt;[TAG]&lt;/em&gt; par le nom de la machine tel qu’il est définit dans le fichier /etc/cluster/cluster.conf.&lt;/p&gt;
&lt;p&gt;En dehors du cas d’un traitement automatisé par cluster, n’importe quel tag convient du moment qu’il est unique à la machine. Dans le cas présent, les tags choisis sont respectivement tag_vm1 et tag_vm2.&lt;/p&gt;
&lt;p&gt;Quelques précisions :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;filter&lt;/strong&gt; permet de traiter les cas où on doit ignorer certains disques. C’est typiquement nécessaire lorsque l’on utilise LVM avec multipath ou powerpath, car l’OS voit plusieurs « disques » sda ,sdb, &amp;hellip; pour un même disque mpath (1 sdX pour chaque chemin vers mpathY).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;volume_list&lt;/strong&gt; indique à LVM que seul le vg01 (interne) et les VG explicitement taggués avec le nom de la machine qui peuvent être utilisés. Cela permet de s’assurer qu’il n’y a qu’une seule machine qui peut activer le VG du moment qu’on n’ajoute jamais plus d’un tag au VG.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Même si les modifications du fichier lvm.conf sont prises en compte immédiatement, RedHat Cluster Suite impose une recompilation de l’initrd. Dans le cas d’un cluster RHCS, il faut donc lancer la commande suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkinitrd -f /boot/initrd-$(uname -r).img $(uname -r)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sur un seul nœud (le premier) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pvcreate /dev/sdb
pvcreate /dev/sdc
vgcreate -c n vg_mirror /dev/sdb /dev/sdc
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Tagger le VG pour pouvoir travailler dessus sur ce nœud.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vgchange --addtag tag_vm1 -ay vg_mirror
lvcreate -n lv_mirror -m1 -l 5116 /dev/vg_mirror
Logical volume &amp;#34;lv_mirror&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le journal des écritures doit lui aussi être en miroir&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;lvconvert --mirrorlog mirrored /dev/vg_mirror/lv_mirror
Logical volume lv_mirror converted.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Il est enfin possible de formater le disque, et de le monter sur le &lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkfs.ext3 /dev/vg_mirror/lv_mirror
mount /dev/vg_mirror/lv_mirror /mnt
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="tester-la-bascule"&gt;Tester la bascule
&lt;/h2&gt;&lt;p&gt;Scanner les VGs pour vérifier que le nouveau VG est bien disponible sur le &lt;strong&gt;test_partage_vmdk_2&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vgscan
vgs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Même s’il le VG est visible, il n’est pas possible de le monter car il n’a pas le bon tag (tel que spécifié dans le lvm.conf). Cela permet de vérifier que l’on ne pourra pas écrire sur les disques sur les deux nœuds en même temps.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Not activating vg_mirror/lv_mirror since it does not pass activation filter.
0 logical volume(s) in volume group “vg_mirror” now active
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On peut démonter le FS, désactiver le vg et enlever le tag sur le serveur &lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt; et vérifier qu’on peut bien le monter et écrire dessus sur le &lt;strong&gt;test_partage_vmdk_2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ce comportement est automatique sous RedHat Cluster Suite, qui gère lui même les tags lors de la bascule d’un VG/LV.&lt;/p&gt;
&lt;p&gt;Sur &lt;strong&gt;test_partage_vmdk_1&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;umount /mnt
vgchange --deltag tag_vm1 -an vg_mirror
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sur &lt;strong&gt;test_partage_vmdk_2&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vgchange --addtag tag_vm1 -ay vg_mirror
mount /dev/vg_mirror/lv_mirror /mnt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Have fun&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Best Practices pour Quorum Redhat Cluster Suite</title><link>https://blog.zwindler.fr/2014/03/31/best-practices-pour-quorum-redhat-cluster-suite/</link><pubDate>Mon, 31 Mar 2014 13:51:11 +0000</pubDate><guid>https://blog.zwindler.fr/2014/03/31/best-practices-pour-quorum-redhat-cluster-suite/</guid><description>&lt;img src="https://blog.zwindler.fr/2014/03/lbvm1.webp" alt="Featured image of post Best Practices pour Quorum Redhat Cluster Suite" /&gt;&lt;p&gt;Si vous avez déjà installé un cluster RHCS, vous saurez sûrement qu’il y a un certain nombre de paramètres qui semblent un peu arbitraires, et qui sont surtout assez mal définis chez Redhat. Je parle du totem token, du &lt;strong&gt;quorum_dev_poll&lt;/strong&gt; et surtout de comment ils dépendent les uns avec les autres. Ces différentes valeurs correspondent à des durées de timeout sur les différents composants qui régissent le cluster.&lt;/p&gt;
&lt;p&gt;C’est pourtant d’autant plus important à comprendre que, si vous laissez les valeurs initiales, vous pourrez avoir de vilaines surprises en cas de bascule &lt;strong&gt;multipath&lt;/strong&gt; d’un chemin.&lt;/p&gt;
&lt;p&gt;Personnellement, j’ai eu le cas sur un cluster hébergé chez un prestataire. Celui ci a réalisé des opérations sur son SAN, normalement transparentes, qui ont eu la fâcheuse conséquence de mettre en carafe toute l’infrastructure.&lt;/p&gt;
&lt;p&gt;Ce qui s’est réellement passé, c’est que le timeout de &lt;strong&gt;multipath&lt;/strong&gt; étant autour des 45 secondes en dur, les valeurs par défaut de perte du quorum était trop courte et le serveur se sabordait, pensant avoir perdu la cohérence du cluster.&lt;/p&gt;
&lt;p&gt;Pour s’y retrouver, Redhat a publié un papier qui, à défaut d’expliquer ce à quoi correspond exactement chaque variable, détaille les best practices pour les fixer.&lt;/p&gt;
&lt;p&gt;Les règles définies ci-dessous permettent de positionner les différentes variables qui réglementent les différents timeout d’un cluster Redhat Cluster Suite. Ces règles sont tirées du pdf du support Redhat « rhel_cluster_qdisk.pdf »&lt;/p&gt;
&lt;h2 id="règles-à-respecter"&gt;Règles à respecter
&lt;/h2&gt;&lt;p&gt;Les valeurs mises en gras sont celles qui sont dépendantes les unes des autres&lt;/p&gt;
&lt;h3 id="variable-token-du-composant-totem"&gt;Variable token du composant Totem
&lt;/h3&gt;&lt;p&gt;La variable &lt;em&gt;token&lt;/em&gt; du composant &lt;em&gt;totem&lt;/em&gt; doit respecter la formule suivante&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;totem token &amp;gt; 2 * quorumd tko * interval
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Donc pour la configuration du &lt;em&gt;quorumd&lt;/em&gt; suivante (&lt;em&gt;interval&lt;/em&gt; en secondes)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;quorumd label=&amp;#34;myQDisk&amp;#34; interval=&amp;#34;1&amp;#34; tko=&amp;#34;10&amp;#34; min_score=&amp;#34;1&amp;#34; votes=&amp;#34;1&amp;#34;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On devra avoir &lt;em&gt;totem token&lt;/em&gt; (en millisecondes) à&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;totem token=&amp;#34;21000&amp;#34;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="variable-quorum_dev_poll-de-cman"&gt;Variable quorum_dev_poll de CMAN
&lt;/h3&gt;&lt;p&gt;La variable &lt;em&gt;quorum_dev_poll&lt;/em&gt; de &lt;em&gt;CMAN&lt;/em&gt; doit être égale à la variable &lt;em&gt;totem token&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cman quorum_dev_poll = totem token
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans une configuration de base on aura&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;cman expected_votes=&amp;#34;3&amp;#34; quorum_dev_poll=&amp;#34;21000&amp;#34;/&amp;gt;
[…]
&amp;lt;totem token=&amp;#34;21000&amp;#34;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="variables-tko-et-interval-des-heuristiques"&gt;Variables tko et interval des heuristiques
&lt;/h3&gt;&lt;p&gt;Le produit de l’&lt;em&gt;interval&lt;/em&gt; et du &lt;em&gt;tko&lt;/em&gt; d’une &lt;em&gt;heuristique&lt;/em&gt; doit être inférieur ou égal au produit de l’&lt;em&gt;interval&lt;/em&gt; et du &lt;em&gt;tko-1&lt;/em&gt; du &lt;em&gt;quorumd&lt;/em&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;heuristics tko*interval &amp;lt;= quorumd interval*(tko-1)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans une configuration de base on aura&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;quorumd label=&amp;#34;myQDisk&amp;#34; interval=&amp;#34;1&amp;#34; tko=&amp;#34;10&amp;#34; min_score=&amp;#34;1&amp;#34; votes=&amp;#34;1&amp;#34;&amp;gt;
[…]
&amp;lt;heuristic program=&amp;#34;ping -c1 -w1 192.168.2.1&amp;#34; score=&amp;#34;1&amp;#34; interval=&amp;#34;2&amp;#34; tko=&amp;#34;4&amp;#34; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;De plus, une heuristique doit avoir un &lt;code&gt;tko &amp;gt; 1&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="variables-expected_votes-de-cman"&gt;Variables expected_votes de CMAN
&lt;/h3&gt;&lt;p&gt;La variable expected_votes de CMAN doit être égale à la formule suivante&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Nombre de nœuds du cluster * 2 - 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Quand on a 2 nœuds, c’est donc 3 votes, quand on a 3 nœuds c’est 5, etc.&lt;/p&gt;
&lt;h3 id="variable-votes-de-quorumd"&gt;Variable votes de quorumd
&lt;/h3&gt;&lt;p&gt;La valeur de la variable &lt;em&gt;votes&lt;/em&gt; du &lt;em&gt;quorumd&lt;/em&gt; doit être égale à la formule suivante&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Nombre de nœuds du cluster - 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Quand on a 2 nœuds, c’est donc 1 votes, quand on a 3 nœuds c’est 2, etc.&lt;/p&gt;
&lt;h3 id="règle-sur-les-nœuds"&gt;Règle sur les nœuds
&lt;/h3&gt;&lt;p&gt;Tous les nœuds du cluster doivent avoir un vote&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;clusternode name=&amp;#34;node1.example.org&amp;#34; votes=&amp;#34;1&amp;#34; nodeid=&amp;#34;1&amp;#34;&amp;gt;
[…]
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="variable-two_node-de-cman"&gt;Variable two_node de CMAN
&lt;/h3&gt;&lt;p&gt;Seul cas de doute pour moi, il existe une variable two_nodes de CMAN. Je ne sais pas dire si la Best Practices indique que cette valeur doit valoir 0 ou ne pas être présente&amp;hellip;&lt;/p&gt;
&lt;h2 id="configurations-fonctionnelles-irl"&gt;Configurations fonctionnelles IRL
&lt;/h2&gt;&lt;h3 id="exemple-de-la-configuration-dorigine-pour-un-cluster-à-2-nœuds"&gt;Exemple de la configuration d’origine pour un cluster à 2 nœuds
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;clusternode name=&amp;#34;node1.example.org&amp;#34; votes=&amp;#34;1&amp;#34; nodeid=&amp;#34;1&amp;#34;&amp;gt;
[…]
&amp;lt;clusternode name=&amp;#34;node2.example.org&amp;#34; votes=&amp;#34;1&amp;#34; nodeid=&amp;#34;2&amp;#34;&amp;gt;
[…]
&amp;lt;quorumd label=&amp;#34;myQDisk&amp;#34; interval=&amp;#34;1&amp;#34; tko=&amp;#34;10&amp;#34; min_score=&amp;#34;1&amp;#34; votes=&amp;#34;1&amp;#34;&amp;gt;
[…]
&amp;lt;heuristic program=&amp;#34;ping -c1 -w1 192.168.2.1&amp;#34; score=&amp;#34;1&amp;#34; interval=&amp;#34;2&amp;#34; tko=&amp;#34;4&amp;#34; /&amp;gt;
&amp;lt;cman expected_votes=&amp;#34;3&amp;#34; quorum_dev_poll=&amp;#34;21000&amp;#34;/&amp;gt;
[…]
&amp;lt;totem token=&amp;#34;21000&amp;#34;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="configuration-modifiée-pour-powerpath-sur-un-cluster-à-2-nœuds"&gt;Configuration modifiée pour PowerPath sur un cluster à 2 nœuds
&lt;/h3&gt;&lt;p&gt;Lorsqu’on utilise du multipathing ou powerpath pour réduire le nombre de SPOF du cluster, il est nécessaire de s’assurer que la perte et le basculement d’un lien se fait plus rapidement que le temps fixé par le cluster pour déterminer un échec.&lt;/p&gt;
&lt;p&gt;Le produit des attributs &lt;em&gt;interval * tko&lt;/em&gt; de &lt;em&gt;quorumd&lt;/em&gt; doit donc être supérieur au temps nécessaire pour une bascule complète du lien multipath.&lt;/p&gt;
&lt;p&gt;Les autres valeurs doivent être ensuite calculées &lt;em&gt;à partir de ces deux attributs et des règles définies plus haut&lt;/em&gt;. A priori, on trouve sur les sites de la communauté d’EMC que les chemins peuvent prendre 45 secondes pour basculer. Ces valeurs se vérifient sur mes clusters en production.&lt;/p&gt;
&lt;p&gt;Il Je préfère donc donner 50 secondes de battement au quorum disk avant de considérer le quorum comme perdu!&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;clusternode name=&amp;#34;node1.example.org&amp;#34; votes=&amp;#34;1&amp;#34; nodeid=&amp;#34;1&amp;#34;&amp;gt;
[…]
&amp;lt;clusternode name=&amp;#34;node2.example.org&amp;#34; votes=&amp;#34;1&amp;#34; nodeid=&amp;#34;2&amp;#34;&amp;gt;
[…]
&amp;lt;cman expected_votes=&amp;#34;3&amp;#34; quorum_dev_poll=&amp;#34;101000&amp;#34;/&amp;gt;
[…]
&amp;lt;totem consensus=&amp;#34;4800&amp;#34; join=&amp;#34;60&amp;#34; token=&amp;#34;101000&amp;#34; token_retransmits_before_loss_const=&amp;#34;20&amp;#34;/&amp;gt;
&amp;lt;quorumd label=&amp;#34;myQDisk&amp;#34; interval=&amp;#34;5&amp;#34; tko=&amp;#34;10&amp;#34; min_score=&amp;#34;1&amp;#34; votes=&amp;#34;1&amp;#34;&amp;gt;
&amp;lt;heuristic program=&amp;#34;ping -c1 -w1 192.168.2.1&amp;#34; score=&amp;#34;1&amp;#34; interval=&amp;#34;5&amp;#34; tko=&amp;#34;9&amp;#34; /&amp;gt;
&amp;lt;quorumd&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Démarrage forcé avec moins de la moitié des votes sur Redhat Cluster Suite (split brain my love)</title><link>https://blog.zwindler.fr/2013/07/07/demarrage-force-avec-moins-de-la-moitie-des-votes-sur-redhat-cluster-suite-split-brain-my-love/</link><pubDate>Sun, 07 Jul 2013 21:01:27 +0000</pubDate><guid>https://blog.zwindler.fr/2013/07/07/demarrage-force-avec-moins-de-la-moitie-des-votes-sur-redhat-cluster-suite-split-brain-my-love/</guid><description>&lt;img src="https://blog.zwindler.fr/2014/03/lbvm1.webp" alt="Featured image of post Démarrage forcé avec moins de la moitié des votes sur Redhat Cluster Suite (split brain my love)" /&gt;&lt;p&gt;Dans le cas où vous avez mis en place un cluster Redhat Cluster Suite sur votre infrastructure et que vous avez plusieurs salles distantes, vous êtes certainement tombé sur l’expression « split brain » (cf &lt;a class="link" href="http://fr.wikipedia.org/wiki/Split-brain" target="_blank" rel="noopener"
&gt;Split Brain sur Wikipedia&lt;/a&gt;). Généralement, il est intéressant de pouvoir empêcher deux serveurs en clusters qui ne se voient plus de fonctionner en même temps, c’est pourquoi avec RHCS il est possible sur des clusters 2 nœuds d’ajouter un disque SAN appelé Quorum Disk qui sert d’arbitre.&lt;/p&gt;
&lt;p&gt;Cependant, il arrive des fois où les protections du cluster vous empêche de redémarrer, typiquement lorsque vous n’avez qu’une seule salle serveur disponible!&lt;/p&gt;
&lt;p&gt;Revenons en arrière et imaginons que comme moi, vous disposez de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une salle primaire composée d’un nœud du cluster et d’un SAN avec une moitié de miroir et un quorum disk&lt;/li&gt;
&lt;li&gt;une salle secondaire composée d’un nœud du cluster et d’un SAN avec une moitié de miroir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cela vous fait donc 3 votes (2 nœuds, 1 quorum sur le SAN), vous êtes relativement contents. Si l’interconnexion tombe totalement (SAN + LAN), les deux salles seront isolées l’une de l’autre, et la salle secondaire n’ayant pas accès au quorum sera donc coupée par le cluster par manque de votes. La salle primaire fonctionnera toujours avec sa partie du miroir. Si c’est uniquement un des deux serveurs qui tombe en panne, le second et le quorum feront toujours 2 votes, ce qui sera là aussi suffisant.&lt;/p&gt;
&lt;p&gt;Imaginons maintenant que la salle primaire a été victime d’une attaque à la batte de baseball (risque relativement courant dans les salles serveurs), il est fort à parier que votre boss sera en train de vous crier dessus pour vous motiver à redémarrer votre infrastructure dans les plus brefs délais sur la salle secondaire.&lt;/p&gt;
&lt;p&gt;Pourtant, en l’absence d’un second vote (on se rappelle, le quorum a été ratatiné par une batte), le cluster refusera de démarrer. Et pas la peine d’essayer de tricher en modifier le poids du nœud restant, la commande « &lt;strong&gt;ccs_tool update&lt;/strong&gt; » refusera de mettre à jour un cluster qui a été dissolu et pas proprement reformé (ce qui s’annonce difficile).&lt;/p&gt;
&lt;p&gt;La commande suivante vous sauvera la vie en vous permettant de modifier arbitrairement la quantités de votes « attendus » (comprenez &lt;strong&gt;nécessaires&lt;/strong&gt;) par le cluster pour accepter de démarrer. Vous pourrez repartir sur votre salle secondaire. Elle est pas belle la vie ;-) ?&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cman_tool expected -e 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Attention tout de même, si jamais vous veniez à reconstruire le cluster (rétablissement de la liaison entre les deux salles) et que les deux salles ont toutes les deux été actives sur le SAN, votre miroir sera bien évidemment bon à jeter à la poubelle. A utiliser avec parcimonie et connaissance de cause&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Plus d’infos sur cman_tool sur la page man (ou sur le net)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;man cman_tool
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[Édit]La dernière fois que je l’ai utilisée j’ai du redémarrer d’abord le clusters via lucide PUIS lancer la commande pendant l’initialisation. A ce moment là, il cherche pendant un moment le reste du clusters puis abandonne, ce qui empêche rgmanager de fonctionner correctement. [/Édit]&lt;/p&gt;</description></item><item><title>[Tutoriel] Cluster Oracle 11gR2 avec Redhat Cluster Suite sur CentOS 5.4 (offline)</title><link>https://blog.zwindler.fr/2012/04/15/howto-cluster-oracle-11gr2-avec-redhat-cluster-suite-sur-centos-5-4-et-sans-acces-a-internet/</link><pubDate>Sun, 15 Apr 2012 07:54:09 +0000</pubDate><guid>https://blog.zwindler.fr/2012/04/15/howto-cluster-oracle-11gr2-avec-redhat-cluster-suite-sur-centos-5-4-et-sans-acces-a-internet/</guid><description>&lt;img src="https://blog.zwindler.fr/2014/03/lbvm1.webp" alt="Featured image of post [Tutoriel] Cluster Oracle 11gR2 avec Redhat Cluster Suite sur CentOS 5.4 (offline)" /&gt;&lt;p&gt;J’avais pour objectif de proposer une architecture sous Redhat permettant d’héberger en clustering une base de données Oracle en mode actif/passif (sans RAC donc) pour un nouveau client. L’architecture actuelle/connue était à base de serveurs HP-UX fonctionnant avec un cluster HP MCSG qui fonctionnait très bien, mais pour des raisons de support sur l’ERP le passage à Linux était obligatoire.&lt;/p&gt;
&lt;p&gt;MCSG sur Redhat n’étant pas encore (est ce que ça va changer?) supporté officiellement par Redhat et HP, et heartbeat étant une solution trop légère pour ce genre d’application critique au business, il a bien fallut que je fasse une maquette basée sur Redhat Cluster suite. Le faible nombre de blogs traitant du sujet et le nombre d’échecs parmi les rares articles que j’ai trouvés auraient du me mettre la puce à l’oreille quant à la difficulté d’installation/configuration de ce produit. Et pour cause : malgré une documentation officielle relativement bien faite, certains passages sont carrément obscur pour ceux qui rentrent dans le sujet sans expérience préalable des clusters.&lt;/p&gt;
&lt;p&gt;Ayant galérer pour faire marcher la solution dans les grandes lignes, je pense qu’il est de mon devoir (oui oui, rien que ça :-p) de faire partager la documentation que j’ai tiré de mes diverses expérimentations :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;La documentation en elle même &lt;a class="link" href="https://blog.zwindler.fr/2012/04/zwindler_redhat_cluster_suite.pdf" &gt;zwindler_redhat_cluster_suite&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Le fichier doc qui contient les &lt;a class="link" href="https://blog.zwindler.fr/2012/04/scripts.docx" &gt;scripts&lt;/a&gt;. Oui, c’est affreux mais wordpress n’autorise en upload que quelques extensions et je n’ai pas l’envie de chercher une solution de contournement&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Autre chose : au début, je pensais qu’être coupé d’Internet sur les serveurs d’un admin n’était pas monnaie courante. Avec le peu de recul que j’ai aujourd’hui, je me rend compte que je subis très régulièrement cette contrainte! Ayant été obligé de me passer du net sur ma maquette, j’ai aussi indiqué les solutions de contournement que j’ai trouvé dans la documentation, au cas où certains seraient dans la même configuration.&lt;/p&gt;
&lt;p&gt;Cependant, dans tous les cas, je ne conseille pas l’utilisation de RHCS sur une prod &lt;strong&gt;si vous débutez et/ou si vous n’avez pas d’accès à Internet&lt;/strong&gt; pour effectuer des mises à jours du système : &lt;strong&gt;les bugs de cette version ainsi que les erreurs de débutant que j’ai pu faire sur ma maquette auraient assez vite corrompu la base de données d’une production&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;N’hésitez pas à me faire remonter toute imperfection dans la documentation, que je puisse corriger pour les suivants&lt;/p&gt;</description></item></channel></rss>