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
|
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
|
%SOURCE% en_US.ISO8859-1/books/handbook/disks/chapter.sgml
|
||||||
%SRCID% 1.302
|
%SRCID% 1.309
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<chapter id="disks">
|
<chapter id="disks">
|
||||||
|
@ -261,7 +261,9 @@
|
||||||
en schijven tot 4 TB. Het formaat van &man.sunlabel.8; is
|
en schijven tot 4 TB. Het formaat van &man.sunlabel.8; is
|
||||||
beperkt tot 2^32-1 sectoren per partitie en 8 partities per
|
beperkt tot 2^32-1 sectoren per partitie en 8 partities per
|
||||||
schijf, in totaal dus 16 TB. Voor grotere schijven kan
|
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>
|
<sect2>
|
||||||
<title>&man.sysinstall.8; gebruiken</title>
|
<title>&man.sysinstall.8; gebruiken</title>
|
||||||
|
@ -4502,6 +4504,674 @@ Device 1K-blocks Used Avail Capacity
|
||||||
</screen>
|
</screen>
|
||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</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>
|
</chapter>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
Loading…
Reference in a new issue