Bonding 802.3ad nefunguje

creco

Bonding 802.3ad nefunguje
« kdy: 24. 05. 2014, 13:41:13 »
Zdrávím všechny,
mám server kterému už 1Gbits nestačí, proto jsem se rozhodl o spojení dvou síťových karet (bonding) tak abych získal větší propustnost. Bonding mě sice funguje ale chová se divně, data tečou buď přes jednu síťovku nebo přes druhou ale nikdy současně. K serveru je připojeno cca 1000 lidí současně takže bych čekal že se zátěž rozprostře mezi obě dvě síťové karty. Máte někdo zkušenost? Poradíte někdo?

Na straně switche je podpora IEEE 802.3ad. Síťová karta je Intel Ethernet I350-T4. Operační systém je ubuntu 12.04 64bit.

cat /etc/network/interfaces
#eth0 is manually configured, and slave to the "bond0" bonded NIC
auto eth2
iface eth2 inet manual
bond-master bond0

#eth1 ditto, thus creating a 2-link bond.
auto eth3
iface eth3 inet manual
bond-master bond0

# bond0 is the bonded NIC and can be used like any other normal NIC.
# bond0 is configured using static network information.
auto bond0
iface bond0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
# bond0 uses standard IEEE 802.3ad LACP bonding protocol
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
bond-slaves eth2 eth3
bond-xmit_hash_policy layer3+4



cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
        Aggregator ID: 1
        Number of ports: 1
        Actor Key: 17
        Partner Key: 1
        Partner Mac Address: 00:00:00:00:00:00

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: a0:36:9f:3f:0c:0c
Aggregator ID: 2
Slave queue ID: 0

Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: a0:36:9f:3f:0c:0d
Aggregator ID: 1
Slave queue ID: 0
« Poslední změna: 26. 05. 2014, 17:49:11 od Petr Krčmář »


M.

Re:Máte někdo zkušenost s bondingem 802.3ad
« Odpověď #1 kdy: 24. 05. 2014, 14:41:09 »
Směrem k tobě do toho serveur, je to věc switche před tím, jak to bude rozhazovat mezi linky (u slušnějších to jde nakonfigurovat). Směrem ze serveru ke klientům ti to říká to bond-xmit_hash_policy layer3+4. Takže jde o štestí, do kterého interface dané spojení padne (jedno spojení vždy využívá jen jednu linku). S trochu smůly ti stejně tou politikou to může všechno padat do jedné linky (nebo hodně asymetricky).

creco

Re:Máte někdo zkušenost s bondingem 802.3ad
« Odpověď #2 kdy: 24. 05. 2014, 23:34:41 »
Směrem k tobě do toho serveur, je to věc switche před tím, jak to bude rozhazovat mezi linky (u slušnějších to jde nakonfigurovat). Směrem ze serveru ke klientům ti to říká to bond-xmit_hash_policy layer3+4. Takže jde o štestí, do kterého interface dané spojení padne (jedno spojení vždy využívá jen jednu linku). S trochu smůly ti stejně tou politikou to může všechno padat do jedné linky (nebo hodně asymetricky).

Takhle mě je divné že se to cca každých 15 sekund přepíná z jedné síťovky na druhou. Zatímco jedna linka je používaná na druhé se neodešle ani packet.

Co se stane až bude jedna sítovka plně využivá? Začnou se data automaticky posílat přes tu druhou? Dá se ještě nějak upravit ta konfigurace bondigu? Můžete mi někdo poslat vaší konfiguraci bondingu abych to mohl porovnat?

MilanK

Re:Máte někdo zkušenost s bondingem 802.3ad
« Odpověď #3 kdy: 25. 05. 2014, 08:41:00 »
Podle toho "Partner Mac Address: 00:00:00:00:00:00" to vypadá, že na switchi není zapnut LACP. Je to také vidět v "Number of ports: 1". Pokud LACP nedetekuje protokol u svého protějšku, tak aktivuje jen jeden port.

rats

