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…
	
	Add table
		Add a link
		
	
		Reference in a new issue