Update to r38003:

Improve the HAST section of the Handbook.

Approved by:	bcr (mentor)
This commit is contained in:
Bjoern Heidotting 2015-03-13 21:26:52 +00:00
parent 0eea1de0eb
commit 505c3c8d71
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=46341

View file

@ -5,7 +5,7 @@
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/disks/chapter.xml,v 1.187 2012/04/26 19:32:48 bcr Exp $
basiert auf: 1.315
basiert auf: r38003
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="disks">
<info><title>Speichermedien</title>
@ -4695,11 +4695,11 @@ Device 1K-blocks Used Avail Capacity
<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>
<para>Da nun die Konfiguration auf beiden Rechnern vorhanden
ist, kann ein <acronym>HAST</acronym>-Pool erstellt werden.
Lassen Sie diese 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>
@ -4713,93 +4713,93 @@ Device 1K-blocks Used Avail Capacity
zur Verfügung stehen wird.</para>
</note>
<para>HAST ist nicht dafür verantwortlich, die Rolle
(<literal>primary</literal> oder <literal>secondary</literal>) fü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ären
Knoten (<literal>hasta</literal>) geben Sie
nun den folgenden Befehl ein:</para>
<para>Die Rolle eines HAST Knotens (<literal>primary</literal>
oder <literal>secondary</literal>) wird vom einem
Administrator, oder einer Software wie
<application>Heartbeat</application>, mittels des
&man.hastctl.8;-Werkzeugs festgelegt. Auf dem primären
Knoten (<literal>hasta</literal>) geben Sie diesen Befehl
ein:</para>
<screen>&prompt.root; <userinput>hastctl role primary test</userinput></screen>
<para>Geben Sie nun, ähnlich wie zuvor, das folgende Kommando auf
dem sekundären Knoten
(<literal>hastb</literal>) ein:</para>
<para>Geben Sie folgendes Kommando auf dem sekundären
Knoten (<literal>hastb</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ä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>
<para>Es kann passieren, dass beide Knoten nicht in der Lage
sind, miteinander zu kommunizieren und dadurch beide als
primä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öglich das Ergebnis des &man.hastctl.8;-Werkzeugs auf
jedem Knoten zu überprüfen:</para>
<para>Überprüfen Sie das Ergebnis mit &man.hastctl.8; auf beiden
Knoten:</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ü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 wichtigste Teil ist die
<literal>status</literal>-Textzeile, die auf jedem Knoten
<literal>complete</literal> lauten sollte. Falls der Status
als <literal>degraded</literal> zurückgemeldet wird, ist etwas
schief gegangen. Zu diesem Zeitpunkt hat die Synchronisation
zwischen den beiden Knoten bereits begonnen. Die
Synchronisation ist beendet, wenn
<command>hastctl status</command> meldet, dass die
<literal>dirty</literal>-Bereiche 0 Bytes betragen.</para>
<para>Der letzte Schritt ist, ein Dateisystem auf dem
<filename>/dev/hast/test</filename>
GEOM-Provider anzulegen und dieses ins System einzuhängen. Dies
muss auf dem <literal>primary</literal>-Knoten durchgeführt werden
(da <filename>/dev/hast/test</filename> nur
auf dem <literal>primary</literal>-Knoten erscheint). Dies kann ein
paar Minuten dauern, abhängig von der Grösse der
Festplatte:</para>
<para>Der nächste Schritt ist, ein Dateisystem auf dem
<filename>/dev/hast/test</filename> GEOM-Provider anzulegen
und dieses ins System einzuhängen. Dies muss auf dem
<literal>primary</literal>-Knoten durchgeführt werden, da
<filename>/dev/hast/test</filename> nur auf dem
<literal>primary</literal>-Knoten erscheint. Die Erstellung
des Dateisystems kann ein paar Minuten dauern, abhängig von
der Grö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ährend des Systemstarts automatisch
gestartet wird. Die folgende Zeile sollte zur Datei
<filename>/etc/rc.conf</filename> hinzugefügt werden:</para>
<para>Sobald das <acronym>HAST</acronym>-Framework richtig
konfiguriert wurde, besteht der letzte Schritt nun darin,
sicherzustellen, dass <acronym>HAST</acronym> während des
Systemstarts automatisch gestartet wird. Fügen Sie diese
Zeile in <filename>/etc/rc.conf</filename> hinzu:</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üsselaufgabe in diesem Szenario besteht darin, zu
verhindern, dass der <literal>primary</literal>-Knoten des Clusters
ausfällt. Sollte es dennoch passieren, ist der
<literal>secondary</literal>-Knoten da, um nahtlos einzuspringen, das
Dateisystem zu prüfen, einzuhängen und mit der Arbeit
fortzufahren, ohne dass auch nur ein einzelnes Bit an Daten verloren
ging.</para>
<para>Das Ziel dieses Beispiels ist, ein robustes
Speichersystem zu bauen, welches Fehlern auf einem
beliebigen Knoten widerstehen kann. Das Szenario besteht
darin, dass der <literal>primary</literal>-Knoten des
Clusters ausfällt. Sollte das passieren, ist der
<literal>secondary</literal>-Knoten da, um nahtlos
einzuspringen, das Dateisystem zu prüfen, einzuhängen und
mit der Arbeit fortzufahren, ohne dass auch nur ein
einzelnes Bit an Daten verloren geht.</para>
<para>Um diese Aufgabe zu bewerkstelligen, ist es nötig, eine
weitere Eigenschaft zu nutzen, die unter &os; verfügbar ist,
welche ein automatisches Failover auf der IP-Schicht ermöglicht:
<acronym>CARP</acronym>. <acronym>CARP</acronym> steht fü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
<filename>carp0</filename>-Schnittstelle mit der geteilten
<para>Um diese Aufgabe zu bewerkstelligen, wird eine
weitere Eigenschaft von &os; benutzt,
welche ein automatisches Failover auf der IP-Schicht
ermöglicht: <acronym>CARP</acronym>.
<acronym>CARP</acronym> (Common Address Redundancy Protocol)
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.
Nach der Konfiguration wird jeder Knoten seine eigene
<filename>carp0</filename>-Schnittstelle, mit der geteilten
IP-Adresse <replaceable>172.16.0.254</replaceable> besitzen.
Selbstverständlich muss der primäre
<acronym>HAST</acronym>-Knoten des Clusters der
<acronym>CARP</acronym>-Masterknoten sein.</para>
Der primäre <acronym>HAST</acronym>-Knoten des Clusters muss
der <acronym>CARP</acronym>-Masterknoten sein.</para>
<para>Der <acronym>HAST</acronym>-Pool, welcher im vorherigen Abschnitt
erstellt wurde, ist nun bereit für den Export über das
@ -4810,21 +4810,22 @@ Device 1K-blocks Used Avail Capacity
ungelöste Problem ist der automatische Failover, sollte der
primä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öglicht,
Zustandsänderungen auf den
<para>Falls die <acronym>CARP</acronym>-Schnittstelle
aktiviert oder deaktiviert wird, generiert das
&os;-Betriebssystem ein &man.devd.8;-Ereignis, was es
ermöglicht, Zustandsänderungen auf den
<acronym>CARP</acronym>-Schnittstellen zu überwachen. Eine
Zustandsänderung auf der <acronym>CARP</acronym>-Schnittstelle
ist ein Indiz dafür, dass einer der Knoten gerade ausgefallen
oder wieder verfügbar ist. In diesem Fall ist es möglich,
ein Skript zu starten, welches den Failover automatisch
Zustandsänderung auf der
<acronym>CARP</acronym>-Schnittstelle ist ein Indiz dafür,
dass einer der Knoten gerade ausgefallen oder wieder
verfügbar ist. Diese Zustandsänderungen machen es möglich,
ein Skript zu starten, welches automatisch den HAST-Failover
durchführt.</para>
<para>Um diese Zustandsänderungen auf der
<acronym>CARP</acronym>-Schnittstelle abzufangen, müssen die
folgenden Zeilen in der Datei <filename>/etc/devd.conf</filename> auf
jedem Knoten eingefügt werden:</para>
<para>Um Zustandsänderungen auf der
<acronym>CARP</acronym>-Schnittstelle abzufangen, müssen
diese Zeilen in <filename>/etc/devd.conf</filename> auf
jedem Knoten hinzugefügt werden:</para>
<programlisting>notify 30 {
match "system" "IFNET";
@ -4840,9 +4841,8 @@ notify 30 {
action "/usr/local/sbin/carp-hast-switch slave";
};</programlisting>
<para>Um diese neue Konfiguration zu aktivieren, starten Sie
&man.devd.8; auf beiden Knoten neu, um die neue Konfiguration
wirksam werden zu lassen:</para>
<para>Starten Sie &man.devd.8; auf beiden Knoten neu, um
die neue Konfiguration wirksam werden zu lassen:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/devd restart</userinput></screen>
@ -4857,7 +4857,7 @@ notify 30 {
genauere Informationen zu der obigen &man.devd.8;-Konfiguration,
lesen Sie die &man.devd.conf.5;-Manualpage.</para>
<para>Ein Beispiel für ein solches Skript könnte wie folgt
<para>Ein Beispiel für ein solches Skript könnte so
aussehen:</para>
<programlisting>#!/bin/sh
@ -5010,37 +5010,38 @@ esac</programlisting>
jedoch sollte als Faustregel gewährleistet werden, dass die
Zeit für beide Knoten im Cluster synchron läuft.</para>
<para>Die Anzahl an Debugging-Meldungen von &man.hastd.8; sollte
erhö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öhen. Sie können viele
nützliche Informationen auf diese Art bekommen. Sie sollten
ebenfalls die Verwendung der Option <literal>-F</literal> in
Erwägung ziehen, die den &man.hastd.8;-Dienst in den Vordergrund
bringt.</para>
<para>Für die Fehlersuche bei Problemen mit
<acronym>HAST</acronym> sollte die Anzahl an
Debugging-Meldungen von &man.hastd.8; erhöht 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öhen. Sie
können viele nützliche Informationen auf diese Art bekommen.
Sie sollten ebenfalls die Verwendung der Option
<literal>-F</literal> in Erwägung ziehen, die den
&man.hastd.8;-Dienst in den Vordergrund bringt.</para>
</sect3>
<sect3 xml:id="disks-hast-sb">
<title>Auflö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äre Knoten fungieren, wird als
<literal>split-brain</literal> bezeichnet. Dies ist ein
<para><literal>split-brain</literal> bezeichnet eine
Situation, in der beide Knoten des Clusters nicht in der
Lage sind, miteinander zu kommunizieren und dadurch beide
als primäre Knoten fungieren. Dies ist ein
gefährlicher Zustand, weil es beiden Knoten erlaubt ist,
Änderungen an den Daten vorzunehmen, die miteinander nicht in
Einklang gebracht werden können. Diese Situation sollte vom
Systemadministrator händisch bereinigt werden.</para>
Änderungen an den Daten vorzunehmen, die miteinander nicht
in Einklang gebracht werden können. Diese Situation muss
vom Systemadministrator händisch bereinigt werden.</para>
<para>Um diese Situation zu beheben, muss der Administrator
entscheiden, welcher Knoten die wichtigsten Änderungen von
beiden besitzt (oder diese manuell miteinander vermischen) und
anschliessend den <acronym>HAST</acronym>-Knoten die volle
Synchronisation mit jenem Knoten durchführen zu lassen, welcher
die beschädigten Daten besitzt. Um dies zu tun, geben Sie die
folgenden Befehle auf dem Knoten ein, der neu synchronisiert werden
<para>Der Administrator muss entscheiden, welcher Knoten die
wichtigsten Änderungen von beiden besitzt (oder diese
manuell miteinander vermischen) und anschliessend den
<acronym>HAST</acronym>-Knoten die volle Synchronisation mit
jenem Knoten durchführen zu lassen, welcher die beschädigten
Daten besitzt. Um dies zu tun, geben Sie folgende
Befehle auf dem Knoten ein, der neu synchronisiert werden
soll:</para>
<screen>&prompt.root; <userinput>hastctl role init &lt;resource&gt;</userinput>