%
% bonding.tex
% Last Update: $Id$
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kapitel Bonding %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{BONDING - Ethernet Bonding}
\marklabel{BONDINGADMIN}{}
\index{BONDING}

\section{Bonding - mehrere Netzwerkkarten zu einem Link zusammenfassen}

    Unter Bonding versteht man das Zusammenfassen von mindestens zwei
    Netzwerkkarten, die auch unterschiedlichen Typs (also z.B.: 3Com und
    Intel) und Geschwindigkeit (10 MBit/s oder 100 MBit/s) sein k"onnen,
    zu einer gemeinsamen Verbindung. Dabei k"onnen entweder entsprechende
    Linux Rechner direkt verbunden, oder eine Verbindung zu einem Switch
    aufgebaut werden. Das erm"oglicht, ohne gro"sen Aufwand z.B. eine
    200 MBit/s Full-Duplex Verbindung von einem \eisfair Server zu einem
    Switch zu schalten.



\section{Das Men"u im Setup-Programm}

    Das Men"u im Setup-Programm ist wie folgt aufgebaut:

    \mbox{}

    \begin{tabular}{llll}
    & 1. &  System administration \\
    \end{tabular}
\eline
    \begin{tabular}{p{1cm}llll}
    & 2. &  Network administration \\
    \end{tabular}
\eline
    \begin{tabular}{p{2cm}llll}
    & x. &  Bonding administration \\
    \end{tabular}
\eline
    \begin{tabular}{p{3cm}ll}
    & 1. & View documentation \\
    & 2. & Edit configuration \\
    & 3. & Advanced configuration file handling \\
    & 4. & Show status \\
    & 5. & Stop service \\
    & 6. & Start service \\
    & 7. & Show bond \\
    & 8. & Device info \\
    \end{tabular}

    \mbox{}


\section{"Anderung der Konfiguration}

    Die Konfiguration kann "uber den Men"upunkt 'Edit configuration' ge"andert
    werden.

\section{Die Konfigurationsdatei}

    In der Konfigurationsdatei, die "uber das Men"u zug"anglich ist, sind
    folgende Parameter vorhanden; wer sie von Hand editieren will findet
    sie unter \\
    \texttt{/etc/config.d/bonding}


\section{Die Parameter}


\begin{description}

\config{START\_BONDING}
{START\_BONDING}
{STARTBONDING}
{
    Mit 'yes' wird das Bonding aktiviert. Die Einstellung
    'no' deaktiviert das Bonding komplett.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{START\_BONDING='no'}
}


\config{BONDING\_N}
{BONDING\_N}
{BONDINGN}
{
    Die Anzahl der zu konfigurierenden Bonding-Ger"ate. Es werden automatisch
    die passenden Ger"ate-Namen bond0 ... bondX erzeugt.

    G"ultige Werte: 1 - 16

    Standardeinstellung: \texttt{BONDING\_N='0'}
}


\config{BONDING\_x\_MODE}
{BONDING\_x\_MODE}
{BONDINGxMODE}
{
    Gibt eines der Bonding-Methoden an. Der Standardwert ist Round-Robin
    \glqq{}balance-rr\grqq{}.

    G"ultige Werte:

    \begin{itemize}
        \item balance-rr \pfeil{ Mode 0}\\
            Round-Robin-Methode: "Ubermittle der Reihe nach "uber alle
            Slaves von ersten bis zum letzten. Diese Methode bietet
            sowohl Load-Balancing als auch Fehlertoleranz.

        \item active-backup \pfeil{ Mode 1}\\
            Aktives Backup: Nur ein Slave im Bond ist aktiv. Die anderen
            Slaves werden nur dann aktiviert, wenn der aktive Slave
            ausf"allt. Die MAC-Adresse des Bonds ist nur auf einem Port
            (Netzwerkadapter) sichtbar, um den Switch nicht zu verwirren.
            Dieser Modus bietet Fehlertoleranz.

        \item balance-xor \pfeil{ Mode 2}\\
            XOR-Methode: "Ubertragung basierend auf der Formel
            (Quell-MAC-Adresse XOR Ziel-MAC-Adresse) modulo Anzahl der
            Slaves. Dadurch wird immer der selbe Slave f"ur die selben
            Ziel-MAC-Adresse benutzt. Diese Methode bietet sowohl
            Load-Balancing als auch Fehlertoleranz.

        \item broadcast \pfeil{ Mode 3}\\
            Broadcast-Methode: "Ubermittelt alles auf allen Slave-Devices.
            Dieser Modus bietet Fehlertoleranz.

        \item 802.3ad \pfeil{ Mode 4}\\
            Dynamische IEEE 802.3ad Verbindungsaggregation. Erstellt
            Aggregationsgruppen, die die selben Geschwindigkeits und
            Duplex-Einstellungen teilen. "Ubermittelt auf allen Slaves im
            aktiven Aggregator.

            Voraussetzungen:
            \begin{itemize}
                \item Unterst"utzung f"ur ethtool im Basistreiber, um
                    Geschwindigkeit und Duplex-Status f"ur jedes Device
                    abzufragen.
                \item Ein Switch, der dynamische IEEE 802.3ad
                    Verbindungsaggregation unterst"utzt.
            \end{itemize}

        \item balance-tlb \pfeil{ Mode 5}\\
            Adaptives Load-Balancing f"ur ausgehende Daten: Kanal-Bonding,
            dass keine speziellen Features im Switch ben"otigt. Der ausgehende
            Netzwerktraffic wird entsprechend der momentanen Last (relativ zur
            Geschwindigkeit berechnet) auf jeden Slave verteilt. Eingehender
            Netzwerktraffic wird vom aktuellen Slave empfangen. Wenn der
            empfangende Slave ausf"allt, "ubernimmt ein anderer Slave die
            MAC-Adresse des ausgefallenen Empfangsslaves.

            Voraussetzungen:
            \begin{itemize}
                \item Unterst"utzung f"ur ethtool im Basistreiber, um
                    Geschwindigkeit und Duplex-Status f"ur jedes Device
                    abzufragen.
            \end{itemize}

        \item balance-alb \pfeil{ Mode 6}\\
            Adaptives Load-Balancing: schlie"st sowohl balance-tlb, als auch
            Eingehendes Load-Balancing (rlb) f"ur IPV4 Traffic ein und ben"otigt
            keine speziellen Voraussetzungen beim Switch. Load-Balancing f"ur
            eingehenden Traffic wird "uber ARP-Absprache erreicht. Der
            Bonding-Treiber f"angt ARP-Antworten vom Server auf ihrem Weg nach
            aussen hin ab und "eberschreibt die Quell- Hardware-Adresse mit der
            eindeutigen HW-Adresse eines Slaves im Bond, sodass
            unterschiedliche Clients unterschiedliche HW-Adressen f"ur den
            Server verwenden.

            Eingehender Traffic von Verbindungen, die vom Server erstellt
            wurden wird auch verteilt. Wenn der Server ARP-Anfragen sendet,
            kopiert und speichert der Bonding-Treiber die Client-IP aus dem
            ARP. Wenn die ARP-Antwort des Client ankommt, wird seine
            HW-Adresse ermittelt und der Bonding-Treiber erstellt eine
            ARP-Antwort an diesen Client und ordnet ihn so zu einem Client
            im Bond zu. Ein Problematischer Effekt von ARP-Absprachen f"ur
            die Lastverteilung ist, dass jedes Mal wenn eine ARP-Anfrage
            "ubermittelt wird, sie die HW-Adresse des Bonds benutzt. Also
            lernen die Clients die HW-Adresse des Bonds und der eingehende
            Traffic auf dem aktuellen Slave bricht zusammen. Diesem Umstand
            wird begegnet, indem Updates (ARP-Antworten) zu allen Clients mit
            ihrer jeweiligen HW-Adresse gesandt wird, sodass der Traffic wieder
            aufgeteilt ist. Eingehender Traffic wird auch dann neu aufgeteilt,
            wenn ein neuer Slave zum Bond hinzugef"ugt wird oder ein inaktiver
            Slave reaktiviert wird. Die Empfangslast wird der Reihe nach
            (Round-Robin) in der Gruppe der Slave mit der gr"o"sten
            Geschwindigkeit im Bond verteilt.

            Wenn eine Verbindung wiederhergestellt wird oder ein neuer Slave
            zum Bond hinzukommt wird der eingehende Traffic neu auf alle
            aktiven Slaves im Bond verteilt, indem ARP-Antworten mit den
            ausgew"ahlten MAC-Adressen zu jedem Client gesandt werden. Der
            Parameter updelay muss auf einen Wert gr"o"ser oder gleich der
            Weiterleitungsverz"ogerung (forwarding delay) des Switchs
            eingestellt sein, sodass ARP-Antworten an die Clients nicht vom
            Switch geblockt werden.

            Voraussetzungen:
            \begin{itemize}
                \item Unterst"utzung f"ur ethtool im Basistreiber, um
                    Geschwindigkeit und Duplex-Status f"ur jedes Device
                    abzufragen.
                \item Unterst"utzung im Basistreiber, die HW-Adresse auch
                    dann setzen zu k"onnen, wenn das Device offen ist. Das
                    ist notwendig, damit immer ein Slave im Team die
                    HW-Adresse des Bonds tragen kann, (der curr\_active\_slave)
                    obwohl jeder Slave im Bond eine eigene, eindeutige
                    HW-Adresse hat. Wenn der curr\_active\_slave ausf"allt,
                    wird seine HW-Adresse mit dem neuen curr\_active\_slave
                    ausgetauscht.
            \end{itemize}
    \end{itemize}

    Standardeinstellung: \texttt{BONDING\_x\_MODE='0'}
}


%\config{BONDING\_x\_IPADDR}
%{BONDING\_x\_IPADDR}
%{BONDINGxIPADDR}
%{
%    \achtung{Deprecated, diese Einstellung nicht mehr benutzen.}
%
%    Das Bonding-Ger"at "ubernimmt die Daten der
%    Netzwerkschnittstelle (BONDING\_x\_BIND\_1\_ETH).
%
%    G"ultige Werte: IP addr
%
%    Standardeinstellung: \texttt{BONDING\_x\_IPADDR='{}'}
%}
%
%
%\config{BONDING\_x\_NETMASK}
%{BONDING\_x\_NETMASK}
%{BONDINGxNETMASK}
%{
%    \achtung{Deprecated, diese Einstellung nicht mehr benutzen.}
%
%    Das Bonding-Ger"at "ubernimmt die Daten der
%    Netzwerkschnittstelle (BONDING\_x\_BIND\_1\_ETH).
%
%    G"ultige Werte: netmask
%
%    Standardeinstellung: \texttt{BONDING\_x\_NETMASK='{}'}
%}
%
%
%\config{BONDING\_x\_GATEWAY}
%{BONDING\_x\_GATEWAY}
%{BONDINGxGATEWAY}
%{
%    \achtung{Deprecated, diese Einstellung nicht mehr benutzen.}
%
%    Das Bonding-Ger"at "ubernimmt die Daten aus der base config.
%
%    G"ultige Werte: gateway
%
%    Standardeinstellung: \texttt{BONDING\_x\_GATEWAY='{}'}
%}


\config{BONDING\_x\_MAC}
{BONDING\_x\_MAC}
{BONDINGxMAC}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Ein Bonding-Ger"at benutzt standardm"a"sig eine eigene MAC Adresse,
    die selbst"andig erzeugt wird.

    Wenn Sie dies nicht wollen, k"onnen Sie auch eine MAC Adresse
    angegeben, die das Bonding-Ger"at benutzen soll.

    G"ultige Werte: MAC addr '00:00:00:00:00:00'

    Standardeinstellung: \texttt{BONDING\_x\_MAC='{}'}
}


\config{BONDING\_x\_BIND\_N}
{BONDING\_x\_BIND\_N}
{BONDINGxBINDN}
{
    Gibt an, aus wievielen Netzwerk-Ger"aten dieses Bonding-Ger"at besteht.
    Wenn z.B. ein Bonding-Ger"at aus 'eth0' und 'eth1' gebildet werden soll,
    muss hier eine '2' (f"ur die beiden eth--Ger"ate) eingetragen werden.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{BONDING\_x\_BIND\_N='2'}
}


\config{BONDING\_x\_BIND\_x\_ETH}
{BONDING\_x\_BIND\_x\_ETH}
{BONDINGxBINDxETH}
{
    Der Name eines Netzwerk-Ger"ates, welches zu diesem Bonding-Ger"at
    geh"oren soll.

    Hier wird kein echter Netzwerk-Ger"ate Namen angegeben sondern der
    Index der Angabe IP\_ETH\_x\_NAME aus der Base  Konfiguration in
    /etc/config.d/base.

    Bitte beachten: Ein Netzwerk-Ger"at, welches f"ur ein Bonding-Ger"at
    benutzt wird, kann exklusiv nur daf"ur benutzt werden. Insbesondere
    ist es nicht m"oglich das Ger"at f"ur ein DSL-Modem, eine Bridge,
    ein VLAN, etc.. zu verwenden.

    Der Index kann, wenn der Editor \glqq{}\ece\grqq{} eingestellt ist,
    auch aus dem Dialog eingef"ugt werden.

    G"ultige Werte: 1, 2, 3, 4 etc..

    Standardeinstellung: \texttt{BONDING\_x\_BIND\_x\_ETH='1'}
}


\config{BONDING\_x\_MIIMON}
{BONDING\_x\_MIIMON}
{BONDINGxMIIMON}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Gibt an in welchen Zeitabst"anden (in Millisekunden) die einzelnen
    Verbindungen eines Bonding-Ger"ates auf Ihren Linkstatus gepr"uft
    werden. Es wird also der Linkstatus jedes einzelnen Netzwerk-Ger"ates
    dieses Bonding-Ger"ates alle x Millisekunden gepr"uft. Mit '0' wird
    die MIIMON "Uberwachung deaktiviert.

    G"ultige Werte: 0, Millisekunden

    Standardeinstellung: \texttt{BONDING\_x\_MIIMON='100'}
}


