W skrócie, Ethernet Bonding (czasami zwane też Interface Bonding) służy do tego żeby “złożyć” ze sobą dwie sieciówki w celu zwiększenia przepustowości lub niezawodności (lub obu).  W moim przypadku mam serwer z 4 sieciówkami (2 wbudowane i 2 na karcie PCIE) w serwerze który będzie służył jako loadbalancer i moim celem jest sprawienie że jak jedna sieciówka zacznie dymić druga przejmie jej “obowiązki” :). O ile w necie można bez problemy wygooglować jak to ustawić, to sprawne działanie bondingu (bondage ? ;]) ze skryptów startowych wymagało już trochę prób ;]. Więc do rzeczy (a rzeczy tyczy sie debiana więc YMMV).

Kompilacja kernela

<br /> Device Drivers--><br /> Network Device Support --><br /> Bonding driver support<br />
Nuff said;]

Ładowanie modułu

dodaj w /etc/modules albo odpal z modprobe
bonding mode=6 max_bonds=2 miimon=100

max_bonds – ile bondów potrzebujesz, więcej niż dwa raczej rzadko ;]
miimon – co ile ms sprawdzać
mode – tu będzie dłużej

Co do szczegółow, */usr/src/linux-x.y.z/Documentation/networking/bonding.txt ,*tu postaram sie opisać w skrócie

**** –  balance-rr – Wysyła round-robin z każdej sieciowce w bond, odbiera na jednej
1 – active-backup – Jeden działa reszta na failoverze
**2 – **balance-xor – Wysyła na wszystkich odbiera na jednym, który klient bedzie dostawał z której sieciówki zależy os sposobu hashowania, więcej w dokumentacji
**3 – **broadcast – Wysyłaj każdy pakiet na wszystkich interfejsach, z wyjatkiem bardzo specyficzych zastosowań mało użyteczne
**4 – **802.3ad – IEEE 802.3ad Dynamic link aggregation. Nie mam switcha z tym więc wiele nie mogę o tym powiedzieć. Jedyny tryb w którym wymagane jest wsparcie switcha
**5 – **balance-tlb – Podobne do round-robin ale bierze pod uwagę zajętość i prędkośc interfejsów, np. w przypadku gdy jedna karta ma 100MBit a inna 1GBit
**6 – **balance-alb- To co powyżej + balancing ruchu przychodzącego, działa w taki sposób że bond podaje różne adresy mac (przez ARP) różnym klientom tak że klient1 dostaje mac pierwszej sieciówki a klient2 drugiej. W wypadku padu którejś rozsyła po sieci nowe info ARP więc klienci którzy mieli parę IP-MAC padniętej sieciówki przełaczą się na inną.

W sumie najbardziej przydatnymi wydają się **** i 6 ;]

Konfiguracja interfejsów

Najpierw instalujemy ifenslave
aptitude install ifenslave-2.6

Odpalenie bonda wygląda następująco:

  • Konfigurujemy interfejs ifconfig bond0 1.2.3.4 up
  • podnosimy sieciówki ifconfig eth0 up ;ifconfig eth2 up
  • dodajemy sieciówki do bonda ifenslave bond0 eth0;ifenslave bond0 eth2

I tyle ;] wyłączamy odwrotnie, najpierw odczepiamy sieciówki przez ifenslave -d bond0 eth0, potem wyłączamy bond0

A tak to wygląda po wrzuceniu do /etc/network/interfaces:

iface bond0 inet static
address 1.2.3.4
netmask 255.255.255.0
gateway 1.2.3.1
pre-up /sbin/ifconfig eth0 up
pre-up /sbin/ifconfig eth2 up
post-up /sbin/ifenslave bond0 eth0
post-up /sbin/ifenslave bond0 eth2
pre-down /sbin/ifconfig eth0 up
pre-down /sbin/ifconfig eth2 up
pre-down /sbin/ifenslave -d bond0 eth0
pre-down /sbin/ifenslave -d bond0 eth2
down /sbin/ifconfig bond0 down

iface bond1 inet static
address 5.4.3.2
netmask 255.255.255.0
gateway 5.4.3.1
pre-up /sbin/ifconfig eth1 up
pre-up /sbin/ifconfig eth3 up
post-up /sbin/ifenslave bond1 eth1
post-up /sbin/ifenslave bond1 eth3
pre-down /sbin/ifconfig eth1 up
pre-down /sbin/ifconfig eth3 up
pre-down /sbin/ifenslave -d bond1 eth1
pre-down /sbin/ifenslave -d bond1 eth3
down /sbin/ifconfig bond1 down

Teraz tylko sprawdzić przełączając kabel z jednej dziurki do drugiej i gotowe ;]