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
Device Drivers-->
Network Device Support -->
Bonding driver support
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
0 - 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ę 0 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 ;]


6 ResponsesLeave a comment ?
Jak jedna sieciówka pójdzie, to nie wiadomo, czy tylko sieciówka. Czas na dwie maszyny i CARP.
Yeah, tylko najpierw trzeba te maszyny mieć ;]. Serwer powstaje dla klienta i o ile średnio mi się podoba w jaki sposób chcą to mieć zrobione, to robię na tym co mam dostępne najlepiej jak potrafię :). Chociaż znając życie to po pierwszym “padzie” loadbalancera od razu znajdzie się kasa na zapasowy ;].
Swoją szosą zawsze mnie zastanawiało, ile trzeba się nadoktoryzować pod Linuksem, aby zrobić coś, co na innych platformach sprowadza się np. do:
# ifconfig bge0 up
# ifconfig bge1 up
# ifconfig trunk0 trunkproto loadbalance trunkport bge0 trunkport bge1 192.168.1.1 netmask 255.255.255.0
(więcej: http://www.openbsd.org/cgi-bin/man.cgi?query=trunk&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html )
Ostatnio musiałem się doktoryzować z cpufreqd: taki moduł, taki governor, podefiniowanie profili, a dlaczego ten skubaniec startuje w trybie performance, itp… podczas gdy w moim ulubionym systemie wklepałem magiczne /usr/sbin/apmd -C i uzyskałem ten sam efekt.
To samo co pod linuksem, podnieśc dwa interfejsy i dodać je do bonda, potem ustawić bonowi ip, tyle że parę więcej komend i trochę bardziej przejrzyście ;]
Z cpufreq (ogólnie, nie demonem, nie używam tego) nigdy nie miałem problemu, na lapku domyśnie łapie w trybie ondemand (pełna moc jak jest obiążenie, jak brak spada do minimum) a jak trzeba cos dostroic wszystko jest w /sys/devices/system/cpuX, ale to robilem tylko na serwerze w innych wypadkach nie bylo potrzeby.
A *BSD odkąd zabaczyłem NetBSD nie chcącego routować tak jak mu kazałem to staram się trzymać od *BSD jak najdalej (jak każę systemowi routować do x przez y to znaczy że mam jakiś powód ku temu i mam w dupie że kernel myśli że jak oleje moje regułki to będzie lepiej)
Nawojowałem się z cpufreqd, być może należało olać daemona, zdoktoryzować się tylko z modułów (w sumie jest ich tylko kilka, wystarczy tylko pamiętać, który procesor z jakiego mechanizmu korzysta i załadować jeszcze właściwy governor, freq_table chyba załaduje sam :)) i poklikać po sysfs-ie. Ale to też jest takie harcerskie zrób to sam. Brakuje jeszcze ,,tu masz przykładowy kod w asemblerze i sobie dodziergaj”.
Wracając do bondingu/trunkingu/etherchannelu, jakoś zabawy z ładowaniem modułów z właściwym foo jako argumentem (a jak chcę dwa różne trunki jednocześnie, to co?), potem używanie kilku różnych poleceń do zarządzania interfejsem, nie uważam za przejrzyste :P
Da sie inny, ale tak, jest to raczej średnio intuicyjne. Co do cpufreq, w większości distro działa out of the box (nawet gnome miał jakiś applet do zmiany governorów lub ręczego ustawiania częstokliwości, a to że oprócz tego można sobie “ręcznie” ustawić dokładnie to co się chce bez zbędnego kombinowania to tylko zaleta ;].