\config{BONDING\_x\_USE\_CARRIER}
{BONDING\_x\_USE\_CARRIER}
{BONDINGxUSECARRIER}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Wenn eine "Uberwachung des Linkstatus per MIIMON aktiviert wird kann
    man hier ausw"ahlen, ob die "Uberwachung des Linkstatus durch die
    netif\_carrier\_ok() Funktion (bei der Einstellung 'yes') erfolgen
    soll, oder durch direkte Aufrufe von MII oder ETHTOOL
    ioctl()-Systemaufrufen (mit der Einstellung 'no'). Die
    netif\_carrier\_ok() Methode ist effizienter, aber nicht alle Treiber
    unterst"utzen diese Methode.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{BONDING\_x\_USE\_CARRIER='yes'}
}


\config{BONDING\_x\_UPDELAY}
{BONDING\_x\_UPDELAY}
{BONDINGxUPDELAY}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Der Wert dieser Einstellung multipliziert mit der Einstellung von
    \texttt{BONDING\_x\_MIIMON} gibt an nach welcher Zeit eine
    Verbindung des Bonding-Ger"ates aktiviert wird wenn der entsprechende
    Link (z.B. ein eth-Ger"at) aufgebaut wurde. Damit wird eine Verbindung
    des Bonding-Ger"ates solange aktiviert, bis der Linkstatus auf
    'nicht verbunden' schaltet.

    G"ultige Werte: 0, Zeit

    Standardeinstellung: \texttt{BONDING\_x\_UPDELAY='0'}
}


