Update to r38003:
Improve the HAST section of the Handbook. Approved by: bcr (mentor)
This commit is contained in:
parent
0eea1de0eb
commit
505c3c8d71
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=46341
1 changed files with 108 additions and 107 deletions
|
@ -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 <resource></userinput>
|
||||
|
|
Loading…
Reference in a new issue