MFen 1.302 -> 1.309
Obtained from: The FreeBSD Dutch Documentation Project
This commit is contained in:
parent
2b3583c136
commit
584d246236
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=37367
1 changed files with 673 additions and 3 deletions
|
@ -1,10 +1,10 @@
|
|||
<!--
|
||||
The FreeBSD Dutch Documentation Project
|
||||
|
||||
$FreeBSD$
|
||||
$FreeBSD: doc/nl_NL.ISO8859-1/books/handbook/disks/chapter.sgml,v 1.20 2011/01/29 22:37:20 remko Exp $
|
||||
|
||||
%SOURCE% en_US.ISO8859-1/books/handbook/disks/chapter.sgml
|
||||
%SRCID% 1.302
|
||||
%SRCID% 1.309
|
||||
-->
|
||||
|
||||
<chapter id="disks">
|
||||
|
@ -261,7 +261,9 @@
|
|||
en schijven tot 4 TB. Het formaat van &man.sunlabel.8; is
|
||||
beperkt tot 2^32-1 sectoren per partitie en 8 partities per
|
||||
schijf, in totaal dus 16 TB. Voor grotere schijven kan
|
||||
&man.gpt.8; worden gebruikt.</para>
|
||||
&man.gpart.8; worden gebruikt om <acronym>GPT</acronym>-partities aan te
|
||||
maken. <acronym>GPT</acronym> heeft het bijkomende voordeel dat het niet
|
||||
tot 4 slices beperkt is.</para>
|
||||
|
||||
<sect2>
|
||||
<title>&man.sysinstall.8; gebruiken</title>
|
||||
|
@ -4502,6 +4504,674 @@ Device 1K-blocks Used Avail Capacity
|
|||
</screen>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="disks-hast">
|
||||
<sect1info>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Daniel</firstname>
|
||||
<surname>Gerzo</surname>
|
||||
<contrib>Bijgedragen door </contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Freddie</firstname>
|
||||
<surname>Cash</surname>
|
||||
<contrib>Met informatie van </contrib>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Pawel Jakub</firstname>
|
||||
<surname>Dawidek</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Michael W.</firstname>
|
||||
<surname>Lucas</surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Viktor</firstname>
|
||||
<surname>Petersson</surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<!-- Datum van schrijven: 26 februari 2011 -->
|
||||
</sect1info>
|
||||
|
||||
<title>Highly Available Storage (HAST)</title>
|
||||
|
||||
<indexterm>
|
||||
<primary>HAST</primary>
|
||||
|
||||
<secondary>hoge beschikbaarheid</secondary>
|
||||
</indexterm>
|
||||
|
||||
<sect2>
|
||||
<title>Overzicht</title>
|
||||
|
||||
<para>Hoge beschikbaarheid is een van de hoofdzaken in serieuze zakelijke
|
||||
toepassingen en hoog beschikbare opslag is een sleutelonderdeel in zulke
|
||||
omgevingen. Hoog beschikbare opslag, of <acronym>HAST<remark
|
||||
role="acronym">Highly Available STorage</remark></acronym>, werd
|
||||
ontwikkeld door &a.pjd; als een raamwerk dat transparante opslag van
|
||||
dezelfde gegevens toestaat over fysiek gescheiden machines die verbonden
|
||||
zijn door een TCP/IP-netwerk. <acronym>HAST</acronym> kan gezien worden
|
||||
als een netwerkgebaseerde RAID1 (spiegel) en is vergelijkbaar met het
|
||||
DRBD® opslagsysteem bekend van het GNU/&linux; platform. In
|
||||
combinatie met andere eigenschappen voor hoge beschikbaarheid van &os;
|
||||
zoals <acronym>CARP</acronym> maakt <acronym>HAST</acronym> het mogelijk
|
||||
om een opslagcluster met hoge beschikbaarheid te bouwen dat resistent is
|
||||
tegen falende hardware.</para>
|
||||
|
||||
<para>Na het lezen van deze sectie weet u:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Wat <acronym>HAST</acronym> is, hoe het werkt en welke
|
||||
mogelijkheden het biedt.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Hoe <acronym>HAST</acronym> op &os; te op te zetten en te
|
||||
gebruiken.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Hoe <acronym>CARP</acronym> en &man.devd.8; te integreren om een
|
||||
robuust opslagsysteem te bouwen.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>Voor het lezen van deze sectie dient u:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>De beginselen van &unix; en &os; te begrijpen (<xref
|
||||
linkend="basics">).</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Te weten hoe de netwerkinterfaces en andere kerndeelsystemen van
|
||||
&os; in te stellen (<xref linkend="config-tuning">).</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Netwerken op &os; goed te begrijpen (<xref
|
||||
linkend="network-communication">).</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>&os; 8.1-RELEASE of nieuwer te gebruiken.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>Het <acronym>HAST</acronym>-project werd gesponsord door The &os;
|
||||
Foundation met ondersteuning van <ulink url="http://www.omc.net/">
|
||||
OMCnet Internet Service GmbH</ulink> en <ulink
|
||||
url="http://www.transip.nl/">TransIP BV</ulink>.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Eigenschappen van HAST</title>
|
||||
|
||||
<para>De belangrijkste eigenschappen van <acronym>HAST</acronym> zijn:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Het kan gebruikt worden om I/O-fouten op lokale harde schijven
|
||||
te maskeren.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Agnostisch qua bestandssysteem, dus het staat toe om elk
|
||||
bestandssysteem dat door &os; wordt ondersteund te gebruiken.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Efficiënte en snelle hersynchronisatie, alleen de blokken
|
||||
die zijn veranderd toen een knooppunt uitstond worden
|
||||
gesynchroniseerd.</para>
|
||||
</listitem>
|
||||
|
||||
<!--
|
||||
<listitem>
|
||||
<para>Het heeft verschillende synchronisatiemodi die een snelle
|
||||
failover mogelijk maken.</para>
|
||||
</listitem>
|
||||
-->
|
||||
|
||||
<listitem>
|
||||
<para>Het kan gebruikt worden in reeds uitgerolde omgevingen om
|
||||
aanvullende redundantie toe te voegen.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Samen met <acronym>CARP</acronym>,
|
||||
<application>Heartbeat</application> of andere gereedschappen kan
|
||||
het worden gebruikt om een robuust en duurzaam opslagsysteem te
|
||||
bouwen.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Werking van HAST</title>
|
||||
|
||||
<para>Omdat <acronym>HAST</acronym> synchrone replicatie op blokniveau
|
||||
van elk opslagmedium naar verscheidene machines biedt, heeft het
|
||||
tenminste twee knooppunten (fysieke machines) nodig — het
|
||||
<literal>primaire</literal> (ook bekend als <literal>meester</literal>)
|
||||
knooppunt en het <literal>secundaire</literal> (<literal>slaaf</literal>
|
||||
) knooppunt. Tezamen worden deze twee machines een cluster genoemd.</para>
|
||||
|
||||
<note>
|
||||
<para>HAST is momenteel beperkt tot een totaal van twee
|
||||
clusterknooppunten.</para>
|
||||
</note>
|
||||
|
||||
<para>Aangezien <acronym>HAST</acronym> in een primaire-secundaire
|
||||
configuratie werkt, kan er op elk moment slechts één van
|
||||
de clusterknooppunten actief zijn. Het <literal>primaire</literal>
|
||||
knooppunt, ookwel <literal>actief</literal>, is degene die alle
|
||||
I/O-verzoeken aan apparaten die door <acronym>HAST</acronym> worden
|
||||
beheerd afhandelt. Het <literal>secundaire</literal> knooppunt wordt
|
||||
dan automatisch gesynchroniseerd vanuit het <literal>primaire</literal>
|
||||
knooppunt.</para>
|
||||
|
||||
<para>De fysieke componenten van het <acronym>HAST</acronym>-systeem
|
||||
zijn:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>lokale schijf (op primair knooppunt)</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>schijf op verre machine (secundair knooppunt)</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para><acronym>HAST</acronym> werkt synchroon op blokniveau, wat het
|
||||
transparant maakt voor bestandssystemen en toepassingen.
|
||||
<acronym>HAST</acronym> biedt reguliere GEOM-aanbieders aan in <filename
|
||||
class="directory">/dev/hast/</filename> voor zowel andere
|
||||
gereedschappen als toepassingen, er is dus geen verschil tussen het
|
||||
gebruik van apparaten die door <acronym>HAST</acronym> worden geleverd
|
||||
en rauwe schijven, partities, etc.</para>
|
||||
|
||||
<para>Elke bewerking met betrekking tot schrijven, verwijderen of spoelen
|
||||
wordt naar de plaatselijke schijf en over TCP/IP naar de verre schijf
|
||||
gestuurd. Elke leesbewerking wordt gedaan door de plaatselijke schijf,
|
||||
tenzij de plaatselijke schijf niet actueel is of er een I/O-fout
|
||||
optreed. In zulke gevallen wordt de leesbewerking naar het secundaire
|
||||
knooppunt gestuurd.</para>
|
||||
|
||||
<sect3>
|
||||
<title>Synchronisatie- en replicatiemodi</title>
|
||||
|
||||
<para><acronym>HAST</acronym> probeert om een snel herstel van fouten
|
||||
te leveren. Om deze reden is het heel belangrijk om de
|
||||
synchronisatietijd te verkorten nadat een knooppunt is hersteld van
|
||||
een uitval. Om een snelle synchronisatie te leveren, beheert
|
||||
<acronym>HAST</acronym> op de schijf een bitmap van gebruikte extents
|
||||
en synchroniseert het die alleen tijdens een reguliere synchronisatie
|
||||
(met uitzondering van de initiëe synchronisatie).</para>
|
||||
|
||||
<para>Er zijn vele manieren om synchronisatie af te handelen.
|
||||
<acronym>HAST</acronym> implementeert meerdere replicatiemodi om
|
||||
verschillende synchronisatiemethodes af te handelen:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><emphasis>memsync</emphasis>: rapporteer een schrijfbewerking
|
||||
als voltooid wanneer de plaatselijke schrijfbewerking klaar is en
|
||||
wanneer het verre knooppunt de gegevensaankomst bevestigt, maar
|
||||
voordat het de gegevens daadwerkelijk heeft opgeslagen. De
|
||||
gegevens op het verre knooppunt zullen meteen na het versturen van
|
||||
de bevestiging worden opgeslagen. Deze modus is bedoeld om
|
||||
latency te verminderen en nog steeds een zeer goede
|
||||
betrouwbaarheid te bieden. De replicatiemodus
|
||||
<emphasis>memsync</emphasis> is momenteel niet
|
||||
geïmplementeerd.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><emphasis>fullsync</emphasis>: rapporteer een schrijfbewerking
|
||||
als voltooid wanneer zowel de plaatselijke en de verre
|
||||
schrijfbewerking voltooid zijn. Dit is de veiligste en traagste
|
||||
replicatiemodus. Dit is de standaardmodus.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><emphasis>async</emphasis>: rapporteer de schrijfbewerking als
|
||||
voltooid wanneer de plaatselijke schrijfbewerking klaar is. Dit
|
||||
is de snelste en gevaarlijkste replicatiemodus. Het dient
|
||||
gebruikt te worden wanneer er naar een ver knooppunt wordt
|
||||
gerepliceerd en de latency te hoog is voor andere modi. De
|
||||
replicatiemodus <emphasis>async</emphasis> is momenteel niet
|
||||
geïmplementeerd.</para>
|
||||
</itemizedlist>
|
||||
|
||||
<warning>
|
||||
<para>Momenteel wordt alleen de replicatiemodus
|
||||
<emphasis>fullsync</emphasis> ondersteund.</para>
|
||||
</warning>
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>HAST-configuratie</title>
|
||||
|
||||
<para><acronym>HAST</acronym> heeft ondersteuning voor
|
||||
<literal>GEOM_GATE</literal> nodig om te kunnen functioneren. De kernel
|
||||
<literal>GENERIC</literal> bevat standaard <emphasis>geen</emphasis>
|
||||
<literal>GEOM_GATE</literal>, de laadbare module
|
||||
<filename>geom_gate.ko</filename> is echter beschikbaar in de
|
||||
standaardinstallatie van &os;. Zorg ervoor dat deze module beschikbaar
|
||||
is voor afgeslankte systemen. Het is ook mogelijk om ondersteuning voor
|
||||
<literal>GEOM_GATE</literal> statisch in de kernel te bouwen, door de
|
||||
volgende regel aan het kernelconfiguratiebestand toe te voegen:</para>
|
||||
|
||||
<programlisting>options GEOM_GATE</programlisting>
|
||||
|
||||
<para>Het <acronym>HAST</acronym>-raamwerk bestaat vanuit het
|
||||
besturingssysteem gezien uit verschillende delen:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>het daemon &man.hastd.8; dat verantwoordelijk is voor de
|
||||
gegevenssynchronisatie,</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>het beheerprogramma &man.hastctl.8; voor de gebruikers,</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>het configuratiebestand &man.hast.conf.5;.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>Het volgende voorbeeld beschrijft hoe twee knooppunten in een
|
||||
<literal>meester</literal>-<literal>slaaf</literal> /
|
||||
<literal>primaire</literal>-<literal>secundaire</literal> opstelling te
|
||||
configureren door <acronym>HAST</acronym> te gebruiken om de gegevens
|
||||
tussen de twee te repliceren. De knooppunten worden
|
||||
<literal><replaceable>hasta</replaceable></literal> met IP-adres
|
||||
<replaceable>172.16.0.1</replaceable> en
|
||||
<literal><replaceable>hastb</replaceable></literal> met IP-adres
|
||||
<replaceable>172.16.0.2</replaceable> genoemd. Beide knooppunten hebben
|
||||
een toegewijde harde schijf
|
||||
<devicename>/dev/<replaceable>ad6</replaceable></devicename> van
|
||||
dezelfde grootte om met <acronym>HAST</acronym> te werken. De
|
||||
<acronym>HAST</acronym>-pool (soms ook een hulpbron genoemd, i.e. de
|
||||
GEOM-aanbieder in <filename class="directory">/dev/hast/</filename>)
|
||||
wordt <filename><replaceable>test</replaceable></filename>
|
||||
genoemd.</para>
|
||||
|
||||
<para>Het bestand <filename>/etc/hast.conf</filename> regelt de
|
||||
configuratie van <acronym>HAST</acronym>. Dit bestand dient hetzelfde
|
||||
te zijn op beide knooppunten. Het volgende is de simpelst mogelijke
|
||||
configuratie:</para>
|
||||
|
||||
<programlisting>resource test {
|
||||
on hasta {
|
||||
local /dev/ad6
|
||||
remote 172.16.0.2
|
||||
}
|
||||
on hastb {
|
||||
local /dev/ad6
|
||||
remote 172.16.0.1
|
||||
}
|
||||
}</programlisting>
|
||||
|
||||
<para>Raadpleeg voor geavanceerdere configuraties de handleidingpagina
|
||||
&man.hast.conf.5;.</para>
|
||||
|
||||
<tip>
|
||||
<para>Het is ook mogelijk om hostnamen in de regels met
|
||||
<literal>remote</literal> te gebruiken. Zorg er in dat geval voor dat
|
||||
deze hosts vindbaar zijn, bijvoorbeeld doordat ze zijn gedefinieerd in
|
||||
het bestand <filename>/etc/hosts</filename> of anders in het
|
||||
plaatselijke <acronym>DNS</acronym>.</para>
|
||||
</tip>
|
||||
|
||||
<para>Nu de configuratie op beide knooppunten aanwezig is, is het mogelijk
|
||||
om de <acronym>HAST</acronym>-pool aan te maken. Voer de volgende
|
||||
commando's op beide knooppunten uit om de initiële metagegevens op
|
||||
de plaatselijke schijf te plaatsen en het &man.hastd.8;-daemon te
|
||||
starten:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>hastctl create test</userinput>
|
||||
&prompt.root; <userinput>/etc/rc.d/hastd onestart</userinput>
|
||||
</screen>
|
||||
|
||||
<note>
|
||||
<para>Het is <emphasis>niet</emphasis> mogelijk om GEOM-aanbieders met
|
||||
een bestaand bestandssysteem te gebruiken (i.e. een bestaande opslag
|
||||
omzetten naar een door <acronym>HAST</acronym> beheerde pool), omdat
|
||||
deze procedure wat metagegevens op de aanbieder moet opslaan en er
|
||||
daarvoor niet genoeg beschikbare ruimte is.</para>
|
||||
</note>
|
||||
|
||||
<para>HAST is niet verantwoordelijk voor het kiezen van de rol van een
|
||||
knooppunt (<literal>primair</literal> of <literal>secundair</literal>).
|
||||
De rol van een knooppunt dient door een beheerder of andere software
|
||||
zoals <application>Heartbeat</application> gebruikmakend van
|
||||
&man.hastctl.8; te worden geconfigureerd. Voer het volgende commando
|
||||
uit op het primaire knooppunt (
|
||||
<literal><replaceable>hasta</replaceable></literal>):</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>hastctl role primary test</userinput></screen>
|
||||
|
||||
<para>Voer het volgende, soortgelijke, commando uit op het secundaire
|
||||
knooppunt (<literal><replaceable>hastb</replaceable></literal>):</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>hastctl role secondary test</userinput></screen>
|
||||
|
||||
<caution>
|
||||
<para>Het kan gebeuren dat beide knooppunten niet met elkaar kunnen
|
||||
communiceren en beiden geconfigureerd zijn als primaire knooppunten;
|
||||
het gevolg van deze situatie wordt <literal>split-brain</literal>
|
||||
genoemd. Volg de stappen zoals beschreven in <xref
|
||||
linkend="disks-hast-sb"> om deze situatie op te lossen.</para>
|
||||
</caution>
|
||||
|
||||
<para>Het is mogelijk om met het gereedschap &man.hastctl.8; het resultaat
|
||||
op elk knooppunt te verifiëren:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>hastctl status test</userinput></screen>
|
||||
|
||||
<para>Het belangrijke gedeelte van de uitvoer is de regel met
|
||||
<literal>status</literal> dat voor alle knooppunten
|
||||
<literal>complete</literal> dient te bevatten. Als het
|
||||
<literal>degraded</literal> bevat, is er iets verkeerd gegaan. Op dat
|
||||
moment is de synchronisatie tussen de knooppunten al begonnen. De
|
||||
synchronisatie is compleet wanneer het commando
|
||||
<command>hastctl status</command> 0 bytes aan <literal>dirty</literal>
|
||||
extents rapporteert.</para>
|
||||
|
||||
<para>De laatste stap is het aanmaken van een bestandssysteem op de
|
||||
GEOM-aanbieder
|
||||
<devicename>/dev/hast/<replaceable>test</replaceable></devicename> en
|
||||
het aan te koppelen. Dit moet op het <literal>primaire</literal>
|
||||
knooppunt gebeuren (aangezien
|
||||
<filename>/dev/hast/<replaceable>test</replaceable></filename> alleen
|
||||
op het <literal>primaire</literal> knooppunt verschijnt), en het enkele
|
||||
minuten kan duren afhankelijk van de grootte van de harde schijf:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>newfs -U /dev/hast/test</userinput>
|
||||
&prompt.root; <userinput>mkdir /hast/test</userinput>
|
||||
&prompt.root; <userinput>mount /dev/hast/test /hast/test</userinput></screen>
|
||||
|
||||
<para>Wanneer het <acronym>HAST</acronym>-raamwerk correct is
|
||||
geconfigureerd, betreft de laatste stap het ervoor zorgen dat
|
||||
<acronym>HAST</acronym> automatisch tijdens het opstarten wordt gestart.
|
||||
De volgende regel dient aan het bestand
|
||||
<filename>/etc/rc.conf</filename> te worden toegevoegd:</para>
|
||||
|
||||
<programlisting>hastd_enable="YES"</programlisting>
|
||||
|
||||
<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), genereert 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 hebben 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>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
|
||||
gesynchroniseerd 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>
|
||||
</chapter>
|
||||
|
||||
<!--
|
||||
|
|
Loading…
Reference in a new issue