{"id":60,"date":"2007-12-30T00:00:00","date_gmt":"2007-12-30T00:00:00","guid":{"rendered":"http:\/\/netexpertise\/fr\/?p=60"},"modified":"2021-10-16T07:39:31","modified_gmt":"2021-10-16T06:39:31","slug":"heartbeat-2-mise-en-oeuvre","status":"publish","type":"post","link":"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html","title":{"rendered":"Heartbeat 2: Mise en oeuvre"},"content":{"rendered":"<div style=\"float: left; margin-right: 15px; margin-top: 0px;\"><script async=\"\" src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script><br \/>\n<!-- 200x200, Netexpertise --><br \/>\n<ins class=\"adsbygoogle\" style=\"display: inline-block; width: 200px; height: 200px;\" data-ad-client=\"ca-pub-6495750100906580\" data-ad-slot=\"1946825373\"><\/ins><br \/>\n<script><br \/>\n(adsbygoogle = window.adsbygoogle || []).push({});<br \/>\n<\/script><\/div>\n<p>Note importante:<br \/>\n<a href=\"http:\/\/www.linux-ha.org\/wiki\/Site_news\">Heartbeat<\/a> est maintenant obsol\u00e8te et a migr\u00e9 vers une nouvelle stack disponible sur&nbsp;<a href=\"https:\/\/clusterlabs.org\">Clusterlabs<\/a>. Pour un projet de haute disponibilit\u00e9 simple utilisant une IP virtuelle, essayez keepalived qui fait la surveillance et la bascule juste avec un simple fichier de configuration.<\/p>\n<p>Depuis sa version 2, Heartbeat est capable de g\u00e9rer plus de 2 noeuds, et surtout n&rsquo;a plus besoin de l&rsquo;utilitaire \u00ab\u00a0<a href=\"http:\/\/www.kernel.org\/software\/mon\/\">mon<\/a>\u00a0\u00bb pour la surveillance des services. Cette fonctionnalit\u00e9 est directement int\u00e9gr\u00e9e. Par cons\u00e9quent, la hausse du nombre de possibilit\u00e9s a complexifi\u00e9 la configuration de Heartbeat. Il est \u00e0 noter que les fichiers version 1 sont toujours suport\u00e9s.<\/p>\n<h3>Installation<\/h3>\n<p>Les sources de Heartbeat sont disponibles sur le site officiel <a href=\"http:\/\/www.linux-ha.org\">http:\/\/www.linux-ha.org<\/a>. Des rpms compatibles Redhat Enterprise sont t\u00e9l\u00e9chargeables depuis le site de Centos (lien inclus sur le site Heartbeat). Les packages sont mis \u00e0 jour relativement vite puisque la version source est la 2.1.0 alors que le rpm est la 2.0.8-2 lors de cette installation. 3 rpms sont n\u00e9cessaires:<\/p>\n<p>heartbeat-pils<br \/>\nheartbeat-stonith<br \/>\nheartbeat<\/p>\n<p>Le service monitor\u00e9 sera Apache mais la configuration reste valide pour n&rsquo;importe quel autre service: mail, bases de donn\u00e9es, DNS, DHCP, serveurs de fichiers, etc&#8230;<\/p>\n<h3>Sch\u00e9ma<\/h3>\n<h4>Failover ou load-balancing<\/h4>\n<p>Heartbeat supporte les mod\u00e8les Actif-Passif pour le failover et Actif-Actif pour le load-balancing. De nombreuses autres configurations sont possibles en ajoutant des serveurs et\/ou services; Les possibilit\u00e9s sont \u00e9normes.<br \/>\nNous traiterons du load-balancing ici, seules quelques lignes devront \u00eatre supprim\u00e9es pour le failover.<\/p>\n<div style=\"text-align: center;\">\n<table style=\"width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 20%;\"><\/td>\n<td><img src=\"\/images\/Heartbeat-Failover.png\" alt=\"Failover\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<td><img src=\"\/images\/Heartbeat-Loadbalancing.png\" alt=\"Load-balancing\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Configuration<\/h3>\n<p>Dans cette configuration, les 2 serveurs sont interconnect\u00e9s via leur interface eth0. Les flux applicatifs arrivent sur eth1, laquelle est configu\u00e9e comme dans le sch\u00e9ma ci-dessus, avec les adresses 192.168.0.4 et .5 Les adresses sur eth0 doivent appartenir \u00e0 un sous-r\u00e9seau d\u00e9di\u00e9 \u00e0 Heartbeat. Ces adresses doivent appara\u00eetre dans \/etc\/hosts sur chaque noeud.<br \/>\n3 fichiers sont n\u00e9cessaires \u00e0 la configuration de Heartbeat 2. Ils doivent \u00eatre identiques sur tous les noeuds.<\/p>\n<p>Sous \/etc\/ha.d\/<br \/>\n&#8211; ha.cf<br \/>\n&#8211; authkeys<br \/>\nSous \/var\/lib\/heartbeat\/crm\/<br \/>\n&#8211; cib.xml<\/p>\n<p><strong>ha.cf<\/strong><br \/>\nha.cf contient les param\u00e8tres g\u00e9n\u00e9raux tels que les noeuds du cluster ou la topologie des communications.<\/p>\n<pre>use_logd on\n<em style=\"color: #ff0000;\"># Fr\u00e9quence d'envoi des paquets Heartbeat<\/em>\nkeepalive 500ms <em style=\"color: #ff0000;\"># secondes - Sp\u00e9cifier ms pour des temps inf\u00e9rieur \u00e0 1 seconde<\/em>\n<em style=\"color: #ff0000;\"># Laps de temps apr\u00e8s lequel un noeud est consid\u00e9r\u00e9 \"mort\"<\/em>\ndeadtime 2\n<em style=\"color: #ff0000;\"># Envoi d'un message warning<\/em>\n<em style=\"color: #ff0000;\"># Important pour ajuster la valeur deadtime<\/em>\nwarntime 1\n<em style=\"color: #ff0000;\"># Identique \u00e0 deadtime mais lors de l'initialisation<\/em>\ninitdead 8\nupdport 694\n<em style=\"color: #ff0000;\"># Test du host pour v\u00e9rifier que le host est toujours en ligne<\/em>\n<em style=\"color: #ff0000;\"># La passerelle par d\u00e9faut en g\u00e9n\u00e9ral<\/em>\nping 192.168.0.1\n<em style=\"color: #ff0000;\"># Interface sur laquelle les \"Heartbeats\" sont envoy\u00e9s<\/em>\n<em style=\"color: #ff0000;\"># Utiliser \"serial\" pour un port s\u00e9rie,<\/em>\n<em style=\"color: #ff0000;\"># \"mcast\" et \"ucast\" respectivement pour multicast et unicast<\/em>\nbcast eth0\n<em style=\"color: #ff0000;\"># La resource bascule sur le noeud primaire d\u00e8s qu'il redevient disponible<\/em>\nauto_failback on\n<em style=\"color: #ff0000;\"># Liste des noeuds faisant partie du cluster<\/em>\nnode n1.domain.com\nnode n2.domain.com\n<em style=\"color: #ff0000;\"># Activer la config Heartbeat 2<\/em>\ncrm yes\n<em style=\"color: #ff0000;\"># Permet d'ajouter un nouveau en live sans reconfigurer les anciens noeuds<\/em>\nautojoin any\n<\/pre>\n<p>D&rsquo;autres options sont disponibles telles que la compression ou le d\u00e9bit pour la communication sur cable s\u00e9rie. Consulter <a href=\"http:\/\/linux-ha.org\/ha.cf\">http:\/\/linux-ha.org\/ha.cf<\/a><\/p>\n<p><strong>authkeys<\/strong><\/p>\n<p>Authkeys permet de d\u00e9finir les cl\u00e9s d&rsquo;authentification. Plusieurs types sont disponibles: crc, md5 et sha1. crc est \u00e0 utiliser sur un r\u00e9seau qui est d\u00e9j\u00e0 s\u00e9curis\u00e9 (vlan isol\u00e9 ou cable crois\u00e9. sha1 offre un niveau de s\u00e9curit\u00e9 haute mais consomme beaucoup de ressource processeur. md5 est un interm\u00e9diaire tout-\u00e0-fait satisfaisant.<\/p>\n<pre>auth 1\n1 md5 secret\n<\/pre>\n<p>Le mot de passe est stock\u00e9 en clair, il est important de changer les permissions du fichier avec un chmod 600.<\/p>\n<p><strong>cib.xml<\/strong><\/p>\n<pre> &lt;cib&gt;\n   &lt;configuration&gt;\n     &lt;crm_config\/&gt;\n     &lt;nodes\/&gt;\n     &lt;resources&gt;\n       &lt;group id=\"server1\"&gt;\n         &lt;primitive class=\"ocf\" id=\"IP1\" provider=\"heartbeat\" type=\"IPaddr\"&gt;\n           &lt;operations&gt;\n             &lt;op id=\"IP1_mon\" interval=\"10s\" name=\"monitor\" timeout=\"5s\"\/&gt;\n           &lt;\/operations&gt;\n           &lt;instance_attributes id=\"IP1_inst_attr\"&gt;\n             &lt;attributes&gt;\n               &lt;nvpair id=\"IP1_attr_0\" name=\"ip\" value=\"192.168.0.2\"\/&gt;\n               &lt;nvpair id=\"IP1_attr_1\" name=\"netmask\" value=\"24\"\/&gt;\n               &lt;nvpair id=\"IP1_attr_2\" name=\"nic\" value=\"eth1\"\/&gt;\n             &lt;\/attributes&gt;\n           &lt;\/instance_attributes&gt;\n         &lt;\/primitive&gt;\n         &lt;primitive class=\"lsb\" id=\"apache1\" provider=\"heartbeat\" type=\"apache\"&gt;\n           &lt;operations&gt;\n             &lt;op id=\"apache1_mon\" interval=\"30s\" name=\"monitor\" timeout=\"20s\"\/&gt;\n           &lt;\/operations&gt;\n         &lt;\/primitive&gt;\n       &lt;\/group&gt;\n       &lt;group id=\"server2\"&gt;\n         &lt;primitive class=\"ocf\" id=\"IP2\" provider=\"heartbeat\" type=\"IPaddr\"&gt;\n           &lt;operations&gt;\n             &lt;op id=\"IP2_mon\" interval=\"10s\" name=\"monitor\" timeout=\"5s\"\/&gt;\n           &lt;\/operations&gt;\n           &lt;instance_attributes id=\"IP2_inst_attr\"&gt;\n             &lt;attributes&gt;\n               &lt;nvpair id=\"IP2_attr_0\" name=\"ip\" value=\"192.168.0.3\"\/&gt;\n               &lt;nvpair id=\"IP2_attr_1\" name=\"netmask\" value=\"24\"\/&gt;\n               &lt;nvpair id=\"IP2_attr_2\" name=\"nic\" value=\"eth1\"\/&gt;\n             &lt;\/attributes&gt;\n           &lt;\/instance_attributes&gt;\n         &lt;\/primitive&gt;\n         &lt;primitive class=\"lsb\" id=\"apache2\" provider=\"heartbeat\" type=\"apache\"&gt;\n           &lt;operations&gt;\n             &lt;op id=\"apache2_mon\" interval=\"30s\" name=\"monitor\" timeout=\"20s\"\/&gt;\n           &lt;\/operations&gt;\n         &lt;\/primitive&gt;\n       &lt;\/group&gt;\n     &lt;\/resources&gt;\n     &lt;constraints&gt;\n       &lt;rsc_location id=\"location_server1\" rsc=\"server1\"&gt;\n         &lt;rule id=\"best_location_server1\" score=\"100\"&gt;\n           &lt;expression_attribute=\"#uname\" id=\"best_location_server1_expr\" operation=\"eq\" value=\"n1.domain.com\"\/&gt;\n         &lt;\/rule&gt;\n       &lt;\/rsc_location&gt;\n       &lt;rsc_location id=\"location_server2\" rsc=\"server2\"&gt;\n         &lt;rule id=\"best_location_server2\" score=\"100\"&gt;\n           &lt;expression_attribute=\"#uname\" id=\"best_location_server2_expr\" operation=\"eq\" value=\"n2.domain.com\"\/&gt;\n         &lt;\/rule&gt;\n       &lt;\/rsc_location&gt;\n       &lt;rsc_location id=\"server1_connected\" rsc=\"server1\"&gt;\n         &lt;rule id=\"server1_connected_rule\" score=\"-INFINITY\" boolean_op=\"or\"&gt;\n           &lt;expression id=\"server1_connected_undefined\" attribute=\"pingd\" operation=\"not_defined\"\/&gt;\n           &lt;expression id=\"server1_connected_zero\" attribute=\"pingd\" operation=\"lte\" value=\"0\"\/&gt;\n         &lt;\/rule&gt;\n       &lt;\/rsc_location&gt;\n       &lt;rsc_location id=\"server2_connected\" rsc=\"server2\"&gt;\n         &lt;rule id=\"server2_connected_rule\" score=\"-INFINITY\" boolean_op=\"or\"&gt;\n           &lt;expression id=\"server2_connected_undefined\" attribute=\"pingd\" operation=\"not_defined\"\/&gt;\n           &lt;expression id=\"server2_connected_zero\" attribute=\"pingd\" operation=\"lte\" value=\"0\"\/&gt;\n         &lt;\/rule&gt;\n       &lt;\/rsc_location&gt;\n     &lt;\/constraints&gt;\n   &lt;\/configuration&gt;\n &lt;\/cib&gt;\n<\/pre>\n<p>Il est possible de g\u00e9n\u00e9rer ce fichier depuis le fichier de configuration Heartbeat1, haresources situ\u00e9 dans \/etc\/ha.d\/, gr\u00e0ce \u00e0 la commande suivante:<br \/>\npython \/usr\/lib\/heartbeat\/haresources2cib.py &gt; \/var\/lib\/heartbeat\/crm\/cib.xml<br \/>\nDe mani\u00e8re globale, le fichier se d\u00e9compose en 2 parties: les ressources et les contraintes.<\/p>\n<p><strong>Ressources<\/strong><\/p>\n<p>Les ressources sont organis\u00e9es sous forme de groupes (server1 &amp; 2) rassemblant une adresse IP virtuelle et un service: Apache. Les ressources sont d\u00e9clar\u00e9es avec la syntaxe &lt;primitive&gt; \u00e0 l&rsquo;int\u00e9rieur du groupe. Les groupes sont utiles pour rassembler plusieurs ressources r\u00e9pondant aux m\u00eames contraintes.<\/p>\n<p>La primitive IP1 surveille que l&rsquo;adresse virtuelle 1 est bien joignable. Elle fait appel au script IPaddr de type OCF. Les scripts OCF sont fournis avec Heartbeat et se situent dans l&rsquo;arborescence des rpms. Il est possible de sp\u00e9cifier l&rsquo;adresse virtuelle, son masque de r\u00e9seau ainsi que l&rsquo;interface qui va l&rsquo;accueillir.<br \/>\nLa ressource apache est de type LSB, c&rsquo;est-\u00e0-dire qu&rsquo;elle fait appel \u00e0 un script de d\u00e9marrage situ\u00e9 dans \/etc\/init.d. Le nom du script est entr\u00e9 dans la variable type: type=\u00a0\u00bbnom\u00a0\u00bb. Pour fonctionner avec Heartbeat, le script doit respecter la norme LSB. La norme LSB sp\u00e9cifie entre autres que l&rsquo;on doit pouvoir:<\/p>\n<ul>\n<li>collecter le status du service par \u00ab\u00a0script status\u00a0\u00bb<\/li>\n<li>ex\u00e9cuter un \u00ab\u00a0script start\u00a0\u00bb sur un service d\u00e9j\u00e0 d\u00e9marr\u00e9<\/li>\n<li>arr\u00e9ter un service d\u00e9j\u00e0 arr\u00e9t\u00e9<\/li>\n<\/ul>\n<p>Toutes les sp\u00e9cifications LSB sont disponibles \u00e0 l&rsquo;adresse <a href=\"http:\/\/www.linux-ha.org\/LSBResourceAgent\">http:\/\/www.linux- ha.org\/LSBResourceAgent<\/a><\/p>\n<p>Les temps d\u00e9finissables ici sont:<\/p>\n<ul>\n<li>interval: temps avant qu&rsquo;une action ne soit consid\u00e9r\u00e9e en \u00e9chec et red\u00e9marr\u00e9e<\/li>\n<li>timeout: d\u00e9finit le temps avant qu&rsquo;une action du type start, stop ou status ne soit consid\u00e9r\u00e9e en \u00e9chec<\/li>\n<\/ul>\n<p><strong>Contraintes<\/strong><\/p>\n<p>2 contraintes sont appliqu\u00e9es \u00e0 chaque groupe de ressources:<br \/>\nLa location pr\u00e9f\u00e9r\u00e9e o\u00fb les ressources \u00ab\u00a0devraient\u00a0\u00bb s&rsquo;ex\u00e9cuter. On donne un score de 100 \u00e0 n1.domain.com pour le 1er groupe de ressources. Ainsi, si n1.domain.com est actif, et que l&rsquo;option auto_failback est \u00e0 \u00ab\u00a0on\u00a0\u00bb, les ressources du 1er groupe reviendront toujours sur cette machine.<br \/>\nL&rsquo;action suivant le ping. Si aucun des gateways ne r\u00e9pond aux pings, les ressources sont migr\u00e9es vers un autre serveur, et le noeud est mis en standby.<\/p>\n<p>Le score -INFINITY signifie qu&rsquo;en aucun cas, la machine ne doit accepter les ressources si les gateways sont injoignables.<\/p>\n<h3>Notes importantes<\/h3>\n<p><strong>Droits sur les fichiers<\/strong><\/p>\n<p>Le r\u00e9pertoire \/etc\/ha.cf contient des donn\u00e9es sensibles. Il est obligatoire de changer les droits en lecture\/\u00e9criture pour le propri\u00e9taire &#8211; ou l&rsquo;application ne se lancera pas.<br \/>\nchmod 600 \/etc\/ha.d\/ha.cf<\/p>\n<p>Le fichier \/var\/lib\/heartbeat\/crm\/cib.crm doit appartenir \u00e0 hacluster et au groupe haclient. Il ne doit pas \u00eatre accessible aux autres utilisateurs.<br \/>\nchown hacluster:haclient \/var\/lib\/heartbeat\/crm\/cib.crm<br \/>\nchmod 660 \/var\/lib\/heartbeat\/crm\/cib.crm<\/p>\n<p>Le fichier cib.xml est acc\u00e9d\u00e9 en \u00e9criture par l&rsquo;application Heartbeat. Des fichiers sont cr\u00e9\u00e9s en parall\u00e8le. Si une \u00e9dition manuelle est n\u00e9cessaire, arr\u00e9ter Heartbeat sur tous les noeuds, effacer cib.xml.sig dans le m\u00eame r\u00e9pertoire, \u00e9diter cib.xml sur tous les noeuds, et red\u00e9marrer Heartbeat.<br \/>\nIl faut normalement utiliser la commande crm_resource pour r\u00e9aliser ces modifications (voir section plus bas).<\/p>\n<p><strong>Interfaces<\/strong><\/p>\n<p>Les interfaces o\u00f9 vont r\u00e9sider les adresses virtuelles n&rsquo;ont pas besoin d&rsquo;\u00eatre configur\u00e9es ni d&rsquo;avoir une une adresse physique, th\u00e9oriquement. Cela permettait de r\u00e9duire le nombre d&rsquo;adresses \u00e0 utiliser. L&rsquo;interface doit toutefois \u00eatre activ\u00e9e lors du d\u00e9marrage (Un simple DEVICE=eth1 dans \/etc\/sysconfig\/network-scripts\/ifcfg-eth1 suffit). Les adresses virtuelles sont toujours cr\u00e9\u00e9es en tant que sous-interfaces, ex: eth0:0, m\u00eame dans le cas ou l&rsquo;interface principale n&rsquo;est pas configur\u00e9e.<\/p>\n<p><strong>Fichier hosts<\/strong><\/p>\n<p>Le fichier \/etc\/hosts doit obligatoirement contenir les noms de tous les noeuds faisant partie du cluster. Ces noms doivent \u00eatre identiques \u00e0 la commande &lsquo;uname -n&rsquo;.<\/p>\n<p><strong>D\u00e9marrage des services<\/strong><\/p>\n<p>Heartbeat se charge du d\u00e9marrage d&rsquo;Apache lorsque celui-ci est inactif. Il est pr\u00e9f\u00e9rable de d\u00e9sactiver Apache avec chkconfig par exemple, celui-ci pouvant mettre un certain temps \u00e0 se lancer, Heartbeat pourrait essayer de d\u00e9marrer le service une deuxi\u00e8me fois.<br \/>\nchkconfig httpd off<\/p>\n<p>Un script de d\u00e9marrage est pr\u00e9sent dans \/etc\/init.d\/. Pour lancer Heartbeat, ex\u00e9cuter \u00ab\u00a0\/etc\/init.d\/hearbeat start\u00a0\u00bb. Il est pr\u00e9f\u00e9rable que Heartbeat se lance automatiquement:<br \/>\nchkconfig heartbeat on<\/p>\n<h3>Comportement et tests<\/h3>\n<p>Les actions suivantes permettent de simuler des incidents qui pourraient avoir lieu au quotidien, et alt\u00e9rer le bon fonctionnement du cluster. Le comportement de Heartbeat a \u00e9t\u00e9 \u00e9tudi\u00e9 dans chaque cas.<\/p>\n<p><strong>Arr\u00eat d&rsquo;Apache<\/strong><\/p>\n<p>Le service Heartbeat local va red\u00e9marrer Apache. Si le red\u00e9marrage \u00e9choue, un warning sera ajout\u00e9 dans les logs. Heartbeat n&rsquo;essayera plus de lancer le service. L&rsquo;adresse IP virtuelle reste sur la machine et n&rsquo;est pas migr\u00e9e. Cela dit, l&rsquo;adresse peut \u00eatre migr\u00e9e manuellement avec les outils Heartbeat.<\/p>\n<p><strong>Arr\u00eat ou crash d&rsquo;un serveur<\/strong><\/p>\n<p>Les adresses virtuelles migrent vers les autres serveurs.<\/p>\n<p><strong>Arr\u00eat manuel de Heartbeat sur un noeud<\/strong><\/p>\n<p>Apache est arr\u00eat\u00e9 par Heartbeat. Les adresses virtuelles de la machine sont migr\u00e9es vers les autres serveurs. La proc\u00e9dure normale serait d&rsquo;utiliser la commande crm_standby pour mettre la machine en standby et migrer les ressources.<\/p>\n<p><strong>D\u00e9connexion du cable entre les 2 serveurs<\/strong><\/p>\n<p>Chaque machine se croit \u00ab\u00a0seule\u00a0\u00bb et s&rsquo;approprie les 2 adresses virtuelles. Toutefois, cela ne semblent pas poser de probl\u00e8me puisque le gateway continue d&rsquo;envoyer les paquets \u00e0 l&rsquo;adresse ARP pr\u00e9sente dans sa table. Un ping sur l&rsquo;adresse de broadcast renvoie des duplicats.<\/p>\n<p><strong>D\u00e9connexion de la passerelle<\/strong><\/p>\n<p>Ceci pourrait survenir dans 2 situations:<br \/>\n&#8211; Le gateway est indisponible. Dans ce cas, les 2 noeuds vont supprimer leur adresse IP virtuelle et arr\u00e9ter Apache.<br \/>\n&#8211; La connexion de l&rsquo;un des noeuds au r\u00e9seau est tomb\u00e9e. Les adresses sont migr\u00e9es vers l&rsquo;autre serveur qui a normalement encore acc\u00e8s \u00e0 la passerelle.<\/p>\n<p>Tous les cas envisag\u00e9s permettent de maintenir le syst\u00e8me en vie sauf dans le cas o\u00f9 la passerelle est tomb\u00e9e. Ceci n&rsquo;est plus du ressort du cluster&#8230;<\/p>\n<h3>Outils<\/h3>\n<p>Plusieurs outils sont disponibles pour v\u00e9rifier le comportement de Heartbeat.<\/p>\n<p><strong>Logs<\/strong><\/p>\n<p>Heartbeat utilise le d\u00e9mon logd qui envoie les logs dans le fichier syst\u00e8me \/var\/log\/messages.<\/p>\n<p><strong>Outils Unix<\/strong><\/p>\n<p>Les commandes Unix usuelles peuvent \u00eatre employ\u00e9es. Heartbeat cr\u00e9e des sous-interfaces que l&rsquo;on peut visualiser avec \u00ab\u00a0ifconfig\u00a0\u00bb ou \u00ab\u00a0ip address show\u00a0\u00bb. L&rsquo;\u00e9tat des processus sont visualisables avec les scripts de d\u00e9marrage ou encore la commande \u00ab\u00a0ps\u00a0\u00bb.<\/p>\n<p><strong>Commandes Heartbeat<\/strong><\/p>\n<p>Heartbeat offre une s\u00e9rie de commandes fournies dans le package rpm. Voici les principales:<\/p>\n<ul>\n<li>crmadmin: Permet de g\u00e9rer les managers de noeuds sur chaque machine du cluster.<\/li>\n<li>crm_mon: Pratique et rapide; Permet de visualiser l&rsquo;\u00e9tat des noeuds et ressources.<\/li>\n<li>crm_resource: Fait des requ\u00eates et modifie les donn\u00e9es relatives aux ressources\/services. Possibilit\u00e9 de lister, migrer, d\u00e9sactiver et supprimer des ressources.<\/li>\n<li>crm_verify: Reporte les warnings et erreurs sur le cluster<\/li>\n<li>crm_standby: Migre toutes les ressources d&rsquo;un noeud. Utile lors des mises \u00e0 jour par exemple.<\/li>\n<\/ul>\n<h3>Maintenance<\/h3>\n<p><strong>Arr\u00eat du service<\/strong><\/p>\n<p>Lors d&rsquo;une mise \u00e0 jour ou d&rsquo;un arr\u00eat d&rsquo;Apache, proc\u00e9der comme ceci:<\/p>\n<ul>\n<li>Arr\u00eater Apache sur le noeud 1 et migrer l&rsquo;adresse virtuelle sur le noeud 2:<br \/>\ncrm_standby -U n1.domain.com -v true<\/li>\n<li>Effectuer les mises \u00e0 jour sur n1 puis red\u00e9marrer le noeud:<br \/>\ncrm_standby -U n1.domain.com -v false<\/li>\n<li>Les ressources reviennent automatiquement sur n1 (si cib.xml a bien \u00e9t\u00e9 configur\u00e9)<\/li>\n<\/ul>\n<p>Effectuer la m\u00eame d\u00e9marche sur n2<\/p>\n<p>Rem: La mise en standby de n2 peut \u00eatre faite depuis n1 et vice versa.<\/p>\n<p>Il est possible de mettre les 2 noeuds en standby en m\u00eame temps; Apache sera arr\u00e9t\u00e9 sur les 2 machines et les adresses virtuelles supprim\u00e9es jusqu&rsquo;\u00e0 ce que l&rsquo;on sorte du mode standby.<\/p>\n<p><strong>Reboot de la machine<\/strong><\/p>\n<p>Il n&rsquo;est pas n\u00e9cessaire de mettre le noeud en standby avant un reboot. N\u00e9anmoins, cela est pr\u00e9f\u00e9rable puisque le temps de migration des ressources sera plus court, si l&rsquo;on consid\u00e8re le temps pass\u00e9 \u00e0 d\u00e9tecter que le noeud n&rsquo;est plus disponible.<\/p>\n<p><strong>Remise en service d&rsquo;une ressource<\/strong><\/p>\n<p>Exemple: Apache a plant\u00e9 et ne red\u00e9marre plus, toutes les ressources du groupe sont migr\u00e9es vers le deuxi\u00e8me serveur.<br \/>\nLorsque le probl\u00e8me est r\u00e9solu et que la ressource est \u00e0 nouveau disponible, rev\u00e9rifier l&rsquo;ensemble des ressources par la commande:<br \/>\ncrm_resource &#8211;reprobe (-P)<\/p>\n<p>et r\u00e9initialiser la ressource:<br \/>\ncrm_resource &#8211;cleanup &#8211;resource apache1 (ou crm_resource -C -r apache1).<br \/>\nElle sera automatiquement migr\u00e9 vers son serveur d&rsquo;origine.<\/p>\n<h3>Ajout d&rsquo;une nouvelle machine dans le cluster<\/h3>\n<p><strong>En backup<\/strong><\/p>\n<p>Si le cluster est compos\u00e9 de 2 noeuds connect\u00e9s par un cable crois\u00e9, il faudra d\u00e9sormais un switch pour les interfaces o\u00f9 les \u00ab\u00a0Heartbeats\u00a0\u00bb sont envoy\u00e9s.<br \/>\nIl faut tout d&rsquo;abord ajouter les nouvelles informations relatives au nouveau noeud. Editer le fichier \/etc\/hosts des noeuds existants et y ajouter le hostname du nouveau noeud. Le contenu doit \u00eatre copi\u00e9 sur la nouveau serveur. Configurer Heartbeat de la m\u00eame mani\u00e8re que sur les autres noeuds.<br \/>\nLes fichiers ha.cf doivent contenir l&rsquo;instruction \u00ab\u00a0autojoin any\u00a0\u00bb pour accepter l&rsquo;ajout d&rsquo;un nouveau noeud.<\/p>\n<p>Sur la nouvelle machine, d\u00e9marrer Heartbeat; La machine devrait joindre le cluster automatiquement.<\/p>\n<p>Si ce n&rsquo;est pas le cas, ex\u00e9cuter la commande suivante sur l&rsquo;un des noeuds faisant d\u00e9j\u00e0 partie du cluster:<br \/>\n\/usr\/lib\/heartbeat\/hb_addnode n3.domain.com<br \/>\nLe nouveau noeud ne fait qu&rsquo;office de backup, aucun service n&rsquo;y sera associ\u00e9. Si n1.domain.com passe en mode standby, ses ressources basculerons sur n3. Elles reviendront sur le serveur d&rsquo;origine d\u00e8s que celui-ci sera disponible (la pr\u00e9f\u00e9rence \u00e9tant fix\u00e9e pour ce serveur).<\/p>\n<p><strong>Avec un nouveau service<\/strong><\/p>\n<p>Pour ajouter une 3me IP (associ\u00e9e \u00e0 un troisi\u00e8me Apache), il faut ex\u00e9cuter la proc\u00e9dure ci-dessus puis:<br \/>\n&#8211; Soit stopper Heartbeat sur les 3 serveurs et \u00e9diter les fichiers cib.xml<br \/>\n&#8211; Soit construire des fichiers similaires \u00e0 cib.xml, ne contenant que les ressources et contraintes \u00e0 ajouter, puis les ins\u00e9rer sur le cluster \u00e0 chaud. Ceci est m\u00e9thode pr\u00e9f\u00e9r\u00e9e. Cr\u00e9er les 3 fichiers suivants sur l&rsquo;un des noeuds:<\/p>\n<p>newGroup.xml<\/p>\n<pre>&lt;group id=\"server3\"&gt;\n  &lt;primitive class=\"ocf\" provider=\"heartbeat\" type=\"IPaddr\" id=\"IP3\"&gt;\n    &lt;operations&gt;\n      &lt;op id=\"IP3_mon\" interval=\"5s\" name=\"monitor\" timeout=\"2s\"\/&gt;\n    &lt;\/operations&gt;\n    &lt;instance_attributes id=\"IP3_attr\"&gt;\n      &lt;attributes&gt;\n        &lt;nvpair id=\"IP3_attr_0\" name=\"ip\" value=\"192.168.0.28\"\/&gt;\n        &lt;nvpair id=\"IP3_attr_1\" name=\"netmask\" value=\"29\"\/&gt;\n        &lt;nvpair id=\"IP3_attr_2\" name=\"nic\" value=\"eth1\"\/&gt;\n      &lt;\/attributes&gt;\n    &lt;\/instance_attributes&gt;\n  &lt;\/primitive&gt;\n  &lt;primitive class=\"lsb\" provider=\"heartbeat\" type=\"apache\" id=\"apache3\"&gt;\n    &lt;operations&gt;\n      &lt;op id=\"apache3_mon\" interval=\"5s\" name=\"monitor\" timeout=\"5s\"\/&gt;\n    &lt;\/operations&gt;\n  &lt;\/primitive&gt;\n&lt;\/group&gt;\n<\/pre>\n<p>newLocationConstraint.xml<\/p>\n<pre>&lt;rsc_location id=\"location_server3\" rsc=\"server3\"&gt;\n  &lt;rule id=\"best_location_server3\" score=\"100\"&gt;\n    &lt;expression attribute=\"#uname\" id=\"best_location_server3_expr\" operation=\"eq\" value=\"n3.domain.com\"\/&gt;\n  &lt;\/rule&gt;\n&lt;\/rsc_location&gt;\n<\/pre>\n<p>newPingConstraint.xml<\/p>\n<pre>&lt;rsc_location id=\"server3_connected\" rsc=\"server3\"&gt;\n  &lt;rule id=\"server3_connected_rule\" score=\"-INFINITY\" boolean_op=\"or\"&gt;\n    &lt;expression id=\"server3_connected_undefined\" attribute=\"pingd\" operation=\"not_defined\"\/&gt;\n    &lt;expression id=\"server3_connected_zero\" attribute=\"pingd\" operation=\"lte\" value=\"0\"\/&gt;\n  &lt;\/rule&gt;\n&lt;\/rsc_location&gt;\n<\/pre>\n<p>Ajouter les contraintes de server3<br \/>\ncibadmin -C -o constraints -x newLocationConstraint.xml<br \/>\ncibadmin -C -o constraints -x newPingConstraint.xml<\/p>\n<p>Ajouter les ressources de server3<br \/>\ncibadmin -C -o resources -x newGroup.xml<\/p>\n<p>Les ressources relatives \u00e0 server3 devraient d\u00e9marrer automatiquement.<\/p>\n<p>Note: Les ajouts se font un par un. Si 2 contraintes sont entr\u00e9es dans le m\u00eame fichier, seule la 1re sera prise en compte.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Note importante: Heartbeat est maintenant obsol\u00e8te et a migr\u00e9 vers une nouvelle stack disponible sur&nbsp;Clusterlabs. Pour un projet de haute disponibilit\u00e9 simple utilisant une IP virtuelle, essayez keepalived qui fait la surveillance et la bascule juste avec un simple fichier de configuration. Depuis sa version 2, Heartbeat est capable de g\u00e9rer plus de 2 noeuds, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[10],"tags":[85,91,87,407],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Netexpertise - Heartbeat 2: Mise en oeuvre<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Netexpertise - Heartbeat 2: Mise en oeuvre\" \/>\n<meta property=\"og:description\" content=\"Note importante: Heartbeat est maintenant obsol\u00e8te et a migr\u00e9 vers une nouvelle stack disponible sur&nbsp;Clusterlabs. Pour un projet de haute disponibilit\u00e9 simple utilisant une IP virtuelle, essayez keepalived qui fait la surveillance et la bascule juste avec un simple fichier de configuration. Depuis sa version 2, Heartbeat est capable de g\u00e9rer plus de 2 noeuds, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html\" \/>\n<meta property=\"og:site_name\" content=\"Netexpertise\" \/>\n<meta property=\"article:published_time\" content=\"2007-12-30T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-16T06:39:31+00:00\" \/>\n<meta name=\"author\" content=\"dave\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@netexpertise\" \/>\n<meta name=\"twitter:site\" content=\"@netexpertise\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html\",\"name\":\"Netexpertise - Heartbeat 2: Mise en oeuvre\",\"isPartOf\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\"},\"datePublished\":\"2007-12-30T00:00:00+00:00\",\"dateModified\":\"2021-10-16T06:39:31+00:00\",\"author\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\"},\"breadcrumb\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.netexpertise.eu\/fr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Heartbeat 2: Mise en oeuvre\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/\",\"name\":\"Netexpertise\",\"description\":\"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\",\"name\":\"dave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"caption\":\"dave\"},\"sameAs\":[\"http:\/\/www.netexpertise.eu\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Netexpertise - Heartbeat 2: Mise en oeuvre","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html","og_locale":"fr_FR","og_type":"article","og_title":"Netexpertise - Heartbeat 2: Mise en oeuvre","og_description":"Note importante: Heartbeat est maintenant obsol\u00e8te et a migr\u00e9 vers une nouvelle stack disponible sur&nbsp;Clusterlabs. Pour un projet de haute disponibilit\u00e9 simple utilisant une IP virtuelle, essayez keepalived qui fait la surveillance et la bascule juste avec un simple fichier de configuration. Depuis sa version 2, Heartbeat est capable de g\u00e9rer plus de 2 noeuds, [&hellip;]","og_url":"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html","og_site_name":"Netexpertise","article_published_time":"2007-12-30T00:00:00+00:00","article_modified_time":"2021-10-16T06:39:31+00:00","author":"dave","twitter_card":"summary_large_image","twitter_creator":"@netexpertise","twitter_site":"@netexpertise","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html","url":"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html","name":"Netexpertise - Heartbeat 2: Mise en oeuvre","isPartOf":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#website"},"datePublished":"2007-12-30T00:00:00+00:00","dateModified":"2021-10-16T06:39:31+00:00","author":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632"},"breadcrumb":{"@id":"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.netexpertise.eu\/fr\/systeme\/linux\/heartbeat-2-mise-en-oeuvre.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.netexpertise.eu\/fr"},{"@type":"ListItem","position":2,"name":"Heartbeat 2: Mise en oeuvre"}]},{"@type":"WebSite","@id":"http:\/\/www.netexpertise.eu\/fr\/#website","url":"http:\/\/www.netexpertise.eu\/fr\/","name":"Netexpertise","description":"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632","name":"dave","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","caption":"dave"},"sameAs":["http:\/\/www.netexpertise.eu"]}]}},"_links":{"self":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/60"}],"collection":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/comments?post=60"}],"version-history":[{"count":0,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/60\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}