Re:Máte někdo zkušenost s bondingem 802.3ad
« Odpověď #4 kdy: 25. 05. 2014, 13:19:28 »
Zaprvé: Vykašli se na LACP. Je to peklo, které si často dělá úplně co chce, a to s největší pravděpodobností vlivem podivné implementace v některých switchích - zvolil sis vůbec nejhorší možnou cestu k jinak celkem jednoduchému cíli, a dle tvého výpisu to evidentně na straně switche nedělá, co dělat má... Své studium začni tady:
https://www.kernel.org/doc/Documentation/networking/bonding.txt

Pokud se nechceš laděním LACP zdržovat, udělej to staticky:

auto bond0
iface bond0 inet static
address XXX
netmask XXX
network XXX
gateway XXX
slaves eth1 eth2
bond_mode 0 (balance-rr) = protože chceš pouze rozkládat zátěž, tedy nepotřebuješ failover (jako ten to ale funguje také) ani žádné další zvláštní funkce, které bonding umožňuje

eth1 a eth2 nepotřebují mít v souboru "interfaces" žádnou specifickou konfiguraci, stačí, že existují, a k jejich nahození dojde v momentě nahození bondu.

Na straně switche to sice pak také není úplně snadné, protože každý switch používá trochu jiný způsob konfigurace a trochu jinou terminologii, nicméně statický load-sharing mezi sdruženými porty lze udělat na drtivé většině (na některých dokonce ani žádný jiný!) Některé L3 switche ještě umožňují vybrat a nastavit, jak se má load-balancing dělat, zda na základě zdrojové/cílové IP adresy nebo zdrojové/cílové MAC adresy - tuhle úvahu nechám zcela na tobě, volba správné varianty výrazně záleží na struktuře a typu provozu, který přes síťové karty běží.

Že to doopravdy funguje jak má, nejlépe poznáš ve výpisu "ifconfig -a" (sorry, vážení příznivci "ip", tohle prostě funguje, tak není třeba vymýšlet, jak to udělat pomocí "ip"), kde bude provoz velmi přesně rozdělen rovným dílem mezi všechny bondované interfacy.

Na straně switche je pak totéž vidět v libovolné statistice bondovaných rozhraní. Pozor pouze na problém srovnávání srovnatelného - Frames vs. Packets vs. Bytes....


creco

Re:Máte někdo zkušenost s bondingem 802.3ad
« Odpověď #5 kdy: 25. 05. 2014, 13:27:14 »
Kluci dekuju, opravdu byl problem na strane switche a uz to funguje =))

anonym

Re:Máte někdo zkušenost s bondingem 802.3ad
« Odpověď #6 kdy: 25. 05. 2014, 17:35:13 »
Zaprvé: Vykašli se na LACP. Je to peklo, které si často dělá úplně co chce
provozuju bonding s LACP a nemam s tim problem. IIRC hlavni vyhoda je v tom ze LACP standardizuje jak se provadi inicialni handshake, pro potvrzeni ze vsechny kabely jsou zapojene do jednoho switche (a ze jsou opravdu zapojene).

sorry, vážení příznivci "ip", tohle prostě funguje, tak není třeba vymýšlet, jak to udělat pomocí "ip"
"ip -s l" by melo byt to co hledas ;)

M.

Re:Máte někdo zkušenost s bondingem 802.3ad
« Odpověď #7 kdy: 26. 05. 2014, 07:58:29 »
Jen počítej, že u toho LACP je jedno spojení posíláno vždy jednou linkou, takže nevyrazíš z jedoho spojení víc, jak ten gigabit. A jakou linku použijí data se neurčuje dle zátěže, ale dle toho bond-xmit_hash_policy layer3+4. S hodně smůly se ti může skoro vše posílat jen jendou linkou, ale obvykle se to nějak podělí. Jinak režim layer3+4 nesplňuje LACP specifikaci, ale obvykle to ničemu nevadí.
Já používám LACP s chutí tam, kde mám chytřejší switche s podporou split multilink (každý kabel trrunku končí v jiném switchi).
To navrhované řešení s "bond_mode 0 (balance-rr) " občas dělá dost problémy, protože při něm občas dochází k častějšímu zpřeházení paketů mezi sebou jendoho spojneí, což ve výsledku jedno spojení zpomalí místo toho, aby ho zrychlilo. A to pomíjím, že nejeden ošulený IP stack v některých embedded krabičkách se s tím vůbec nevyrovná a neumí si dělat reording paketů zpět, tak pak to jde hóóóódně pomalu.