Update to r43918:

Update the CARP section to reflect changes between
how FreeBSD 9.X and 10.X handle this device.
Thanks to the submitter for doing the work on this and sending it to me.

Submitted by:	Bjoern Heidotting
Obtained from:	The FreeBSD German Documentation Project
This commit is contained in:
Benedict Reuschling 2014-04-12 13:20:00 +00:00
parent 7ca8b47d29
commit 9fefe8fada
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=44542

View file

@ -5,7 +5,7 @@
$FreeBSD$
$FreeBSDde:$
basiert auf: r43904
basiert auf: r43918
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="advanced-networking">
<info><title>Weiterführende Netzwerkthemen</title>
@ -4526,7 +4526,7 @@ margaux:ha=0123456789ab:tc=.def100</programlisting>
<acronym>TFTP</acronym> verwendet werden, muss beim
Kompilieren die Option
<literal>LOADER_TFTP_SUPPORT</literal> in der Datei
<filename>/etc/make.conf</filename> eingetragen sein. Sehen
<filename>/etc/make.conf</filename> eingetragen sein. Sehen
Sie sich die Datei
<filename>/usr/share/examples/etc/make.conf</filename>
für weitere Anweisungen an.</para>
@ -5719,7 +5719,7 @@ hint.ppc.0.irq="7"</programlisting>
<para>Danach überprüfen Sie, ob die
Kernelkonfigurationsdatei die Zeile
<literal>device plip</literal> enthält, oder ob das
Kernelmodul <filename>plip.ko</filename> geladen wurde. In
Kernelmodul <filename>plip.ko</filename> geladen wurde. In
beiden Fällen sollte die parallele Schnittstelle
von &man.ifconfig.8; angezeigt werden:</para>
@ -5911,7 +5911,7 @@ round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms</screen>
<para>Es gibt verschiedene Arten von IPv6-Adressen: Unicast-,
Anycast- und Multicast-Adressen.</para>
<para>Unicast-Adressen sind die herkömlichen Adressen. Ein
<para>Unicast-Adressen sind die herkömlichen Adressen. Ein
Paket, das an eine Unicast-Adresse gesendet wird, kommt nur an
der Schnittstelle an, die dieser Adresse zugeordnet ist.</para>
@ -6433,6 +6433,7 @@ route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"</programlisting>
<info><title>CARP - Common Address Redundancy Protocol</title>
<authorgroup>
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Beigetragen von </contrib></author>
<author><personname><firstname>Allan</firstname><surname>Jude</surname></personname><contrib>Aktualisiert von</contrib></author>
</authorgroup>
</info>
@ -6442,215 +6443,237 @@ route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"</programlisting>
<indexterm><primary>Common Address Redundancy Protocol (CARP)</primary></indexterm>
<para>Das <foreignphrase>Common Address Redundancy
Protocol</foreignphrase> (<acronym>CARP</acronym>) erlaubt es,
Protocol</foreignphrase> (<acronym>CARP</acronym>) erlaubt es,
mehreren Rechnern die gleiche <acronym>IP</acronym>-Adresse
zuzuweisen. Durch ein solches Vorgehen läßt sich
beispielsweise die Verfügbarkeit bestimmter Dienste
verbessern oder die Last zwischen einzelnen Systemen besser
verteilen. Den auf diese Art und Weise konfigurierten Systemen
kann zusätzlich eine eigene (im Netzwerk eindeutige)
<acronym>IP</acronym>-Adresse zugewiesen werden (wie dies auch
im folgenden Beispiel erfolgt).</para>
zuzuweisen und <emphasis>Hochverfügbarkeit</emphasis>
bereitzustellen. Das bedeutet, dass ein oder mehrere Rechner
ausfallen können und die anderen Rechner transparent
einspringen, ohne das der Benutzer etwas von einem Ausfall
mitbekommt. Neben der gemeinsamen
<acronym>IP</acronym>-Adresse, haben die jeweiligen Rechner auch
eine eindeutige <acronym>IP</acronym>-Adresse zur Verwaltung und
Konfiguration, wie in den folgenden Beispielen zu sehen
ist.</para>
<para>Um <acronym>CARP</acronym> zu aktivieren, müssen Sie die
&os;-Kernelkonfigurationsdatei um die folgende Option erweitern
und danach den &os;-Kernel (wie in <xref linkend="kernelconfig"/> beschrieben) neu bauen:</para>
<sect2 xml:id="carp-ha">
<title>Hochverfügbarkeit mit <acronym>CARP</acronym></title>
<programlisting>device carp</programlisting>
<para><acronym>CARP</acronym> wird häufig verwendet, um einen
oder mehrere Dienste hochverfügbar zu machen. Dieses Beispiel
konfiguriert eine Failover-Unterstützung mit drei Servern (mit
jeweils eigener, eindeutiger <acronym>IP</acronym>-Adresse),
die alle den gleichen Web-Inhalt anbieten. Die Lastverteilung
dieser Maschinen wird dabei über <foreignphrase>Round
Robin</foreignphrase> <acronym>DNS</acronym> konfiguriert.
Mit Ausnahme des Hostnamens und der
<acronym>IP</acronym>-Management-Adresse sind Master- und
Backup-Maschinen identisch konfiguriert. Die Server müssen
die gleiche Konfiguration und die gleichen Dienste aktiviert
haben. Tritt ein Failover auf, können Anfragen an den Dienst
mit der gemeinsam genutzten <acronym>IP</acronym>-Adresse nur
dann richtig beantwortet werden, wenn der Backup-Server
Zugriff auf denselben Inhalt hat. Die Backup-Maschine verfügt
über zwei zusätzliche <acronym>CARP</acronym>-Schnittstellen,
eine für jede <acronym>IP</acronym>-Adresse des
Master-Content-Servers. Sobald ein Fehler auftritt, übernimmt
der Backup-Server die <acronym>IP</acronym>-Adresse des
ausgefallenen Master-Servers. Die Benutzer werden einen
Dienstausfall überhaupt nicht bemerken.</para>
<para>Alternativ können Sie aber auch das Kernelmodul
<filename>if_carp.ko</filename> beim Systemstart
automatisch laden. Dazu nehmen Sie die folgende Zeile
in die Datei <filename>/boot/loader.conf</filename>
auf:</para>
<para>Dieses Beispiel benutzt zwei verschiedene Master namens
<systemitem>hosta.example.org</systemitem> und
<systemitem>hostb.example.org</systemitem> mit einem
gemeinsamen Backup namens
<systemitem>hostc.example.org</systemitem>.</para>
<programlisting>if_carp_load="YES"</programlisting>
<para>Jede virtuelle <acronym>IP</acronym>-Adresse hat eine
eindeutige Identifikationsnummer, die als
<foreignphrase>Virtual Host Identification</foreignphrase>
(<acronym>VHID</acronym>) bekannt ist. Alle Maschinen, die
sich eine <acronym>IP</acronym>-Adresse teilen, verwenden die
gleiche <acronym>VHID</acronym>. Die <acronym>VHID</acronym>
für jede einzelne <acronym>IP</acronym>-Adresse muss,
entsprechend der Broadcast-Domäne der Netzwerkschnittstelle,
eindeutig sein.</para>
</sect2>
<para>Danach ist <acronym>CARP</acronym> auf Ihrem System
verfügbar und kann über verschiedene
<command>sysctl</command>-Optionen (<acronym>OID</acronym>s)
gesteuert werden.</para>
<sect2 xml:id="carp-10x">
<title><acronym>CARP</acronym> mit &os;&nbsp;10 (und neuer)
benutzen</title>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>OID</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<para>Unterstützung für <acronym>CARP</acronym> erhalten Sie
durch das Laden des Kernelmoduls <filename>carp.ko</filename>
in <filename>/boot/loader.conf</filename>:</para>
<tbody>
<row>
<entry><varname>net.inet.carp.allow</varname></entry>
<entry>Akzeptiert ankommende <acronym>CARP</acronym>-Pakete.
In der Voreinstellung aktiviert.</entry>
</row>
<programlisting>carp_load="YES"</programlisting>
<row>
<entry><varname>net.inet.carp.preempt</varname></entry>
<entry>Diese Option deaktiviert alle
<acronym>CARP</acronym>-Geräte, sobald eines von
ihnen ausfällt. In der Voreinstellung
deaktiviert.</entry>
</row>
<para>Das <acronym>CARP</acronym>-Modul kann auch, wie in <xref
linkend="kernelconfig"/> beschrieben, direkt in den &os;
Kernel eingebunden werden:</para>
<row>
<entry><varname>net.inet.carp.log</varname></entry>
<entry>Hat diese Variable den Wert <literal>0</literal>, wird
kein Protokoll generiert, während mit dem Wert
<literal>1</literal> nur inkorrekte
<acronym>CARP</acronym>-Pakete protokolliert werden. Hat
die Variable einen Wert größer
<literal>1</literal>, werden nur die Statuswechsel von
<acronym>CARP</acronym>-Geräten protokolliert. In der
Voreinstellung hat diese Variable den Wert
<literal>1</literal>.</entry>
</row>
<programlisting>device carp</programlisting>
<row>
<entry><varname>net.inet.carp.arpbalance</varname></entry>
<entry>Gleicht die Netzwerklast im lokalen Netzwerk durch
den Einsatz von <acronym>ARP</acronym> aus. In der
Voreinstellung deaktiviert.</entry>
</row>
<row>
<entry><varname>net.inet.carp.suppress_preempt</varname></entry>
<entry>Eine nur lesbare <acronym>OID</acronym>, die
den <foreignphrase>Preemption Suppression</foreignphrase>-Status
anzeigt. Preemption kann verhindert werden. Dies auch dann,
wenn ein Gerät ausfällt. Hat die Variable
den Wert <literal>0</literal>, bedeutet dies, dass Preemption
nicht verhindert wird. Tritt ein Problem auf, wird der Wert
dieser <acronym>OID</acronym> um <literal>1</literal>
erhöht.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Das <acronym>CARP</acronym>-Gerät selbst erzeugen Sie mit dem
<command>ifconfig</command>-Befehl:</para>
<screen>&prompt.root; <userinput>ifconfig carp0 create</userinput></screen>
<para>Damit Sie dieses Protokoll in Ihrem Netzwerk einsetzen
können, muss jede Netzwerkkarte eine eindeutige
Identifikationsnummer, die sogenannte <acronym>VHID</acronym>
(<foreignphrase>Virtual Host Identification</foreignphrase>),
besitzen, da sich ansonsten die Rechner Ihres Netzwerks nicht
voneinander unterscheiden lassen.</para>
<sect2>
<title>Die Serververfügbarkeit mit CARP
verbessern</title>
<para>Wie bereits weiter oben erwähnt wurde, können Sie
<acronym>CARP</acronym> dazu verwenden, die Verfübarkeit
Ihrer Server zu verbessern. Im folgenden Bespiel werden
insgesamt drei Server (mit jeweils eigener, eindeutiger
<acronym>IP</acronym>-Adresse), die alle den gleichen Inhalt
anbieten, in einer <foreignphrase>Round Robin</foreignphrase>
<acronym>DNS</acronym>-Konfiguration eingerichtet.
Der Backup-Server verfügt über zwei
<acronym>CARP</acronym>-Schnittstellen (für die beiden
<acronym>IP</acronym>-Adressen der Content-Server). Tritt bei
einem Content-Server ein Problem auf, übernimmt der
Backup-Server die <acronym>IP</acronym>-Adresse des
ausgefallenen Servers. Dadurch sollte die Auswahl eines Servers
vom Anwender nicht bemerkt werden. Der Backup-Server muss
identisch konfiguriert sein und die gleichen Daten und Dienste
anbieten wie das System, das er ersetzen soll.</para>
<para>Die beiden Content-Server werden (abgesehen von ihren
jeweiligen Hostnamen und <acronym>VHID</acronym>s) identisch
konfiguriert und heißen in unserem Beispiel
<systemitem>hosta.example.org</systemitem> beziehungsweise
<systemitem>hostb.example.org</systemitem>. Damit Sie
<acronym>CARP</acronym> einsetzen können, müssen
Sie als Erstes die Datei <filename>rc.conf</filename> auf
beiden Systemen anpassen. Für das System
<systemitem>hosta.example.org</systemitem> nehmen Sie dazu folgende
Zeilen in <filename>rc.conf</filename> auf:</para>
<para>Hostname, <acronym>IP</acronym>-Management-Adresse,
Subnetzmaske, gemeinsame <acronym>IP</acronym>-Adresse und
<acronym>VHID</acronym> werden durch das Hinzufügen in
<filename>/etc/rc.conf</filename> gesetzt. Dieses Beispiel
ist für <systemitem>hosta.example.org</systemitem>:</para>
<programlisting>hostname="hosta.example.org"
ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24"</programlisting>
ifconfig_em0="inet <systemitem
class="ipaddress">192.168.1.3</systemitem> netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 1 pass testpass alias <systemitem
class="ipaddress">192.168.1.50</systemitem>/32"</programlisting>
<para>Für das System <systemitem>hostb.example.org</systemitem>
benötigen Sie zusätzlich folgende Zeilen in
<filename>rc.conf</filename>:</para>
<para>Beispiel für
<systemitem>hostb.example.org</systemitem>:</para>
<programlisting>hostname="hostb.example.org"
ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24"</programlisting>
ifconfig_em0="inet <systemitem
class="ipaddress">192.168.1.4</systemitem> netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 2 pass testpass alias <systemitem
class="ipaddress">192.168.1.51</systemitem>/32"</programlisting>
<note>
<para>Achten Sie unbedingt darauf, dass die durch die Option
<option>pass</option> an <command>ifconfig</command>
übergebenen Passwörter auf beiden Systemen
identisch sind, da
<option>pass</option> an &man.ifconfig.8; übergebenen
Passwörter auf beiden Systemen identisch sind, da
<filename>carp</filename>-Geräte nur mit Systemen
kommunizieren können, die über ein korrektes Passwort
verfügen. Beachten Sie weiters, dass sich die
<acronym>VHID</acronym>s der beiden Systeme unterscheiden
müssen.</para>
verfügen.</para>
</note>
<para>Nun richten Sie noch das dritte System,
<systemitem>provider.example.org</systemitem>, ein, das aktiviert
wird, wenn eines der beiden zuvor konfigurierten Systeme
ausfällt. Dieses dritte System benötigt zwei
<filename>carp</filename>-Geräte, um bei Bedarf
eines der beiden anderen
Systeme ersetzen zu können. Dazu konfigurieren Sie
<filename>rc.conf</filename> analog zur folgenden
Beispielkonfiguration:</para>
<para>Die dritte Maschine,
<systemitem>hostc.example.org</systemitem> ist so
konfiguriert, das sie aktiviert wird, wenn eines der beiden
zuvor konfigurierten Systeme ausfällt. Diese Maschine ist mit
zwei <acronym>CARP</acronym> <acronym>VHID</acronym>s
konfiguriert, eine für jede virtuelle
<acronym>IP</acronym>-Adresse der beiden Master-Server. Die
Option <option>advskew</option> (<acronym>CARP</acronym>
advertising skew) wird gesetzt, um sicherzustellen, dass sich
der Backup-Server später ankündigt wie der Master-Server.
<option>advskew</option> steuert die Rangfolge für den Fall
das mehrere Backup-Server zur Verfügung stehen. Passen Sie
die Konfiguration in <filename>/etc/rc.conf</filename>
an:</para>
<programlisting>hostname="provider.example.org"
ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24"
ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24"</programlisting>
<programlisting>hostname="hostc.example.org"
ifconfig_em0="inet <systemitem
class="ipaddress">192.168.1.5</systemitem> netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 1 advskew 100 pass testpass alias <systemitem
class="ipaddress">192.168.1.50</systemitem>/32"
ifconfig_em1_alias0="vhid 2 advskew 100 pass testpass alias <systemitem
class="ipaddress">192.168.1.51</systemitem>/32"</programlisting>
<para>Durch die beiden <filename>carp</filename>-Geräte
ist es <systemitem>provider.example.org</systemitem> möglich,
festzustellen, ob eines der beiden anderen Systeme nicht mehr
reagiert. In diesem Fall übernimmt
<systemitem>provider.example.org</systemitem> die
<acronym>IP</acronym>-Adresse des betroffenen Systems.</para>
<para>Durch die zwei konfigurierten <acronym>CARP</acronym>
<acronym>VHID</acronym>s ist
<systemitem>hostc.example.org</systemitem> in der Lage
festzustellen, wenn einer der Master-Server nicht mehr
reagiert. Wenn der Master-Server sich später ankündigt als
der Backup-Server, übernimmt der Backup-Server die gemeinsame
<acronym>IP</acronym>-Adresse, bis der Master-Server erneut
verfügbar ist.</para>
<para><foreignphrase>Preemption</foreignphrase> ist
standardmäßig deaktiviert. Wird
<foreignphrase>Preemption</foreignphrase> aktiviert, kann es
vorkommen, dass <systemitem>hostc.example.org</systemitem> die
virtuelle <acronym>IP</acronym>-Adresse nicht wieder an den
Master-Server zurückgibt. Der Administrator kann jedoch den
Backup-Server dazu zwingen, die übernommene
<acronym>IP</acronym>-Adresse wieder an den Master-Server
zurückzugeben:</para>
<screen>&prompt.root; <command>ifconfig em0 vhid 1 state
backup</command></screen>
<para>An dieser Stelle muss entweder das Netzwerk neu gestartet,
oder die Machine neu gebootet werden, um
<acronym>CARP</acronym> zu aktivieren.</para>
<para>Die Funktionalität von <acronym>CARP</acronym> kann, wie
in der Manualpage &man.carp.4; beschrieben, über verschiedene
&man.sysctl.8; Parameter kontrolliert werden. Mit dem Einsatz
von &man.devd.8; können weitere Aktionen zu
<acronym>CARP</acronym>-Ereignissen ausgelöst werden.</para>
</sect2>
<sect2 xml:id="carp-9x">
<title><acronym>CARP</acronym> mit &os;&nbsp;9 (und älter)
benutzen</title>
<para>Unterstützung für <acronym>CARP</acronym> erhalten Sie
durch das Laden des Kernelmoduls <filename>carp.ko</filename>
in <filename>/boot/loader.conf</filename>:</para>
<programlisting>if_carp_load="YES"</programlisting>
<para><acronym>CARP</acronym> kann auch direkt in den Kernel
eingebunden werden. Diese Prozedur wird in <xref
linkend="kernelconfig"/> beschrieben:</para>
<programlisting>device carp</programlisting>
<para>Die <acronym>CARP</acronym>-Schnittstellen selbst können
mittels &man.ifconfig.8; erstellt werden:</para>
<screen>&prompt.root; <command>ifconfig carp0 create</command>
</screen>
<para>Konfigurieren Sie Hostnamen,
<acronym>IP</acronym>-Management-Adresse, die gemeinsam
genutzte <acronym>IP</acronym>-Adresse und die
<acronym>VHID</acronym>, indem Sie die erforderlichen Zeilen
in <filename>/etc/rc.conf</filename> hinzufügen. Hierzu ein
Beispiel für
<systemitem>hosta.example.org</systemitem>:</para>
<programlisting>hostname="hosta.example.org"
ifconfig_fxp0="inet <systemitem
class="ipaddress">192.168.1.3</systemitem> netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass testpass <systemitem
class="ipaddress">192.168.1.50</systemitem>/24"</programlisting>
<para>Beispiel für
<systemitem>hostb.example.org</systemitem>:</para>
<programlisting>hostname="hostb.example.org"
ifconfig_fxp0="inet <systemitem
class="ipaddress">192.168.1.4</systemitem> netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 2 pass testpass <systemitem
class="ipaddress">192.168.1.51</systemitem>/24"</programlisting>
<note>
<para>Ist im installierten &os;-Kernel die Option
"preemption" aktiviert, kann es sein, dass
<systemitem>provider.example.org</systemitem> die übernommene
<acronym>IP</acronym>-Adresse nicht mehr an den
Content-Server zurückgibt (wenn dieser wieder
funktioniert). In diesem Fall muss ein Administrator die
entsprechende Schnittstelle dazu zwingen, dies zu tun.
Dazu gibt er auf dem Rechner
<systemitem>provider.example.org</systemitem> den folgenden
Befehl ein:</para>
<para><foreignphrase>Preemption</foreignphrase> ist im GENERIC
&os; Kernel deaktiviert. Haben Sie jedoch
<foreignphrase>Preemption</foreignphrase> in einem
angepassten Kernel aktiviert, dass
<systemitem>hostc.example.org</systemitem> die virtuelle
<acronym>IP</acronym>-Adresse nicht wieder an den
Master-Server zurückgibt. Der Administrator kann jedoch den
Backup-Server dazu zwingen, die übernommene
<acronym>IP</acronym>-Adresse wieder an den Master-Server
zurückzugeben:</para>
<screen>&prompt.root; <userinput>ifconfig carp0 down &amp;&amp; ifconfig carp0 up</userinput></screen>
<screen>&prompt.root; <command>ifconfig carp0 down &amp;&amp; ifconfig carp0 up</command></screen>
<para>Dieser Befehl muss auf das
<filename>carp</filename>-Gerät ausgeführt
werden, das dem betroffenen System zugeordnet ist.</para>
<para>Dieser Befehl muss auf dem
<filename>carp</filename>-Gerät ausgeführt werden, dass dem
betroffenen System zugeordnet ist.</para>
</note>
<para>Damit ist <acronym>CARP</acronym> vollständig
konfiguriert und der Testbetrieb kann beginnen. Zuvor
müssen Sie allerdings noch alle Systeme neu starten
(beziehungsweise die Netzwerkkonfiguration auf allen
Systemen neu einlesen), um die Einstelllungen zu
übernehmen.</para>
<para>An dieser Stelle muss entweder das Netzwerk neu gestartet,
oder die Maschine neu gebootet werden, um
<acronym>CARP</acronym> zu aktivieren.</para>
<para>Für weitere Informtionen lesen Sie bitte die Manualpage
&man.carp.4;.</para>
<para>Die Funktionalität von <acronym>CARP</acronym> kann, wie
in der Manualpage &man.carp.4; beschrieben, über verschiedene
&man.sysctl.8; Parameter kontrolliert werden. Mit dem Einsatz
von &man.devd.8; können weitere Aktionen zu
<acronym>CARP</acronym>-Ereignissen ausgelöst werden.</para>
</sect2>
</sect1>
</chapter>