Date: Mon, 13 Jun 2011 14:15:08 GMT From: Rene Ladan <rene@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 194675 for review Message-ID: <201106131415.p5DEF8Ld054510@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@194675?ac=10 Change 194675 by rene@rene_acer on 2011/06/13 14:15:04 handbook/disks: finish update modulo spellcheck Affected files ... .. //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#26 edit Differences ... ==== //depot/projects/docproj_nl/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml#26 (text+ko) ==== @@ -4910,12 +4910,265 @@ <programlisting>hastd_enable="YES"</programlisting> - <!--rene hier--> + <sect3> + <title>Failover-configuratie</title> + + <para>Het doel van dit voorbeeld is om een robuust opslagsysteem te + bouwen dat resistent is tegen het falen van alle knooppunten. De + hoofdtaak is het oplossen van een scenario waarin een + <literal>primair</literal> knooppunt van het cluster faalt. Mocht dit + gebeuren, dan neemt het <literal>secundaire</literal> knooppunt het + feilloos over, controleert en koppelt het het bestandssysteem aan, en + gaat het verder zonder dat er een bit aan gegevens ontbreekt.</para> + + <para>Om deze taak voor elkaar te krijgen, is het nodig om een andere + eigenschap te gebruiken die beschikbaar is op &os; en dat voorziet in + automatische failover van de IP-laag — <acronym>CARP</acronym>. + <acronym>CARP</acronym> staat voor Common Address Redundancy Protocol + en maakt het mogelijk dat meerdere hosts in hetzelfde netwerksegment + een IP-adres delen. Stel <acronym>CARP</acronym> in op beide + knooppunten van het cluster volgens de documentatie die beschikbaar is + in <xref linkend="carp">. Nadat deze taak voltooid is, zou elk + knooppunt een eigen interface <devicename>carp0</devicename> met een + gedeeld IP-adres <replaceable>172.16.0.254</replaceable> moeten + hebben. Het primaire <acronym>HAST</acronym>-knooppunt van het + cluster moet het meester-<acronym>CARP</acronym>-knooppunt + zijn.</para> + + <para>De <acronym>HAST</acronym>-pool die in de vorige sectie is gemaakt + is nu klaar om geëxporteerd te worden naar de andere hosts op het + netwerk. Dit kan gedaan worden door het te exporteren over + <acronym>NFS</acronym>, <application>Samba</application>, etc., door + gebruik te maken van het gedeelde IP-adres + <replaceable>172.16.0.254</replaceable>. Het enige overgebleven + probleem is een automatische failover in het geval dat het primaire + knooppunt het begeeft.</para> + + <para>Als een <acronym>CARP</acronym>-interface aan- of uitgaat, + genereert &os; een &man.devd.8;-gebeurtenis, wat het mogelijk maakt om + toestandsveranderingen op de <acronym>CARP</acronym>-interfaces in de + gaten te houden. Een toestandsverandering op het + <acronym>CARP</acronym>-interface geeft aan dat een van de knooppunten + het begaf of weer online kwam. In zulke gevallen is het mogelijk om + een script te draaien dat automatisch de failover afhandelt.</para> + + <para>Om de toestandsverandering op de + <acronym>CARP</acronym>-interfaces af te vangen, dient de volgende + configuratie te worden toegevoegd aan het bestand + <filename>/etc/devd.conf</filename> op elk knooppunt:</para> + + <programlisting>notify 30 { + match "system" "IFNET"; + match "subsystem" "carp0"; + match "type" "LINK_UP"; + action "/usr/local/sbin/carp-hast-switch master"; +}; + +notify 30 { + match "system" "IFNET"; + match "subsystem" "carp0"; + match "type" "LINK_DOWN"; + action "/usr/local/sbin/carp-hast-switch slave"; +};</programlisting> + + <para>Draai het volgende commando op beide knooppunten om de nieuwe + configuratie te laten gelden:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/devd restart</userinput></screen> + + <para>Als het interface <devicename>carp0</devicename> aan of uit gaat + (i.e. de toestand van het interface verandert), genreert het systeem + een notificatie wat het subsysteem &man.devd.8; in staat stelt om een + willekeurig script te draaien, in dit geval + <filename>/usr/local/sbin/carp-hast-switch</filename>. Dit is het + script dat de automatische failover afhandelt. Raadpleeg de + handleidingpagina &man.devd.conf.5; voor verdere uitleg over de + bovenstaande configuratie van &man.devd.8;.</para> + + <para>Het volgende zou een voorbeeld van zo'n script kunnen zijn:</para> + + <programlisting>#!/bin/sh +# Origineel script door Freddie Cash <fjwcash@gmail.com> +# Gewijzigd door Michael W. Lucas <mwlucas@BlackHelicopters.org> +# en Viktor Petersson <vpetersson@wireload.net> + +# De namen van de HAST-hulpbronnen, zoals vermeld in /etc/hast.conf +resources="test" + +# vertraging voor het aankoppelen van de HAST-hulpbron na het worden van meester +# doe een gok +delay=3 + +# logging +log="local0.debug" +name="carp-hast" + +# einde van gebruiker-instelbare dingen + +case "$1" in + master) + logger -p $log -t $name "Omschakelen naar primaire aanbieder voor ${resources}." + sleep ${delay} + + # Wacht totdat de "hastd secondary" processen zijn gestopt + for disk in ${resources}; do + while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do + sleep 1 + done + + # Verwissel de rol voor elke schijf + hastctl role primary ${disk} + if [ $? -ne 0 ]; then + logger -p $log -t $name "Omschakelen van rol naar primair voor hulpbron ${disk} mislukt." + exit 1 + fi + done + + # Wacht totdat de apparaten /dev/hast/* verschijnen + for disk in ${resources}; do + for I in $( jot 60 ); do + [ -c "/dev/hast/${disk}" ] && break + sleep 0.5 + done + + if [ ! -c "/dev/hast/${disk}" ]; then + logger -p $log -t $name "GEOM-aanbieder /dev/hast/${disk} is niet verschenen." + exit 1 + fi + done + + logger -p $log -t $name "Rollen van HAST-hulpbronnen ${resources} omgeschakeld naar primair." + + + logger -p $log -t $name "Schijven aankoppelen." + for disk in ${resources}; do + mkdir -p /hast/${disk} + fsck -p -y -t ufs /dev/hast/${disk} + mount /dev/hast/${disk} /hast/${disk} + done + + ;; + + slave) + logger -p $log -t $name "Omschakelen naar secundaire aanbieder voor ${resources}." + + # Schakel de rollen van de HAST-hulpbronnen om + for disk in ${resources}; do + if ! mount | grep -q "^/dev/hast/${disk} on " + then + else + umount -f /hast/${disk} + fi + sleep $delay + hastctl role secondary ${disk} 2>&1 + if [ $? -ne 0 ]; then + logger -p $log -t $name "Omschakelen van rol naar secundair voor hulpbron ${disk} mislukt." + exit 1 + fi + logger -p $log -t $name "Rol van hulpbron ${disk} omgeschakeld naar secundair." + done + ;; +esac</programlisting> + + <para>In een notendop doet het script het volgende wanneer een knooppunt + <literal>meester</literal> / <literal>primair</literal> wordt:</para> + + <itemizedlist> + <listitem> + <para>De <acronym>HAST</acronym>-pools opwaarderen naar primair op + een gegeven knooppunt.</para> + </listitem> + + <listitem> + <para>Het bestandssysteem onder de <acronym>HAST</acronym>-pool + controleren.</para> + </listitem> + + <listitem> + <para>De pools op de juiste plaats aankoppelen.</para> + </listitem> + </itemizedlist> + + <para>Wanneer een knooppunt <literal>backup</literal> / + <literal>secundair</literal> wordt:</para> + + <itemizedlist> + <listitem> + <para>De <acronym>HAST</acronym>-pools afkoppelen.</para> + </listitem> + + <listitem> + <para>De <acronym>HAST</acronym>-pools degraderen naar + secundair.</para> + </listitem> + </itemizedlist> + + <caution> + <para>Houd in gedachte dat dit slechts een voorbeeldscript is dat + dienst doet om aan te tonen dat alles werkt. Het behandeld niet + alle mogelijke situaties en kan op elke manier worden uitgebreid of + veranderd, het kan bijvoorbeeld benodigde diensten starten en + stoppen.</para> + </caution> + + <tip> + <para>Voor het doel van dit voorbeeld hebbwn we een standaard + UFS-bestandssysteem gebruikt. Om de tijd die nodig is voor herstel + te verkorten, kan een bestandssysteem met UFS-journalling of ZFS + worden gebruikt.</para> + </tip> + + <para>Meer gedetailleerde informatie met aanvullende voorbeelden kunnen + gevonden worden op de <ulink + url="http://wiki.FreeBSD.org/HAST">HAST Wiki</ulink>-pagina.</para> + </sect3> + </sect2> + + <sect2> + <title>Problemen oplossen</title> + + <sect3> + <title>Algemene tips om problemen op te lossen</title> + + <para><acronym>HAST</acronym> zou over het algemeen zonder problemen + moeten werken, maar net als met elk ander software-product zijn er + momenten waarop het anders werkt dan het zou moeten. De oorzaken van + de problemen kunnen verschillen, maar de vuistregel is om ervoor te + zorgen dat de klokken zijn gesynchroniseerd op alle knooppunten in het + cluster.</para> + + <para>Het debug-niveau van &man.hastd.8; dient verhoogd te worden + wanneer problemen met <acronym>HAST</acronym> worden verholpen. Dit + kan gedaan worden door het daemon &man.hastd.8; met het argument + <literal>-d</literal> op te starten. Merk op dat dit argument + meerdere malen kan worden opgegeven om het debug-niveau nog verder op + te hogen. Op deze manier kan veel nuttige informatie worden vergaard. + Het is ook de moeite te overwegen om het argument + <literal>-F</literal> te gebruiken, dat het daemon &man.hastd.8; in de + voorgrond zal starten.</para> + </sect3> + <sect3 id="disks-hast-sb"> <title>Herstellen van de Split-brain-conditie</title> - <para/> - <!--placeholder--> + <para>Het gevolg van de situatie waarin beide knooppunten van het + cluster niet met elkaar kunnen communiceren en beide als primaire + knooppunten zijn ingesteld wordt <literal>split-brain</literal> + genoemd. Dit is een gevaarlijke situatie omdat het beide knooppunten + in staat stelt om incompatibele veranderingen aan de gegevens te + maken. Deze situatie dient handmatig door de systeembeheerder te + worden afgehandeld.</para> + + <para>Om deze situatie op te lossen moet de beheerder besluiten welk + knooppunt de belangrijkere veranderingen bevat (of ze handmatig + samenvoegen) en <acronym>HAST</acronym> de volledige synchronisatie + op het knooppunt dat de kapotte gegevens heeft laten uitvoeren. Voer + hiervoor de volgende commando's uit op het knooppunt dat opnieuw + gesynchroniseert moet worden:</para> + + <screen>&prompt.root; <userinput>hastctl role init <resource></userinput> +&prompt.root; <userinput>hastctl create <resource></userinput> +&prompt.root; <userinput>hastctl role secondary <resource></userinput></screen> </sect3> </sect2> </sect1>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106131415.p5DEF8Ld054510>