<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Best Practices on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/best-practices/</link><description>Recent content in Best Practices on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 18 Apr 2022 12:00:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/best-practices/index.xml" rel="self" type="application/rss+xml"/><item><title>Retrouvez-moi à Devoxx France 2022</title><link>https://blog.zwindler.fr/2022/04/18/retrouvez-moi-a-devoxx-2022/</link><pubDate>Mon, 18 Apr 2022 12:00:00 +0000</pubDate><guid>https://blog.zwindler.fr/2022/04/18/retrouvez-moi-a-devoxx-2022/</guid><description>&lt;img src="https://blog.zwindler.fr/2022/04/devoxx.webp" alt="Featured image of post Retrouvez-moi à Devoxx France 2022" /&gt;&lt;h2 id="jai-10-ans-"&gt;J&amp;rsquo;ai 10 ans 🎶
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.devoxx.fr/" target="_blank" rel="noopener"
&gt;Devoxx France&lt;/a&gt; revient après deux ans de Covid (chaotique pour tout le monde) en présentiel total. Et ce n&amp;rsquo;est pas n&amp;rsquo;importe quelle édition de Devoxx, c&amp;rsquo;est l&amp;rsquo;année des 10 ans !&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne sont pas familiers de cette conférence, Devoxx c&amp;rsquo;est :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Conférence pour développeurs organisée par Quantixx au Palais des Congrès, à Paris. 60 exposants pendant 3 jours. 3000 visiteurs. 260 orateurs, 220 présentations, ateliers et plénières.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et cette fois-ci, je serai présent sur les 3 jours, en particulier le jeudi puisque je donnerai mon talk &amp;ldquo;Ciel, mon Kubernetes mine des bitcoins&amp;rdquo; (&lt;a class="link" href="https://blog.zwindler.fr/talks/2022-ciel-kubernetes-mine-bitcoins/index.html" target="_blank" rel="noopener"
&gt;slides ici, comme d&amp;rsquo;habitude&lt;/a&gt;). &lt;strong&gt;Je donnerai la conférence le jeudi à 14:30 en salle 243&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;en parle dans mon billet sur &lt;a class="link" href="https://blog.zwindler.fr/2022/03/30/combien-temps-pour-preparer-conf/" target="_blank" rel="noopener"
&gt;le temps que je mets à préparer une conférence&lt;/a&gt;, être sélectionné à des conférences, c&amp;rsquo;est compliqué, mais à Devoxx encore plus. Il y a beaucoup de speakers expérimentés et de nombreux talks passionnants en simultanée.&lt;/p&gt;
&lt;p&gt;Je suis donc particulièrement content de faire partie des heureux élus :). Une superbe occasion de revoir (ou rencontrer IRL) des copains des Internets et des anciens collègues (va même falloir faire une liste je crois 😅).&lt;/p&gt;
&lt;h2 id="comment-on-fait-pour-venir-"&gt;Comment on fait pour venir ?
&lt;/h2&gt;&lt;p&gt;Evidemment, il est trop tard pour prendre un billet pour les conférences (ça part en quelques heures), mais cette année il est possible d&amp;rsquo;accéder au salon et aux stands d&amp;rsquo;exposants gratuitement, et même d&amp;rsquo;accéder à certaines conférences, le jeudi soir.&lt;/p&gt;
&lt;p&gt;Seule condition, avoir un billet (gratuit du coup je le répète) pour avoir accès aux stands ou aux BOF (événement terminé).&lt;/p&gt;
&lt;p&gt;Dans tous les cas, que vous ayez un billet conférence, speaker ou &amp;ldquo;salon&amp;rdquo;, n&amp;rsquo;hésitez pas à me pinger sur &lt;a class="link" href="https://bsky.app/profile/zwindler.fr" target="_blank" rel="noopener"
&gt;Bluesky&lt;/a&gt;, Mastodon (@zwindler@framapiaf.org) ou &lt;a class="link" href="https://www.linkedin.com/in/denis-germain/" target="_blank" rel="noopener"
&gt;LinkedIn&lt;/a&gt; si vous voulez me faire un coucou 👋, ça sera avec grand plaisir !&lt;/p&gt;
&lt;h2 id="le-pitch-de-mon-talk"&gt;Le pitch de mon talk
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;A tort ou à raison, Kubernetes s’est imposé, ces 4 dernières années, comme un des nouveaux standards dans la gestion des architectures microservices modernes.&lt;/p&gt;
&lt;p&gt;Cependant cet outil, riche plus que complexe, amène son lot de pièges dans lesquels les débutants ne manqueront pas de tomber… Et ce n’est pas l’apparente facilité apportée par les offres Kubernetes as a Service qui va arranger les choses !&lt;/p&gt;
&lt;p&gt;Après un rapide tour de l’actualité sécurité autour de Kubernetes, je vous donnerai les clés pour éviter de vous faire voler (trop facilement) vos cycles CPU.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Récap’ du RabbitMQ Summit 2019</title><link>https://blog.zwindler.fr/2019/11/05/recap-du-rabbitmq-summit-2019/</link><pubDate>Tue, 05 Nov 2019 12:45:09 +0000</pubDate><guid>https://blog.zwindler.fr/2019/11/05/recap-du-rabbitmq-summit-2019/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/11/20191104_085806.webp" alt="Featured image of post Récap’ du RabbitMQ Summit 2019" /&gt;&lt;h2 id="des-lapins-partout-nous-étions-au-rabbitmq-summit-"&gt;Des lapins partout, nous étions au RabbitMQ Summit !
&lt;/h2&gt;&lt;p&gt;Dimanche soir, je suis arrivé à Londres pour participer, avec deux de mes collègues, au RabbitMQ Summit 2019. Cette journée est dédiée à mon broker de messages préféré, RabbitMQ (et non ce n’est pas Kafka - ceci est un troll gratuit pour mes collègues).&lt;/p&gt;
&lt;p&gt;Pour ceux qui n’auraient pas suivi, &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=rabbitmq" &gt;j’ai déjà écris quelques articles sur le sujet&lt;/a&gt; dont une &lt;a class="link" href="https://blog.zwindler.fr/2019/04/16/suivez-le-lapin-orange-intro-et-bonnes-pratiques-dinfra-rabbitmq/" &gt;introduction si vous débutez&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cette journée a été l’occasion de pouvoir faire le plein de bonnes pratiques, REX, et autres protips pour optimiser nos clusters.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/20191104_084114.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="keynote"&gt;Keynote
&lt;/h2&gt;&lt;p&gt;Sans surprise, la keynote d’introduction était réalisée par des membres de la core team de RabbitMQ (Diana ParraCorbacho et Michael Klishin), qui ont parlé de l’actualité du Broker.&lt;/p&gt;
&lt;p&gt;Une version majeure de RabbitMQ est sortie en octobre (la 3.8) et de nombreuses des features annoncées l’an dernier sont maintenant utilisables.&lt;/p&gt;
&lt;p&gt;Je suis particulièrement enthousiaste à propos des quorum queues et des métriques Prometheus natives, qui sont clairement les deux stars de cette édition, avec plusieurs talks dédiés ou y faisant référence.&lt;/p&gt;
&lt;p&gt;L’ajout de features flags pour faciliter les mises à jours (présents à partir de la 3.7.20+ ou 3.8+) est clairement un autre gros point positif. Michael Klishin a officiellement indiqué que le blue/green deployment n’était désormais plus la seule méthode supportée pour mettre un cluster à jour.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/11/20191104_092344.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;La 3.8 étant maintenant derrière nous (seulement des bugs fix sortiront à partir de maintenant), cap sur la 3.9 !&lt;/p&gt;
&lt;p&gt;Dans les points importants, un travail va être réalisé pour rendre le core de chaque protocole identique. En effet, aujourd’hui, chaque protocole supporté par RabbitMQ est un module spécifique. Une refonte de l’UI est aussi prévue.&lt;/p&gt;
&lt;p&gt;Dans les annonces, une version entreprise (RabbitMQ Entreprise Edition) devrait également voir le jour dans les mois qui viennent. Identique à la version communautaire dans les grandes lignes, elle intégrera des modifications supplémentaires pour faciliter l’hébergement de cluster RabbitMQ inter-connecté sur un WAN ou crossDC. Bien évidemment un support pro fera parti du package.&lt;/p&gt;
&lt;p&gt;Le dernier point abordé, pour le futur, est le gros travail sur le &amp;ldquo;moteur de stockage&amp;rdquo; utilisé par RabbitMQ (pour la configuration et la persistance). Aujourd’hui, ce travail est réalisé par un projet annexe appelé Mnesia. Michael Klishin a insisté sur le fait que même si le code restait pertinent, la base de code était elle vieillissante.&lt;/p&gt;
&lt;p&gt;Un nouveau projet Mnevis avait donc été lancé. Cette réécriture de 0 à pour but de mieux prendre en compte des problématiques multi DC et une meilleure reprise sur incident.&lt;/p&gt;
&lt;p&gt;Même si Mnevis ne sera pas officiellement pas disponible pour tout de suite, (probablement pas avant la version 4) un prototype devrait être disponible avec une version modifiée de RabbitMQ. &lt;a class="link" href="https://github.com/rabbitmq/mnevis" target="_blank" rel="noopener"
&gt;Les sources de Mnevis sont disponibles ici&lt;/a&gt;. On aura certainement plus d’infos au prochain RabbitMQ Summit !&lt;/p&gt;
&lt;h2 id="practical-advice-for-the-care--feeding-of-rabbitmq"&gt;Practical Advice for the Care &amp;amp; Feeding of RabbitMQ
&lt;/h2&gt;&lt;p&gt;La keynote passée, Gavin Roy a présenté un REX sur plus de 10 ans d’utilisation de RabbitMQ en production, avec les pièges dans lesquels lui et son équipes étaient tombés.&lt;/p&gt;
&lt;p&gt;De soucis de code PHP qui ouvrait des connexions éphémères (coûteuses dans RabbitMQ), jusqu’à l’envoi de messages contenant des payloads (alors que AMQP propose d’ajouter des metadata), en passant par des lenteurs dues à des erreurs de configuration, le talk a été riche en bonnes pratiques (ou plutôt, mauvaises pratiques à éviter !).&lt;/p&gt;
&lt;p&gt;Même si certaines erreurs peuvent sembler faciles à éviter (surtout avec le recul), c’est un de mes talks préférés de la journée, avec de nombreuses réflexions à venir, une fois rentré.&lt;/p&gt;
&lt;h2 id="prometheus-export"&gt;Prometheus Export
&lt;/h2&gt;&lt;p&gt;C’est le 2ème gros sujet de la journée. J’ai assisté à la présentation de l’ajout de métriques natives au format &lt;a class="link" href="https://openmetrics.io/" target="_blank" rel="noopener"
&gt;OpenMetrics&lt;/a&gt; directement dans RabbitMQ.&lt;/p&gt;
&lt;p&gt;Un des gros soucis de l’interface de management actuelle et des métriques qu’elle expose est qu’il est nécessaire de disposer de privilèges important pour les consulter. Dans un contexte multi-équipes (ou multitenant), ce n’est pas pratique. Le second est un problème de performance. Actuellement l’interface de management (plugin de RabbitMQ) arrive parfois à saturation, nécessitant en cas de charge plusieurs dizaines de secondes à s’afficher.&lt;/p&gt;
&lt;p&gt;Pour éviter ces soucis, certains d’entre vous utilisent peut être le rabbitmq-exporter, qui récupère les données de la management UI et les expose à Prometheus au format &lt;a class="link" href="https://openmetrics.io/" target="_blank" rel="noopener"
&gt;OpenMetrics&lt;/a&gt;. Cependant, ce client, tributaire de la management UI, est nécessairement également limité en cas de surcharge.&lt;/p&gt;
&lt;p&gt;La vraie solution qui vient de sortir en 3.8 est donc l’exposition native de métriques au format &lt;a class="link" href="https://openmetrics.io/" target="_blank" rel="noopener"
&gt;OpenMetrics&lt;/a&gt;. Cet ajout a &lt;em&gt;a priori&lt;/em&gt; déjà été énormément bénéfique à RabbitMQ et son écosystème, permettant de déceler plusieurs portions de code inefficientes dans le code de RabbitMQ et même dans le code de Erlang (bugs fixés depuis).&lt;/p&gt;
&lt;h2 id="après-déjeuner-2-talks-un-peu-décevant"&gt;Après déjeuner, 2 talks&amp;hellip; un peu décevant&amp;hellip;
&lt;/h2&gt;&lt;p&gt;Les talks suivants (&amp;ldquo;Source oriented exchanges pattern to keep events in order&amp;rdquo; et &amp;ldquo;RabbitMQ MQTT versus EMQX&amp;rdquo;) ne sont pas simples à retranscrire.&lt;/p&gt;
&lt;p&gt;Le premier était très générique, sur la façon de gérer correctement un processus nécessitant que les messages soient traités dans l’ordre.&lt;/p&gt;
&lt;p&gt;Le second, un peu étonnant, comparait RabbitMQ avec un produit concurrent au travers du scope MQTT et sur un usecase très précis.&lt;/p&gt;
&lt;p&gt;Quelques points que j’ai retenu :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;j’ai raté un talk de Wework qui parle de sharding et qui est probablement intéressant à (re)voir (Wework’s &amp;ldquo;good enough&amp;rdquo; order guarantee, je mettrai à jour le lien)&lt;/li&gt;
&lt;li&gt;il existe un outil appelé MZ Tool (???) qui permet de stress-tester vos infrastructures MQTT. Ce dernier peut être piloté par Ansible ou Terraform. J’ai trouvé un projet MZ-Tools qui n’a rien à voir&amp;hellip; Je continue à chercher.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="rabbitmq-at-scale"&gt;RabbitMQ at Scale
&lt;/h2&gt;&lt;p&gt;Partenaires principaux du RabbitMQ Summit, les gens de Code84 (&lt;a class="link" href="https://www.cloudamqp.com/" target="_blank" rel="noopener"
&gt;CloudAMQP&lt;/a&gt;) étaient présents, en nombre ! La société est spécialisée dans l’hébergement de serveurs RabbitMQ, mais aussi de Kafka, PostgreSQL et Mosquitto en mode PaaS. La société est également connue sur son &lt;a class="link" href="https://www.cloudamqp.com/blog/index.html" target="_blank" rel="noopener"
&gt;blog technique pléthorique&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/tweet_rmq.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Lovisa Johansson (qui a écrit la plupart des articles du blog, que je recommande chaudement) et Anders Bälter nous ont présenté le cheminement de leur société depuis 2012. En partant de simples API Heroku et de serveurs AWS, la plateforme hébergement maintenant les serveurs RabbitMQ de milliers de clients, tout en publiant des métriques, des logs, des alertes, vers la plupart des composants SaaS connus.&lt;/p&gt;
&lt;p&gt;Ce talk a aussi été l’occasion de présenter quelques statistiques d’utilisation, notamment sur les moyennes/maximums de métriques comme le nombre de messages par secondes, le nombre de vhosts ou de policy, etc.&lt;/p&gt;
&lt;h2 id="feature-complete-uncovering-the-true-cost-of-different-rabbitmq-features-and-configurations"&gt;Feature complete: uncovering the true cost of different rabbitmq features and configurations
&lt;/h2&gt;&lt;p&gt;Le dernier talk auquel que nous avons vu a été donné par Jack Vanlightly, qui travaille maintenant chez Pivotal (l’éditeur de RabbitMQ).&lt;/p&gt;
&lt;p&gt;Ce talk a été extrêmement riche et mérite d’être revu, à tête reposée.&lt;/p&gt;
&lt;p&gt;Jack Vanlightly a fait une série de bench sur plusieurs types de serveurs, avec diverses compositions de producers/consumers, types d’exchanges et d’autres paramètres moins connus.&lt;/p&gt;
&lt;p&gt;Les cas étaient parfois extrêmes, mais je pense que les différents cas qu’ils illustrent s’avéreront utiles pour tuner des comportements d’apparence anormaux dans des cas réels (quel paramètre tuner en fonction du nombre de consumers ou de la latence du réseau par exemple).&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Malgré notre envie de rester jusqu’au bout, nous devions partir pour arriver à l’heure pour notre vol retour.&lt;/p&gt;
&lt;p&gt;Ce RabbitMQ Summit a été l’occasion de discuter avec d’autres utilisateurs de RabbitMQ et de revoir les bonnes pratiques avec des professionnels qui en hébergent des milliers (600000 connexions actives chez CloudAMQP tout de même !).&lt;/p&gt;
&lt;p&gt;Ça a aussi été l’occasion de voir que nous n’étions pas aussi &amp;ldquo;petits&amp;rdquo; que nous pensions dans notre usage de RabbitMQ, même si nous sommes très loin des limites de l’application dans nos cas d’usage !&lt;/p&gt;
&lt;p&gt;Les joies du Dual Tracks ont fait que nous avons forcément raté certains talks que nous aurions voulu voir&amp;hellip; Heureusement qu’il y aura les vidéos sur YouTube dans quelques jours/semaines !&lt;/p&gt;
&lt;p&gt;A refaire, donc !&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></channel></rss>