{"id":2617,"date":"2025-06-20T09:21:23","date_gmt":"2025-06-20T07:21:23","guid":{"rendered":"http:\/\/clark.tipistrani.it\/?p=2617"},"modified":"2025-06-20T09:25:19","modified_gmt":"2025-06-20T07:25:19","slug":"drbd-e-heartbeat-configurazione-su-devuan-5-in-ambiente-di-test","status":"publish","type":"post","link":"http:\/\/clark.tipistrani.it\/?p=2617","title":{"rendered":"DRBD e Heartbeat configurazione su Devuan 5 in ambiente di test"},"content":{"rendered":"<p>In realt\u00e0 la configurazione di DRBD non differisce da quelle precedentemente illustrate, la differenza sostanziale \u00e8 che al posto di lavorare su una scheda fisica da 1 G lavora su una bond a 10 G e si tratta di una differenza che fa moltissimo in fase di migrazione e di sync.<br \/>\nRipeto ancora una volta i files devono essere identici sulle due macchine<\/p>\n<p>cat \/etc\/drbd.conf<br \/>\ninclude &#8220;drbd.d\/global_common.conf&#8221;;<br \/>\ninclude &#8220;drbd.d\/*.res&#8221;;<br \/>\nlasciare inalterato il global_common.conf e scrivere il tutto nelle .res<\/p>\n<p>cat \/etc\/drbd.d\/r0.res<\/p>\n<p>resource r0 {<br \/>\nprotocol C;<\/p>\n<p>handlers {<br \/>\npri-on-incon-degr &#8220;echo o &gt; \/proc\/sysrq-trigger ; halt -f&#8221;;<br \/>\npri-lost-after-sb &#8220;echo o &gt; \/proc\/sysrq-trigger ; halt -f&#8221;;<br \/>\nlocal-io-error &#8220;echo o &gt; \/proc\/sysrq-trigger ; halt -f&#8221;;<br \/>\noutdate-peer &#8220;\/usr\/lib\/heartbeat\/drbd-peer-outdater -t 5&#8221;;<br \/>\npri-lost &#8220;echo pri-lost. Have a look at the log files. | mail -s &#8216;DRBD Alert&#8217; service@intranet.lan&#8221;;<br \/>\nsplit-brain &#8220;echo split-brain. drbdadm &#8212; &#8211;discard-my-data connect $DRBD_RESOURCE ? | mail -s &#8216;DRBD Alert&#8217; service@intranet.lan&#8221;;<br \/>\n}<\/p>\n<p>startup {<br \/>\nwfc-timeout \u00a00;<br \/>\ndegr-wfc-timeout 120; \u00a0\u00a0\u00a0# 2 minutes.<br \/>\n#become-primary-on both;<br \/>\n}<\/p>\n<p>disk {<br \/>\non-io-error \u00a0\u00a0detach;<br \/>\nno-disk-flushes;<br \/>\nno-disk-barrier;<br \/>\nc-plan-ahead 10;<br \/>\nc-fill-target 24M;<br \/>\nc-min-rate 10M;<br \/>\nc-max-rate 100M;<br \/>\n}<\/p>\n<p>net {<br \/>\nmax-buffers \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a036k;<br \/>\nsndbuf-size \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a01024k;<br \/>\nrcvbuf-size \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02048k;<br \/>\n#max-epoch-size 16000;<br \/>\n#max-buffers 16000;<br \/>\n#unplug-watermark 128;<br \/>\n#sndbuf-size 524288;<br \/>\nallow-two-primaries;<br \/>\nafter-sb-0pri discard-zero-changes;<br \/>\nafter-sb-1pri discard-secondary;<br \/>\nafter-sb-2pri disconnect;<br \/>\nrr-conflict disconnect;<br \/>\n}<\/p>\n<p>syncer {<br \/>\n#rate 150M;<br \/>\n#al-extents 1801;<br \/>\n# 3389<br \/>\n}<\/p>\n<p>on marino {<br \/>\ndevice \/dev\/drbd0;<br \/>\ndisk \/dev\/sda7;<br \/>\naddress 172.18.19.245:7778;<br \/>\nmeta-disk internal;<br \/>\n}<\/p>\n<p>on pedretti {<br \/>\ndevice \/dev\/drbd0;<br \/>\ndisk \/dev\/sda7;<br \/>\naddress 172.18.19.246:7778;<br \/>\nmeta-disk internal;<br \/>\n}<br \/>\n}<\/p>\n<p>cat \/etc\/drbd.d\/r1.res<\/p>\n<p>resource r1 {<br \/>\nprotocol C;<\/p>\n<p>handlers {<br \/>\npri-on-incon-degr &#8220;echo o &gt; \/proc\/sysrq-trigger ; halt -f&#8221;;<br \/>\npri-lost-after-sb &#8220;echo o &gt; \/proc\/sysrq-trigger ; halt -f&#8221;;<br \/>\nlocal-io-error &#8220;echo o &gt; \/proc\/sysrq-trigger ; halt -f&#8221;;<br \/>\noutdate-peer &#8220;\/usr\/lib\/heartbeat\/drbd-peer-outdater -t 5&#8221;;<br \/>\npri-lost &#8220;echo pri-lost. Have a look at the log files. | mail -s &#8216;DRBD Alert&#8217; service@intranet.lan&#8221;;<br \/>\nsplit-brain &#8220;echo split-brain. drbdadm &#8212; &#8211;discard-my-data connect $DRBD_RESOURCE ? | mail -s &#8216;DRBD Alert&#8217; service@intranet.lan&#8221;;<br \/>\n}<\/p>\n<p>startup {<br \/>\nwfc-timeout \u00a00;<br \/>\ndegr-wfc-timeout 120; \u00a0\u00a0\u00a0# 2 minutes.<br \/>\n#become-primary-on both;<br \/>\n}<\/p>\n<p>disk {<br \/>\non-io-error \u00a0\u00a0detach;<br \/>\nno-disk-flushes;<br \/>\nno-disk-barrier;<br \/>\nc-plan-ahead 10;<br \/>\nc-fill-target 24M;<br \/>\nc-min-rate 10M;<br \/>\nc-max-rate 100M;<br \/>\n}<\/p>\n<p>net {<br \/>\nmax-buffers \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a036k;<br \/>\nsndbuf-size \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a01024k;<br \/>\nrcvbuf-size \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02048k;<br \/>\n#max-epoch-size 16000;<br \/>\n#max-buffers 16000;<br \/>\n#unplug-watermark 128;<br \/>\n#sndbuf-size 524288;<br \/>\nallow-two-primaries;<br \/>\nafter-sb-0pri discard-zero-changes;<br \/>\nafter-sb-1pri discard-secondary;<br \/>\nafter-sb-2pri disconnect;<br \/>\nrr-conflict disconnect;<br \/>\n}<\/p>\n<p>syncer {<br \/>\n#rate 150M;<br \/>\n#al-extents 1801;<br \/>\n# 3389<br \/>\nafter &#8220;r0&#8221;;<br \/>\n}<\/p>\n<p>on marino {<br \/>\ndevice \/dev\/drbd1;<br \/>\ndisk \/dev\/sda8;<br \/>\naddress 172.18.19.245:7779;<br \/>\nmeta-disk internal;<br \/>\n}<\/p>\n<p>on pedretti {<br \/>\ndevice \/dev\/drbd1;<br \/>\ndisk \/dev\/sda8;<br \/>\naddress 172.18.19.246:7779;<br \/>\nmeta-disk internal;<br \/>\n}<br \/>\n}<\/p>\n<p>Al solito su ambo i nodi:<\/p>\n<pre><span class=\"go\">drbdadm create-md<\/span> all<\/pre>\n<pre><span class=\"go\">drbdadm up all \r\nsu uno solo dei nodi:\r\n<\/span><\/pre>\n<pre><span class=\"go\">drbdadm - - - -overwrite-data-of-peer primary all <\/span><\/pre>\n<p>armarsi di pazienza e nel frattempo configurare heartbeat<\/p>\n<p>apt-get install heartbeat<br \/>\nda notare che heartbeat (deprecato) si porta dietro corosync pacemaker e un sacco di roba inutile, alla fine dell&#8217;installazione apt-get remove &#8211; -purge corosync pacemaker &amp;&amp; apt-get &#8211; -purge -y autoremove in modo da fare pulizia di tutto.<\/p>\n<p>vim \/etc\/ha.d\/authkeys<\/p>\n<p>auth 1<br \/>\n1 una_password<br \/>\nchiudere e cambiare a 600 i permessi del file scp del file su altro nodo nello stesso path.<\/p>\n<p>vim \/etc\/ha.d\/ha.cf<\/p>\n<p>debugfile \/var\/log\/ha-debug<br \/>\nlogfile \/var\/log\/ha-log<br \/>\nlogfacility local0<br \/>\nkeepalive 2<br \/>\ndeadtime 30<br \/>\nwarntime 10<br \/>\ninitdead 120<br \/>\nudpport 694<br \/>\nucast bond0 172.18.19.245<br \/>\nucast xenbr0 192.168.2.245<br \/>\n### Nota Molto Bene! gli IP sono quelli dell&#8217;altro nodo!<br \/>\nauto_failback on<br \/>\nnode marino pedretti<br \/>\n### host name dei due nodi<br \/>\nQuesto \u00e8 l&#8217;unico file differente sui due nodi<br \/>\nvim \/etc\/ha.d\/haresorces<br \/>\n#marino partenza::<br \/>\nmarino xendom::\/etc\/xen\/xen1.cfg \\<br \/>\nMailTo::service@intranet.lan::Transizione_xen1_xen2<br \/>\n#pedretti partenza::<br \/>\npedretti xendom::\/etc\/xen\/xen2.cfg \\<br \/>\nMailTo::service@intranet.lan::Transizione_xen2_xen1<br \/>\nN.B. lo script xendom non \u00e8 farina del mio sacco, ma bens\u00ec il frutto del lavoro e di anni di esperienza dell&#8217;azienda che ci supporta nella realizzazione e gestione dei cluster, quindi non viene pubblicato.<br \/>\nIn sostanza questo script verifica la condizione del DRBD, la condizione dell&#8217;LVM, e con una serie di comandi accende e\/o migra da un nodo all&#8217;altro le VM, un qualcosa di vagamente simile per rendere il concetto lo si pu\u00f2 vedere qui <a href=\"http:\/\/clark.tipistrani.it\/wp-content\/uploads\/2025\/06\/xendom.txt\">xendom<\/a>.<br \/>\nSui volumi DRBD verranno creati i volumi logici con LVM2 per hostare le VM.<\/p>\n<p>Come accennavo nell&#8217;introduzione su come funziona un cluster HA per molte ragioni si pu\u00f2 verificare la necessita&#8217; di mandare offline uno dei due nodi, anche in questo caso l&#8217;onere spetta a heartbeat, in \/usr\/local\/sbin creare i files Master e Slave che contengono rispettivamente:<br \/>\nMaster<br \/>\n#!\/bin\/sh<br \/>\nnome=`basename $0`<br \/>\necho &#8220;conferma passaggio a $nome ?&#8221;<br \/>\nread pippo<br \/>\n[ &#8220;$nome&#8221; = &#8220;Slave&#8221; ] &amp;&amp; \/usr\/share\/heartbeat\/hb_standby<br \/>\n[ &#8220;$nome&#8221; = &#8220;Master&#8221; ] &amp;&amp; \/usr\/share\/heartbeat\/hb_takeover<\/p>\n<p>Slave<br \/>\n#!\/bin\/sh<br \/>\nnome=`basename $0`<br \/>\necho &#8220;conferma passaggio a $nome ?&#8221;<br \/>\nread pippo<br \/>\n[ &#8220;$nome&#8221; = &#8220;Slave&#8221; ] &amp;&amp; \/usr\/share\/heartbeat\/hb_standby<br \/>\n[ &#8220;$nome&#8221; = &#8220;Master&#8221; ] &amp;&amp; \/usr\/share\/heartbeat\/hb_takeover<\/p>\n<p>In altre parole sono identici, solo che a seconda di come vengono eseguiti hanno effetto diverso, vale a dire eseguire sul nodo marino Slave vuol dire migrare le VM su pedretti mentre se eseguo\u00a0 Master le VM di pedretti si spostano su marino, l&#8217;unico onere umano \u00e8 quello di premere un tasto qualsiasi quando viene posto il quesito conferma passaggio a $nome ? in modo da confermare.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre><span class=\"go\"><a href=\"http:\/\/clark.tipistrani.it\/?p=2612\">back<\/a>          <a href=\"http:\/\/clark.tipistrani.it\/?p=2624\">home<\/a>          <a href=\"http:\/\/clark.tipistrani.it\/?p=2629\">next<\/a><\/span><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>In realt\u00e0 la configurazione di DRBD non differisce da quelle precedentemente illustrate, la differenza sostanziale \u00e8 che al posto di lavorare su una scheda fisica da 1 G lavora su una bond a 10 G e si tratta di una differenza che fa moltissimo in fase di migrazione e di sync. Ripeto ancora una volta [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,14,6],"tags":[37,34,35],"class_list":["post-2617","post","type-post","status-publish","format-standard","hentry","category-linux","category-networking","category-work","tag-cluster-2","tag-drbd","tag-heartbeat"],"_links":{"self":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/2617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2617"}],"version-history":[{"count":6,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/2617\/revisions"}],"predecessor-version":[{"id":2657,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/2617\/revisions\/2657"}],"wp:attachment":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2617"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}