From owner-p4-projects@FreeBSD.ORG Mon Jun 13 14:15:08 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B32221065672; Mon, 13 Jun 2011 14:15:08 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7577E106566C for ; Mon, 13 Jun 2011 14:15:08 +0000 (UTC) (envelope-from rene@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 62E5A8FC13 for ; Mon, 13 Jun 2011 14:15:08 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p5DEF8Nf054513 for ; Mon, 13 Jun 2011 14:15:08 GMT (envelope-from rene@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p5DEF8Ld054510 for perforce@freebsd.org; Mon, 13 Jun 2011 14:15:08 GMT (envelope-from rene@FreeBSD.org) Date: Mon, 13 Jun 2011 14:15:08 GMT Message-Id: <201106131415.p5DEF8Ld054510@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to rene@FreeBSD.org using -f From: Rene Ladan To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 194675 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jun 2011 14:15:09 -0000 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 @@ hastd_enable="YES" - + + Failover-configuratie + + 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 + primair knooppunt van het cluster faalt. Mocht dit + gebeuren, dan neemt het secundaire knooppunt het + feilloos over, controleert en koppelt het het bestandssysteem aan, en + gaat het verder zonder dat er een bit aan gegevens ontbreekt. + + 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 — CARP. + CARP staat voor Common Address Redundancy Protocol + en maakt het mogelijk dat meerdere hosts in hetzelfde netwerksegment + een IP-adres delen. Stel CARP in op beide + knooppunten van het cluster volgens de documentatie die beschikbaar is + in . Nadat deze taak voltooid is, zou elk + knooppunt een eigen interface carp0 met een + gedeeld IP-adres 172.16.0.254 moeten + hebben. Het primaire HAST-knooppunt van het + cluster moet het meester-CARP-knooppunt + zijn. + + De HAST-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 + NFS, Samba, etc., door + gebruik te maken van het gedeelde IP-adres + 172.16.0.254. Het enige overgebleven + probleem is een automatische failover in het geval dat het primaire + knooppunt het begeeft. + + Als een CARP-interface aan- of uitgaat, + genereert &os; een &man.devd.8;-gebeurtenis, wat het mogelijk maakt om + toestandsveranderingen op de CARP-interfaces in de + gaten te houden. Een toestandsverandering op het + CARP-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. + + Om de toestandsverandering op de + CARP-interfaces af te vangen, dient de volgende + configuratie te worden toegevoegd aan het bestand + /etc/devd.conf op elk knooppunt: + + 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"; +}; + + Draai het volgende commando op beide knooppunten om de nieuwe + configuratie te laten gelden: + + &prompt.root; /etc/rc.d/devd restart + + Als het interface carp0 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 + /usr/local/sbin/carp-hast-switch. 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;. + + Het volgende zou een voorbeeld van zo'n script kunnen zijn: + + #!/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 + + In een notendop doet het script het volgende wanneer een knooppunt + meester / primair wordt: + + + + De HAST-pools opwaarderen naar primair op + een gegeven knooppunt. + + + + Het bestandssysteem onder de HAST-pool + controleren. + + + + De pools op de juiste plaats aankoppelen. + + + + Wanneer een knooppunt backup / + secundair wordt: + + + + De HAST-pools afkoppelen. + + + + De HAST-pools degraderen naar + secundair. + + + + + 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. + + + + 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. + + + Meer gedetailleerde informatie met aanvullende voorbeelden kunnen + gevonden worden op de HAST Wiki-pagina. + + + + + Problemen oplossen + + + Algemene tips om problemen op te lossen + + HAST 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. + + Het debug-niveau van &man.hastd.8; dient verhoogd te worden + wanneer problemen met HAST worden verholpen. Dit + kan gedaan worden door het daemon &man.hastd.8; met het argument + -d 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 + -F te gebruiken, dat het daemon &man.hastd.8; in de + voorgrond zal starten. + + Herstellen van de Split-brain-conditie - - + Het gevolg van de situatie waarin beide knooppunten van het + cluster niet met elkaar kunnen communiceren en beide als primaire + knooppunten zijn ingesteld wordt split-brain + 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. + + Om deze situatie op te lossen moet de beheerder besluiten welk + knooppunt de belangrijkere veranderingen bevat (of ze handmatig + samenvoegen) en HAST 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: + + &prompt.root; hastctl role init <resource> +&prompt.root; hastctl create <resource> +&prompt.root; hastctl role secondary <resource>