<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Quorum on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/quorum/</link><description>Recent content in Quorum on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Fri, 11 Oct 2019 06:40:55 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/quorum/index.xml" rel="self" type="application/rss+xml"/><item><title>Un cluster Proxmox VE avec seulement 2 machines !</title><link>https://blog.zwindler.fr/2019/10/11/un-cluster-proxmox-ve-avec-seulement-2-machines/</link><pubDate>Fri, 11 Oct 2019 06:40:55 +0000</pubDate><guid>https://blog.zwindler.fr/2019/10/11/un-cluster-proxmox-ve-avec-seulement-2-machines/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/10/proxmox.webp" alt="Featured image of post Un cluster Proxmox VE avec seulement 2 machines !" /&gt;&lt;p&gt;Depuis le temps que je vous parle de clusters et de Proxmox (en gros, &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=proxmox" &gt;depuis 2015&lt;/a&gt;), ou même de clusters tout court, j’ai pu vous en mettre des tartines sur le fait qu’il ne faut pas faire des clusters avec un nombre pair de machines (ou tout autre cas défavorable dans lequel deux moitiés d’un cluster peuvent se retrouver isolées l’une de l’autre). Le split brain, c’est pas bon pour votre Karma, croyez moi sur parole (ou &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=split" &gt;allez voir vous même&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Ça me rappelle la fois où un &amp;ldquo;&amp;ldquo;&amp;ldquo;architecte&amp;rdquo;&amp;rdquo;&amp;rdquo; de chez Datacore était venu nous expliquer que sa solution de stockage à 2 pattes ne POUVAIT PAS avoir de split brain (alors que si, les ingés du support ont du repasser par derrière pour nous dire que &amp;ldquo;oui désolé vous avez évidemment raison c’est un cas possible&amp;rdquo; #LOL).&lt;/p&gt;
&lt;p&gt;Bref, et donc à force d’en parler, il fallait bien quand même que je donne un jour la solution pour le faire quand même, mais proprement. Sans trop de surprise, Corosync, la librairie qui gère les clusters Linux depuis qu’on a arrêté de faire des horreurs avec heartbeat (ou pire : &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=redhat&amp;#43;cluster&amp;#43;suite" &gt;cman+rgmanager, achevez moi&lt;/a&gt;), gère évidemment les deux possibilités :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gérer soit même le membre prioritaire en cas de split brain avec un poids (ça on va pas en parler mais sachez que c’est possible)&lt;/li&gt;
&lt;li&gt;Ajouter un vote externe pour obtenir un quorum (comme tous les vrais logiciels qui font du clustering un peu sérieux quoi)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="limitations-du-corosync-external-vote-dans-pve"&gt;Limitations du &amp;ldquo;Corosync External Vote&amp;rdquo; dans PVE
&lt;/h2&gt;&lt;p&gt;La petite déception du jour viendra surtout du fait que, si la documentation de Proxmox VE indique clairement que l’option est supportée, en réalité, le support se limite aux fonctions natives de corosync, et encore pas toutes.&lt;/p&gt;
&lt;p&gt;Pas moyen de voir notre vote externe dans l’interface de Proxmox VE par exemple. A priori, le support des quorum disk n’est plus assuré non plus depuis la version 4 de PVE.&lt;/p&gt;
&lt;p&gt;Ensuite, il faut aussi savoir que pour l’instant, seul l’utilisation d’une IP pour renseigner le quorum serveur est possible. On ne peut pas utiliser un FQDN, ce qui me parait dingue comme limitation en 2019, mais bon&amp;hellip;&lt;/p&gt;
&lt;p&gt;Ces deux points mis de côté, vous allez voir, ce n’est pas sorcier. La procédure est en bonne partie détaillée &lt;a class="link" href="https://pve.proxmox.com/wiki/Cluster_Manager#_corosync_external_vote_support" target="_blank" rel="noopener"
&gt;dans la documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Pour ce tutoriel, vous allez donc avoir besoin de 2 machines (a minima), déjà en cluster. Si vous ne les avez pas déjà, je vous invite à regarder &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=proxmox" &gt;les moults tutoriels précédents&lt;/a&gt;, en particulier celui sur &lt;a class="link" href="https://blog.zwindler.fr/2019/08/20/cluster-proxmox-ve-v6-cette-fois-ci/" &gt;la mise en place d’un cluster Proxmox VE 6&lt;/a&gt; (le plus récent).&lt;/p&gt;
&lt;p&gt;Vous allez aussi avoir besoin d’un serveur tiers (un bout de VM ou de container quelque part, en dehors de vos 2 (ou tout autres quantité de machines étant localisées dans 2 endroits distincts dont il existe un risque qu’ils puissent subitement &amp;ldquo;ne plus se voir&amp;rdquo;, d’un point de vue réseau, induisant le fameux split brain tant redouté).&lt;/p&gt;
&lt;p&gt;Fun fact, il y a &lt;a class="link" href="https://pve.proxmox.com/wiki/Raspberry_Pi_as_third_node" target="_blank" rel="noopener"
&gt;une page de wiki pour faire la même chose à la main avec un RPi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ce serveur tiers n’a pas besoin de faire fonctionner Proxmox (c’est même plutôt mieux d’ailleurs car PVE n’a aucune plus-value ici). Ça doit juste être une distrib linux capable d’installer un démon corosync qnetd. Ce serveur, nous l’appellerons &amp;ldquo;quorum&amp;rdquo;, par abus de langage grossier ;-).&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration
&lt;/h2&gt;&lt;p&gt;Sur le serveur quorum, installer corosync qnetd. Sur une Debian like, vous avez de la chance, il existe un package présent dans les dépôts par défaut, et il faut simplement faire un :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt install corosync-qnetd
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, sur tous les serveurs Proxmox VE de notre cluster, on va installer le package corosync-qdevice, qui va leur permettre d’interroger le quorum.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt install corosync-qdevice
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sur le serveur quorum de nouveau, ajouter la clé SSH d’un des serveurs PVE (un seul suffit). Une fois que c’est fait, connecter le cluster au quorum.&lt;/p&gt;
&lt;p&gt;Cela va sans dire, mais faire la commande depuis le serveur dont on vient d’ajouter la clé, pas l’autre hein ;-p. Et remplacez &lt;QDEVICE-IP&gt; par l’IP du serveur quorum !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pvecm qdevice setup &amp;lt;QDEVICE-IP&amp;gt;
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: &amp;#34;/root/.ssh/id_rsa.pub&amp;#34;
The authenticity of host &amp;#39;x.x.x.x&amp;#39; can&amp;#39;t be established.
ECDSA key fingerprint is SHA256:LPaaaaaaaaaaaaaaaaaPZjaIg.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.
(if you think this is a mistake, you may want to use -f option)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Je met volontairement une grosse partie de la trace car comme ça on peut parler de ce que fait la commande &lt;em&gt;pvecm qdevice setup x.x.x.x&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le constater, cette commande semble assez similaire à celle pour créer manuellement le cluster. A savoir, elle commence déjà par copier les clés SSH sur le serveur distant, histoire que tout le monde puisse discuter ensemble en SSH.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;INFO: initializing qnetd server
Certificate database (/etc/corosync/qnetd/nssdb) already exists. Delete it to initialize new db
INFO: copying CA cert and initializing on all nodes
node &amp;#39;pve01&amp;#39;: Creating /etc/corosync/qdevice/net/nssdb
password file contains no data
node &amp;#39;pve01&amp;#39;: Creating new key and cert db
node &amp;#39;pve01&amp;#39;: Creating new noise file /etc/corosync/qdevice/net/nssdb/noise.txt
node &amp;#39;pve01&amp;#39;: Importing CA
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, on initialise, sur tous les nodes du cluster, le qdevice, qui va permet au node de communiquer avec le quorum. Là j’élude un peu car ça parle beaucoup de certificats et de clés qui sont échangées.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;INFO: copy and import pk12 cert to all nodes&amp;lt;br&amp;gt;INFO: add QDevice to cluster configuration
INFO: start and enable corosync qdevice daemon on node &amp;#39;pve01&amp;#39;...
Synchronizing state of corosync-qdevice.service with SysV service script with /lib/systemd/systemd-sysv-install.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Normalement, si tout se passe bien, vous devriez en arriver là, une fois que tout le monde s’est bien échangé ses certificats, clés et autres joyeusetés crytographiques.&lt;/p&gt;
&lt;p&gt;Une petite commande pour vérifier l’état du bazar :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ pvecm status
Quorum information
------------------
Date: Mon Aug 26 14:49:14 2019
Quorum provider: corosync_votequorum
Nodes: 2
Node ID: 0x00000002
Ring ID: 1/1271796
Quorate: Yes
Votequorum information
----------------------
Expected votes: 3
Highest expected: 3
Total votes: 3
Quorum: 2
Flags: Quorate Qdevice
Membership information
----------------------
Nodeid Votes Qdevice Name
0x00000001 1 A,V,NMW 10.0.0.1
0x00000002 1 A,V,NMW 10.0.0.2 (local)
0x00000000 1 Qdevice
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ça, c’est le genre de choses que j’attends d’un logiciel de clustering digne de ce nom. D’une simple commande, on peut avoir&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le nombre de nodes&lt;/li&gt;
&lt;li&gt;l’ID du node courant&lt;/li&gt;
&lt;li&gt;le nombre de votes actuels, attendus, et minimum pour que le cluster soit &amp;ldquo;QUORATE&amp;rdquo;&lt;/li&gt;
&lt;li&gt;et enfin l’état de tout le cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ici, avec 2 nodes + le quorum, on a bien 3 votes. Tant qu’on a 2 votes, on a le quorum, CQFD.&lt;/p&gt;
&lt;p&gt;Dans ce cas de figure, si on perd un nœud OU le quorum, on a toujours 2 votes et le cluster doit continuer à fonctionner &amp;ldquo;normalement&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Et c’est ce qu’on va vérifier !&lt;/p&gt;
&lt;h2 id="on-casse-un-nœud-pour-voir"&gt;On casse un nœud, pour voir
&lt;/h2&gt;&lt;p&gt;Normalement, si on a pas le serveur quorum, tout devrait être brisé (comme dirait Medieval Ops).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/tweet_medieval.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;En gros les VMs doivent continuer à tourner, mais toute opération (démarrage de VM, modification quelconque) doit être bloquée (pour éviter de démarrer la même VM à 2 endroits et pleurer pour recoller les morceaux).&lt;/p&gt;
&lt;p&gt;Or ici dès que l’hôte n’est plus joignable, le nœud survivant le détecte, et comme le quorum ne voit plus lui non plus qu’un seul nœud, indique au dernier qu’il peut continuer sa vie comme si de rien n’était (c’est glauque&amp;hellip;).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ pvecm status
Quorum information
------------------
Date: Thu Aug 29 11:10:31 2019
Quorum provider: corosync_votequorum
Nodes: 2
Node ID: 0x00000002
Ring ID: 1/1271820
Quorate: Yes
Votequorum information
----------------------
Expected votes: 3
Highest expected: 3
Total votes: 2
Quorum: 2
Flags: Quorate Qdevice
Membership information
----------------------
Nodeid Votes Qdevice Name
0x00000002 1 A,V,NMW 10.0.0.2 (local)
0x00000000 1 Qdevice
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le nombre de vote passe bien à 2 (mais comme on est toujours égal à quorum c’est bon) et le node 1 a bien disparu :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/08/pve_down_quorate.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et la petite déception, pas de visualisation en console du vote du quorum, malgré la mention &amp;ldquo;Quorate&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Mais bon, c’est quand même cool que ça marche, et en vrai c’est bien l’essentiel ;)&lt;/p&gt;
&lt;h2 id="bonus--erreur-insserv-fatal-service-corosync-has-to-be-enabled"&gt;Bonus : Erreur insserv: FATAL: service corosync has to be enabled
&lt;/h2&gt;&lt;p&gt;Si vous rencontrez l’erreur suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;insserv: FATAL: service corosync has to be enabled to use service corosync-qdevice
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Allez supprimer le fichier d’init SysV corosync sur tous les hôtes&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;rm /etc/init.d/corosync-qdevice
systemctl enable corosync-qdevice
systemctl start corosync-qdevice
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Source : &lt;a class="link" href="https://forum.proxmox.com/threads/setting-up-qdevice-fails.56061/" target="_blank" rel="noopener"
&gt;https://forum.proxmox.com/threads/setting-up-qdevice-fails.56061/&lt;/a&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></channel></rss>