MFde: Update the German Documentation set.

This update features the german translation of the HAST section.

doc/de_DE.ISO8859-1/books/handbook/disks/chapter.sgml   1.303 -> 1.306

Obtained from:  The FreeBSD German Documentation Project
This commit is contained in:
Benedict Reuschling 2011-03-13 19:44:08 +00:00
parent 6549aa799b
commit 01914f6de2
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=37068

View file

@ -3,8 +3,8 @@
The FreeBSD German Documentation Project
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/disks/chapter.sgml,v 1.177 2011/03/06 15:51:59 jkois Exp $
basiert auf: 1.303
$FreeBSDde: de-docproj/books/handbook/disks/chapter.sgml,v 1.180 2011/03/13 19:26:47 bcr Exp $
basiert auf: 1.306
-->
<chapter id="disks">
@ -4488,14 +4488,695 @@ Device 1K-blocks Used Avail Capacity
</sect1>
<sect1 id="disks-hast">
<title>Highly Available Storage (HAST)</title>
<sect1info>
<authorgroup>
<author>
<firstname>Daniel</firstname>
<surname>Gerzo</surname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Freddie</firstname>
<surname>Cash</surname>
<contrib>Mit Beitr&auml;gen von </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>
<authorgroup>
<author>
<firstname>Benedict</firstname>
<surname>Reuschling</surname>
<contrib>&Uuml;bersetzt von </contrib>
</author>
</authorgroup>
<!-- Date of writing: 26 February 2011 -->
</sect1info>
<para>Dieses Kapitel ist noch nicht &uuml;bersetzt.
Lesen Sie bitte <ulink
url="&url.books.handbook.en;/disks-hast.html">
das Original in englischer Sprache</ulink>. Wenn Sie helfen
wollen, dieses Kapitel zu &uuml;bersetzen, senden Sie bitte
eine E-Mail an die Mailingliste &a.de.translators;.</para>
<title>Highly Available Storage (HAST)</title>
<indexterm>
<primary>HAST</primary>
<secondary>high availability</secondary>
</indexterm>
<sect2>
<title>&Uuml;berblick</title>
<para>Hochverf&uuml;gbarkeit ist eine der Hauptanforderungen von
ernsthaften Gesch&auml;ftsanwendungen und hochverf&uuml;gbarer Speicher
ist eine Schl&uuml;sselkomponente in solchen Umgebungen. Highly
Available STorage, oder <acronym>HAST<remark
role="acronym">Highly Available STorage</remark></acronym>, wurde von
&a.pjd; als ein Framework entwickelt, welches die transparente
Speicherung der gleichen Daten &uuml;ber mehrere physikalisch getrennte
Maschinen erm&ouml;glicht, die &uuml;ber ein TCP/IP-Netzwerk verbunden
sind. <acronym>HAST</acronym> kann als ein netzbasiertes RAID1
(Spiegel) verstanden werden und ist dem DRBD&reg;-Speichersystem der
GNU/&linux;-Plattform &auml;hnlich. In Kombination mit anderen
Hochverf&uuml;gbarkeitseigenschaften von &os;
wie <acronym>CARP</acronym>, erm&ouml;glicht es
<acronym>HAST</acronym>, hochverf&uuml;gbare Speichercluster zu bauen,
die in der Lage sind, Hardwareausf&auml;llen zu widerstehen.</para>
<para>Nachdem Sie diesen Abschnitt gelesen haben, werden Sie folgendes
wissen:</para>
<itemizedlist>
<listitem>
<para>Was <acronym>HAST</acronym> ist, wie es funktioniert und
welche Eigenschaften es besitzt.</para>
</listitem>
<listitem>
<para>Wie man <acronym>HAST</acronym> auf &os; aufsetzt und
verwendet.</para>
</listitem>
<listitem>
<para>Wie man <acronym>CARP</acronym> und &man.devd.8; kombiniert, um
ein robustes Speichersystem zu bauen.</para>
</listitem>
</itemizedlist>
<para>Bevor Sie diesen Abschnitt lesen, sollten Sie:</para>
<itemizedlist>
<listitem>
<para>die Grundlagen von &unix; und &os; verstanden haben
(<xref linkend="basics">).</para>
</listitem>
<listitem>
<para>wissen, wie man Netzwerkschnittstellen und andere Kernsysteme
von &os; konfiguriert (<xref linkend="config-tuning">).</para>
</listitem>
<listitem>
<para>ein gutes Verst&auml;ndnis der &os;-Netzwerkfunktionalit&auml;t
besitzen (<xref linkend="network-communication">).</para>
</listitem>
<listitem>
<para>&os;&nbsp;8.1-RELEASE oder h&ouml;her einsetzen.</para>
</listitem>
</itemizedlist>
<para>Das <acronym>HAST</acronym>-Projekt wurde von der &os; Foundation
mit Unterst&uuml;tzung der <ulink
url="http://www.omc.net/">OMCnet Internet Service GmbH</ulink> und
<ulink url="http://www.transip.nl/">TransIP BV</ulink>
gesponsert.</para>
</sect2>
<sect2>
<title>HAST-Merkmale</title>
<para>Die Hauptmerkmale des <acronym>HAST</acronym>-Systems sind:</para>
<itemizedlist>
<listitem>
<para>Es kann zur Maskierung von I/O-Fehlern auf lokalen Festplatten
eingesetzt werden.</para>
</listitem>
<listitem>
<para>Dateisystem-unabh&auml;ngig, was es erlaubt, jedes von &os;
unterst&uuml;tzte Dateisystem zu verwenden.</para>
</listitem>
<listitem>
<para>Effiziente und schnelle Resynchronisation: es werden nur die
Bl&ouml;cke synchronisiert, die w&auml;hrend der Ausfallzeit eines
Knotens ge&auml;ndert wurden.</para>
</listitem>
<!--
<listitem>
<para>Besitzt mehrere Synchronisationsmodi, um eine schnelle
&Uuml;bergabe an einen anderen Knoten (sog. failover) zu
erm&ouml;glichen.</para>
</listitem>
-->
<listitem>
<para>Es kann in einer bereits bestehenden Umgebung eingesetzt
werden, um zus&auml;tzliche Redundanz zu erreichen.</para>
</listitem>
<listitem>
<para>Zusammen mit <acronym>CARP</acronym>,
<application>Heartbeat</application>, oder anderen Werkzeugen, ist
es m&ouml;glich, ein robustes und dauerhaftes Speichersystem zu
bauen.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>HAST im Einsatz</title>
<para><acronym>HAST</acronym> stellt auf Block-Ebene eine synchrone
Replikation eines beliebigen Speichermediums auf mehreren Maschinen zur
Verf&uuml;gung. Daher werden mindestens zwei Knoten (physikalische
Maschinen) ben&ouml;tigt: der <literal>primary</literal>
(auch bekannt als <literal>master</literal>) Knoten, sowie der
<literal>secondary</literal> (<literal>slave</literal>) Knoten. Diese
beiden Maschinen zusammen werden als Cluster bezeichnet.</para>
<note>
<para>HAST ist momentan auf insgesamt zwei Knoten im Cluster
beschr&auml;nkt.</para>
</note>
<para>Da <acronym>HAST</acronym> in einer
prim&auml;r-sekund&auml;r-Konfiguration funktioniert, ist immer nur ein
Knoten des Clusters zu jeder Zeit aktiv. Der
<literal>prim&auml;re</literal> Knoten, auch
<literal>active</literal> genannt, ist derjenige, der alle I/O-Anfragen
verarbeitet, die an die <acronym>HAST</acronym>-Schnittstelle gesendet
werden. Der <literal>secondary</literal>-Knoten wird automatisch vom
<literal>primary</literal>-Knoten aus synchronisiert.</para>
<para>Die physischen Komponenten des <acronym>HAST</acronym>-Systems
sind:</para>
<itemizedlist>
<listitem>
<para>lokale Platte (am Prim&auml;rknoten)</para>
</listitem>
<listitem>
<para>Platte am entfernten Rechner (Sekund&auml;rknoten)</para>
</listitem>
</itemizedlist>
<para><acronym>HAST</acronym> arbeitet synchron auf Blockebene, was es
f&uuml;r Dateisysteme und Anwendungen transparent macht.
<acronym>HAST</acronym> stellt gew&ouml;hnliche GEOM-Provider im
Verzeichnis <filename class="directory">/dev/hast/</filename> f&uuml;r
die Verwendung durch andere Werkzeuge oder Anwendungen zur
Verf&uuml;gung, somit gibt es keinen Unterschied zwischen dem Einsatz
von durch <acronym>HAST</acronym> bereitgestellten Ger&auml;ten und
herk&ouml;mmlichen Platten, Partitionen, etc.</para>
<para>Jede Schreib-, L&ouml;sch- oder Entleerungsoperation wird an die
lokale und &uuml;ber TCP/IP zu der entfernt liegenden
Platte gesendet. Jede Leseoperation wird von der lokalen Platte
durchgef&uuml;hrt, es sei denn, die lokale Platte ist nicht aktuell
oder es tritt ein I/O-Fehler auf. In solchen F&auml;llen wird die
Leseoperation an den Sekund&auml;rknoten geschickt.</para>
<sect3>
<title>Synchronisation und Replikationsmodi</title>
<para><acronym>HAST</acronym> versucht, eine schnelle Fehlerbereinigung
zu gew&auml;hrleisten. Aus diesem Grund ist es sehr wichtig, die
Synchronisationszeit nach dem Ausfall eines Knotens zu reduzieren.
Um eine schnelle Synchronisation zu erm&ouml;glichen, verwaltet
<acronym>HAST</acronym> eine Bitmap von unsauberen Bereichen
auf der Platte und synchronisiert nur diese w&auml;hrend einer
regul&auml;ren Synchronisation (mit Ausnahme der initialen
Synchronisation).</para>
<para>Es gibt viele Wege, diese Synchronisation zu behandeln.
<acronym>HAST</acronym> implementiert mehrere Replikationsarten, um
unterschiedliche Methoden der Synchronisation zu realisieren:</para>
<itemizedlist>
<listitem>
<para><emphasis>memsync</emphasis>: meldet Schreiboperationen als
vollst&auml;ndig, wenn die lokale Schreiboperation beendet ist
und der entfernt liegende Knoten die Ankunft der Daten
best&auml;tigt hat, jedoch bevor die Daten wirklich gespeichert
wurden. Die Daten werden auf dem entfernt liegenden Knoten
direkt nach dem Senden der Best&auml;tigung gespeichert. Dieser
Modus ist daf&uuml;r gedacht, Latenzen zu verringern und
zus&auml;tzlich eine gute Verl&auml;sslichkeit zu bieten. Der
<emphasis>memsync</emphasis>-Replikationsmodus ist momentan noch
nicht implementiert.</para>
</listitem>
<listitem>
<para><emphasis>fullsync</emphasis>: meldet Schreiboperationen als
vollst&auml;ndig, wenn die lokale Schreiboperation beendet ist
und die entfernte Schreiboperation ebenfalls abgeschlossen wurde.
Dies ist der sicherste und zugleich der langsamste
Replikationsmodus. Er stellt den momentanen Standardmodus
dar.</para>
</listitem>
<listitem>
<para><emphasis>async</emphasis>: meldet Schreiboperationen als
vollst&auml;ndig, wenn lokale Schreibvorg&auml;nge abgeschlossen
wurden. Dies ist der schnellste und gef&auml;hrlichste
Replikationsmodus. Er sollte verwendet werden, wenn die Latenz
zu einem entfernten Knoten bei einer Replikation zu hoch ist
f&uuml;r andere Modi. Der
<emphasis>async</emphasis>-Replikationsmodus ist zum
gegenw&auml;rtigen Zeitpunkt nicht implementiert.</para>
</listitem>
</itemizedlist>
<warning>
<para>Momentan wird nur der
<emphasis>fullsync</emphasis>-Replikationsmodus
unterst&uuml;tzt.</para>
</warning>
</sect3>
</sect2>
<sect2>
<title>HAST-Konfiguration</title>
<para><acronym>HAST</acronym> ben&ouml;tigt
<literal>GEOM_GATE</literal>-Unterst&uuml;tzung, um korrekt zu
funktionieren. Der <literal>GENERIC</literal>-Kernel enth&auml;lt
jedoch <literal>GEOM_GATE</literal> <emphasis>nicht</emphasis> von
vornherein, jedoch ist in der Standardinstallation von &os;
<filename>geom_gate.ko</filename> als ladbares Modul vorhanden.
Stellen Sie bei Systemen, bei denen nur das Allern&ouml;tigste
vorhanden sein soll, sicher, dass dieses Modul zur Verf&uuml;gung
steht. Als Alternative l&auml;sst sich die
<acronym>GEOM_GATE</acronym>-Unterst&uuml;tzung direkt in den Kernel
statisch einbauen, indem Sie die folgende Zeile zu Ihrer
Kernelkonfigurationsdatei hinzuf&uuml;gen:</para>
<programlisting>options GEOM_GATE</programlisting>
<para>Das <acronym>HAST</acronym>-Framework besteht aus Sicht des
Betriebssystems aus mehreren Bestandteilen:</para>
<itemizedlist>
<listitem>
<para>Dem &man.hastd.8;-Dienst, welcher f&uuml;r die
Datensynchronisation verantwortlich ist,</para>
</listitem>
<listitem>
<para>Dem &man.hastctl.8; Management-Werkzeug,</para>
</listitem>
<listitem>
<para>Der Konfigurationsdatei &man.hast.conf.5;.</para>
</listitem>
</itemizedlist>
<para>Das folgende Beispiel beschreibt, wie man zwei Knoten als
<literal>master</literal>-<literal>slave</literal> /
<literal>primary</literal>-<literal>secondary</literal> mittels
<acronym>HAST</acronym> konfiguriert, um Daten zwischen diesen beiden
auszutauschen. Die Knoten werden als
<literal><replaceable>hasta</replaceable></literal> mit der IP-Adresse
<replaceable>172.16.0.1</replaceable> und
<literal><replaceable>hastb</replaceable></literal> mit der IP-Adresse
<replaceable>172.16.0.2</replaceable> bezeichnet. Beide Knoten
besitzen eine dedizierte Festplatte
<devicename>/dev/<replaceable>ad6</replaceable></devicename> mit der
gleichen Gr&ouml;sse f&uuml;r den <acronym>HAST</acronym>-Betrieb.
Der <acronym>HAST</acronym>-Pool (manchmal auch Ressource
genannt, z.B. der GEOM-Provider in <filename
class="directory">/dev/hast/</filename>) wird als
<filename><replaceable>test</replaceable></filename> bezeichnet.</para>
<para>Die Konfiguration von <acronym>HAST</acronym> wird in der Datei
<filename>/etc/hast.conf</filename> vorgenommen. Diese Datei sollte
auf beiden Knoten gleich sein. Die denkbar einfachste Konfiguration
ist folgende:</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>Schlagen Sie in der &man.hast.conf.5;-Manualpage nach, wenn Sie an
erweiterten Konfigurationsm&ouml;glichkeiten interessiert sind.</para>
<tip>
<para>Es ist ebenfalls m&ouml;glich, den Hostnamen in den
<literal>remote</literal>-Anweisungen zu verwenden. Stellen Sie in
solchen F&auml;llen sicher, dass diese Rechner auch aufgel&ouml;st
werden k&ouml;nnen, also in der Datei <filename>/etc/hosts</filename>
aufgef&uuml;hrt sind, oder alternativ im lokalen
<acronym>DNS</acronym>.</para>
</tip>
<para>Da nun die Konfiguration auf beiden Rechnern vorhanden ist, sind
Sie in der Lage, den <acronym>HAST</acronym>-Pool zu erstellen. Lassen
Sie die folgenden Kommandos auf beiden Knoten ablaufen, um die
initialen Metadaten auf die lokale Platte zu schreiben und starten Sie
anschliessend den &man.hastd.8;-Dienst:</para>
<screen>&prompt.root; <userinput>hastctl create test</userinput>
&prompt.root; <userinput>/etc/rc.d/hastd onestart</userinput></screen>
<note>
<para>Es ist <emphasis>nicht</emphasis> m&ouml;glich, GEOM-Provider mit
einem bereits bestehenden Dateisystem zu verwenden (z.B. um einen
bestehenden Speicher in einen von <acronym>HAST</acronym> verwalteten
Pool zu konvertieren), weil diese Prozedur bestimmte Metadaten auf
den Provider schreiben muss und daf&uuml;r nicht genug freier Platz
zur Verf&uuml;gung stehen wird.</para>
</note>
<para>HAST ist nicht daf&uuml;r verantwortlich, die Rolle
(<literal>primary</literal> oder <literal>secondary</literal>) f&uuml;r
den jeweiligen Knoten festzulegen. Die Rolle des Knotens muss vom
Administrator oder einer anderen Software wie
<application>Heartbeat</application> mittels des
&man.hastctl.8;-Werkzeugs festgelegt werden. Auf dem prim&auml;ren
Knoten (<literal><replaceable>hasta</replaceable></literal>) geben Sie
nun den folgenden Befehl ein:</para>
<screen>&prompt.root; <userinput>hastctl role primary test</userinput></screen>
<para>Geben Sie nun, &auml;hnlich wie zuvor, das folgende Kommando auf
dem sekund&auml;ren Knoten
(<literal><replaceable>hastb</replaceable></literal>) ein:</para>
<screen>&prompt.root; <userinput>hastctl role secondary test</userinput></screen>
<caution>
<para>Es kann passieren, dass beide Knoten nicht in der Lage sind,
miteinander zu kommunizieren und dadurch beide als prim&auml;re
Knoten konfiguriert sind; die Konsequenz daraus wird als
<literal>split-brain</literal> bezeichnet. Um diese Situation zu
bereinigen, folgen Sie den Schritten, die in <xref
linkend="disks-hast-sb"> beschrieben sind.</para>
</caution>
<para>Es ist m&ouml;glich das Ergebnis des &man.hastctl.8;-Werkzeugs auf
jedem Knoten zu &uuml;berpr&uuml;fen:</para>
<screen>&prompt.root; <userinput>hastctl status test</userinput></screen>
<para>Der wichtigste Teil ist die <literal>status</literal>-Textzeile der
Ausgabe, die auf jedem Knoten <literal>complete</literal> lauten
sollte. Falls der Status als <literal>degraded</literal>
zur&uuml;ckgemeldet wird, ist etwas schief gegangen. Zu diesem
Zeitpunkt hat die Synchronisation zwischen den beiden Knoten bereits
begonnen. Die Synchronisation ist beendet, wenn das Kommando
<command>hastctl status</command> meldet, dass die
<literal>dirty</literal>-Bereiche 0 Bytes betragen.</para>
<para>Der letzte Schritt ist, ein Dateisystem auf dem
<devicename>/dev/hast/<replaceable>test</replaceable></devicename>
GEOM-Provider anzulegen und dieses ins System einzuh&auml;ngen. Dies
muss auf dem <literal>primary</literal>-Knoten durchgef&uuml;hrt werden
(da <filename>/dev/hast/<replaceable>test</replaceable></filename> nur
auf dem <literal>primary</literal>-Knoten erscheint). Dies kann ein
paar Minuten dauern, abh&auml;ngig von der Gr&ouml;sse der
Festplatte:</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>Sobald das <acronym>HAST</acronym>-Framework richtig konfiguriert
wurde, besteht der letzte Schritt nun darin, sicherzustellen, dass
<acronym>HAST</acronym> w&auml;hrend des Systemstarts automatisch
gestartet wird. Die folgende Zeile sollte zur Datei
<filename>/etc/rc.conf</filename> hinzugef&uuml;gt werden:</para>
<programlisting>hastd_enable="YES"</programlisting>
<sect3>
<title>Failover-Konfiguration</title>
<para>Das Ziel dieses Beispiels ist, ein robustes Speichersystem zu
bauen, welches Fehlern auf einem beliebigen Knoten widerstehen kann.
Die Schl&uuml;sselaufgabe in diesem Szenario besteht darin, zu
verhindern, dass der <literal>primary</literal>-Knoten des Clusters
ausf&auml;llt. Sollte es dennoch passieren, ist der
<literal>secondary</literal>-Knoten da, um nahtlos einzuspringen, das
Dateisystem zu pr&uuml;fen, einzuh&auml;ngen und mit der Arbeit
fortzufahren, ohne dass auch nur ein einzelnes Bit an Daten verloren
ging.</para>
<para>Um diese Aufgabe zu bewerkstelligen, ist es n&ouml;tig, eine
weitere Eigenschaft zu nutzen, die unter &os; verf&uuml;gbar ist,
welche ein automatisches Failover auf der IP-Schicht erm&ouml;glicht:
<acronym>CARP</acronym>. <acronym>CARP</acronym> steht f&uuml;r
Common Address Redundancy Protocol und erlaubt es mehreren Rechnern
im gleichen Netzsegment, die gleiche IP-Adresse zu verwenden. Setzen
Sie <acronym>CARP</acronym> auf beiden Knoten des Clusters anhand der
Dokumentation in <xref linkend="carp"> auf. Nachdem dieser Schritt
abgeschlossen ist, sollte jeder Knoten seine eigene
<devicename>carp0</devicename>-Schnittstelle mit der geteilten
IP-Adresse <replaceable>172.16.0.254</replaceable> besitzen.
Selbstverst&auml;ndlich muss der prim&auml;re
<acronym>HAST</acronym>-Knoten des Clusters der
<acronym>CARP</acronym>-Masterknoten sein.</para>
<para>Der <acronym>HAST</acronym>-Pool, welcher im vorherigen Abschnitt
erstellt wurde, ist nun bereit f&uuml;r den Export &uuml;ber das
Netzwerk auf den anderen Rechner. Dies kann durch den Export
&uuml;ber <acronym>NFS</acronym>, <application>Samba</application>
etc. erreicht werden, indem die geteilte IP-Addresse
<replaceable>172.16.0.254</replaceable> verwendet wird. Das einzige
ungel&ouml;ste Problem ist der automatische Failover, sollte der
prim&auml;re Knoten einmal ausfallen.</para>
<para>Falls die <acronym>CARP</acronym>-Schnittstelle aktiviert oder
deaktiviert wird, generiert das &os;-Betriebssystem ein
&man.devd.8;-Ereignis, was es erm&ouml;glicht,
Zustands&auml;nderungen auf den
<acronym>CARP</acronym>-Schnittstellen zu &uuml;berwachen. Eine
Zustands&auml;nderung auf der <acronym>CARP</acronym>-Schnittstelle
ist ein Indiz daf&uuml;r, dass einer der Knoten gerade ausgefallen
oder wieder verf&uuml;gbar ist. In diesem Fall ist es m&ouml;glich,
ein Skript zu starten, welches den Failover automatisch
durchf&uuml;hrt.</para>
<para>Um diese Zustands&auml;nderungen auf der
<acronym>CARP</acronym>-Schnittstelle abzufangen, m&uuml;ssen die
folgenden Zeilen in der Datei <filename>/etc/devd.conf</filename> auf
jedem Knoten eingef&uuml;gt werden:</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>Um diese neue Konfiguration zu aktivieren, f&uuml;hren Sie das
folgende Kommando auf beiden Knoten aus:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/devd restart</userinput></screen>
<para>F&uuml;r den Fall, dass die
<devicename>carp0</devicename>-Schnittstelle aktiviert oder
deaktiviert wird (sich also der Status der Schnittstelle
&auml;ndert), erzeugt das System eine Meldung, was es dem
&man.devd.8;-Subsystem erm&ouml;glicht, ein beliebiges Skript zu
starten, in diesem Fall also
<filename>/usr/local/sbin/carp-hast-switch</filename>. Dies ist das
Skript, dass den automatischen Failover durchf&uuml;hrt. F&uuml;r
genauere Informationen zu der obigen &man.devd.8;-Konfiguration,
lesen Sie die &man.devd.conf.5;-Manualpage.</para>
<para>Ein Beispiel f&uuml;r ein solches Skript k&ouml;nnte wie folgt
aussehen:</para>
<programlisting>#!/bin/sh
# Original script by Freddie Cash &lt;fjwcash@gmail.com&gt;
# Modified by Michael W. Lucas &lt;mwlucas@BlackHelicopters.org&gt;
# and Viktor Petersson &lt;vpetersson@wireload.net&gt;
# The names of the HAST resources, as listed in /etc/hast.conf
resources="test"
# delay in mounting HAST resource after becoming master
# make your best guess
delay=3
# logging
log="local0.debug"
name="carp-hast"
# end of user configurable stuff
case "$1" in
master)
logger -p $log -t $name "Switching to primary provider for ${resources}."
sleep ${delay}
# Wait for any "hastd secondary" processes to stop
for disk in ${resources}; do
while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do
sleep 1
done
# Switch role for each disk
hastctl role primary ${disk}
if [ $? -ne 0 ]; then
logger -p $log -t $name "Unable to change role to primary for resource ${disk}."
exit 1
fi
done
# Wait for the /dev/hast/* devices to appear
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 provider /dev/hast/${disk} did not appear."
exit 1
fi
done
logger -p $log -t $name "Role for HAST resources ${resources} switched to primary."
logger -p $log -t $name "Mounting disks."
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 "Switching to secondary provider for ${resources}."
# Switch roles for the HAST resources
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 "Unable to switch role to secondary for resource ${disk}."
exit 1
fi
logger -p $log -t $name "Role switched to secondary for resource ${disk}."
done
;;
esac</programlisting>
<para>Im Kern f&uuml;hrt das Skript die folgenden Aktionen durch,
sobald ein Knoten zum <literal>master</literal> /
<literal>primary</literal> wird:</para>
<itemizedlist>
<listitem>
<para>Es ernennt den <acronym>HAST</acronym>-Pool als den
prim&auml;ren f&uuml;r einen gegebenen Knoten.</para>
</listitem>
<listitem>
<para>Es pr&uuml;ft das Dateisystem, dass auf dem
<acronym>HAST</acronym>-Pool erstellt wurde.</para>
</listitem>
<listitem>
<para>Es h&auml;ngt die Pools an die richtige Stelle im System
ein.</para>
</listitem>
</itemizedlist>
<para>Wenn ein Knoten zum <literal>backup</literal> /
<literal>secondary</literal> ernannt wird:</para>
<itemizedlist>
<listitem>
<para>H&auml;ngt es den <acronym>HAST</acronym>-Pool aus dem
Dateisystem aus.</para>
</listitem>
<listitem>
<para>Degradiert es den <acronym>HAST</acronym>-Pool zum
sekund&auml;ren.</para>
</listitem>
</itemizedlist>
<caution>
<para>Bitte beachten Sie, dass dieses Skript nur ein Beispiel
f&uuml;r eine m&ouml;gliche L&ouml;sung darstellt. Es behandelt
nicht alle m&ouml;glichen Szenarien, die auftreten k&ouml;nnen und
sollte erweitert bzw. abge&auml;ndert werden, so dass z.B.
ben&ouml;tigte Dienste gestartet oder gestoppt werden usw.</para>
</caution>
<tip>
<para>F&uuml;r dieses Beispiel wurde ein Standard-UFS Dateisystem
verwendet. Um die Zeit f&uuml;r die Wiederherstellung zu
verringern, kann ein UFS mit Journal oder ein ZFS-Dateisystem
benutzt werden.</para>
</tip>
<para>Weitere detaillierte Informationen mit zus&auml;tzlichen
Beispielen k&ouml;nnen auf der <ulink
url="http://wiki.FreeBSD.org/HAST">HAST Wiki</ulink>-Seite
abgerufen werden.</para>
</sect3>
</sect2>
<sect2>
<title>Fehlerbehebung</title>
<sect3>
<title>Allgemeine Tipps zur Fehlerbehebung</title>
<para><acronym>HAST</acronym> sollte generell ohne Probleme
funktionieren. Jedoch kann es, wie bei jeder anderen Software auch,
zu gewissen Zeiten sein, dass sie sich nicht so verh&auml;lt wie
angegeben. Die Quelle dieser Probleme kann unterschiedlich sein,
jedoch sollte als Faustregel gew&auml;hrleistet werden, dass die
Zeit f&uuml;r beide Knoten im Cluster synchron l&auml;uft.</para>
<para>Die Anzahl an Debugging-Meldungen von &man.hastd.8; sollte
erh&ouml;ht werden, wenn Fehler von <acronym>HAST</acronym> bereinigt
werden. Dies kann durch das Starten des &man.hastd.8;-Dienstes mit
der Option <literal>-d</literal> erreicht werden. Wichtig zu wissen
ist, dass diese Option mehrfach angegeben werden kann, um die Anzahl
an Meldungen weiter zu erh&ouml;hen. Sie k&ouml;nnen viele
n&uuml;tzliche Informationen auf diese Art bekommen. Sie sollten
ebenfalls die Verwendung der Option <literal>-F</literal> in
Erw&auml;gung ziehen, die den &man.hastd.8;-Dienst in den Vordergrund
bringt.</para>
</sect3>
<sect3 id="disks-hast-sb">
<title>Aufl&ouml;sung des Split-brain-Zustands</title>
<para>Die Konsequenz aus der Situation, wenn beide Knoten des Clusters
nicht in der Lage sind, miteinander zu kommunizieren und dadurch
beide als prim&auml;re Knoten fungieren, wird als
<literal>split-brain</literal> bezeichnet. Dies ist ein
gef&auml;hrlicher Zustand, weil es beiden Knoten erlaubt ist,
&Auml;nderungen an den Daten vorzunehmen, die miteinander nicht in
Einklang gebracht werden k&ouml;nnen. Diese Situation sollte vom
Systemadministrator h&auml;ndisch bereinigt werden.</para>
<para>Um diese Situation zu beheben, muss der Administrator
entscheiden, welcher Knoten die wichtigsten &Auml;nderungen von
beiden besitzt (oder diese manuell miteinander vermischen) und
anschliessend den <acronym>HAST</acronym>-Knoten die volle
Synchronisation mit jenem Knoten durchf&uuml;hren zu lassen, welcher
die besch&auml;digten Daten besitzt. Um dies zu tun, geben Sie die
folgenden Befehle auf dem Knoten ein, der neu synchronisiert werden
soll:</para>
<screen>&prompt.root; <userinput>hastctl role init &lt;resource&gt;</userinput>
&prompt.root; <userinput>hastctl create &lt;resource&gt;</userinput>
&prompt.root; <userinput>hastctl role secondary &lt;resource&gt;</userinput></screen>
</sect3>
</sect2>
</sect1>
</chapter>