\config{BONDING\_x\_DOWNDELAY}
{BONDING\_x\_DOWNDELAY}
{BONDINGxDOWNDELAY}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Der Wert dieser Einstellung multipliziert mit der Einstellung von
    \texttt{BONDING\_x\_MIIMON} gibt an nach welcher Zeit eine
    Verbindung des Bonding-Ger"ates deaktiviert wird wenn der entsprechende
    Link (z.B. ein eth-Ger"et) ausf"allt. Damit wird also eine Verbindung
    des Bonding-Ger"ates zeitweise deaktiviert, solange bis der Linkstatus
    wieder auf 'aktiv' schaltet.

    G"ultige Werte: 0, Zeit

    Standardeinstellung: \texttt{BONDING\_x\_DOWNDELAY='0'}
}


\config{BONDING\_x\_LACP\_RATE}
{BONDING\_x\_LACP\_RATE}
{BONDINGxLACPRATE}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Wenn bei \texttt{BONDING\_x\_MODE=''} der Wert '802.3ad'
    eingestellt wird, kann man hier angeben wie oft die Linkinformationen
    mit dem Verbindungspartner (also einem Switch oder einem anderen
    Linuxrechner) ausgetauscht werden. 'slow' tauscht alle 30 Sekunden die
    Linkinformationen aus, bei 'fast' werden die Linkinformationen jede
    Sekunde ausgetauscht.

    G"ultige Werte: slow, fast

    Standardeinstellung: \texttt{BONDING\_x\_LACP\_RATE='slow'}
}


