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