Ethernet bonding w Linuksie
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 ;]