\config{BONDING\_x\_PRIMARY}
{BONDING\_x\_PRIMARY}
{BONDINGxPRIMARY}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Wenn als Mode 'active-backup' eingestellt wurde, bestimmt man hiermit,
    welches Netzwerk-Ger"at prim"ar als Ausgabeger"at benutzt werden soll.
    Das ist vor allem sinnvoll, wenn die unterschiedlichen Netzwerk-Ger"ate
    eine unterschiedliche Geschwindigkeit haben. Wenn ein Wert
    eingegeben wird, und das Netzwerk-Ger"at ist online, wird es als erstes
    Ausgabeger"at benutzt. Nur wenn das Netzwerk-Ger"at offline ist, wird ein
    anderes Netzwerk-Ger"at benutzt. Andernfalls, sobald ein Ausfall erkannt
    wird, wird ein neues Standardausgabemedium bestimmt. Dies ist dann
    praktisch, wenn ein Slave Vorrang gegen"uber einem anderen haben soll
    - wenn bspw. ein Slave 1000Mbps schnell ist und ein anderer 100Mbps.
    Wenn der 1000Mbps-Slave ausf"allt und sp"ater wieder hergestellt
    wurde, kann es von Vorteil sein, dass der schnellere Slave wieder
    aktiv gesetzt werden kann, ohne beim 100Mbps-Slave k"unstlich einen
    Ausfall herbeizuf"uhren.

    G"ultige Werte: ethX

    Standardeinstellung: \texttt{BONDING\_x\_PRIMARY='{}'}
}


\config{BONDING\_x\_ARP\_INTERVAL}
{BONDING\_x\_ARP\_INTERVAL}
{BONDINGxARPINTERVAL}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Gibt die Frequenz in Millisekunden an nach dem die unter
    \texttt{BONDING\_DEV\_x\_ARP\_IP\_TARGET\_x} angegebenen
    IP-Adressen (bzw. deren ARP Antwort) gepr"uft werden. Wenn
    ARP-"Uberwachung im Load-Balancing-Mode (mode 0 or 2) genutzt werden
    soll, sollte der Switch so eingestellt werden, dass er alle Pakete
    gleich auf alle Verbindungen verteilt - wie etwa Round-Robin. Wenn der
    Switch so eingestellt ist, dass er die Pakete nach der XOR-Methode
    verteilt, werden alle Antworten der ARP-Ziele auf der selben Verbindung
    ankommen und das k"onnte bei den anderen Team-Mitgliedern zum Ausfall
    f"uhren. ARP-"Uberwachung sollte nicht zusammen mit miimon verwandt
    werden. Wird als Wert 0 "ubergeben, ist ARP-"eberwachung deaktiviert.

    G"ultige Werte: 0, Millisekunden

    Standardeinstellung: \texttt{BONDING\_x\_ARP\_INTERVAL='0'}
}


\config{BONDING\_x\_ARP\_IP\_TARGETS\_N}
{BONDING\_x\_ARP\_IP\_TARGETS\_N}
{BONDINGxARPIPTARGETSN}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Die Anzahl der IP-Adressen die f"ur die ARP Pr"ufung benutzt werden
    sollen. Es k"onnen maximal 16 IP-Adressen "uberpr"uft werden.

    G"ultige Werte: 1 - 16

    Standardeinstellung: \texttt{BONDING\_x\_IP\_TARGETS\_N='{}'}
}


\config{BONDING\_x\_ARP\_IP\_TARGET\_x}
{BONDING\_x\_ARP\_IP\_TARGET\_x}
{BONDINGxARPIPTARGETx}
{
    Diese Einstellung ist optional und kann auch komplett weggelassen
    werden.

    Hier wird jeweils eine IP-Adressen angegeben, wenn
    \texttt{BONDING\_x\_ARP\_INTERVAL > 0} ist.
    Diese werden als Ziele der ARP-Anfragen verwendet, die verschickt
    werden, um die Qualit"at der Verbindung zu den Zielen festzustellen.
    Geben sie diese Werte im Format ddd.ddd.ddd.ddd an. Damit ARP-
    "Uberwachung funktioniert, muss zumindest eine IP-Adresse angegeben
    werden.

    G"ultige Werte: IP Adresse

    Standardeinstellung: \texttt{BONDING\_x\_ARP\_IP\_TARGET\_x='{}'}
}

\end{description}

\jump{MENUSYSTEMNETWORK}{Zur"uck zum Men"u: Network administration}
