Network bonding

Co je to network bonding?

Pojem „network bonding“ se mnohým může zdát nelehce přeložitelným a značně abstraktním, bez očividného významu. Ve skutečnosti je to ale skutečně jisté „síťové poutání“ (od slova „pouto“). Network bonding nám totiž umožňuje spojovat 2 sítě dohromady.

Nikoliv však zcela v tom stejném smyslu, jako to dělá síťový router. Ten totiž zpravidla 2 sítě, tedy tu vnější (síť Internet) a tu lokální (domácí/podnikovou), propojuje. My však nechceme 2 sítě propojovat, ale spojovat jistým poutem. A ve skutečnosti ani nemusí jít o spojení 2 sítí dohromady, ale jen připojení dvakrát do té samé sítě.

Oč tedy vlastně jde? Představme si modelovou situaci, kdy máme v provozu server s velmi důležitou aplikací, která musí být za všech okolností dostupná a tedy server vždy připojen k internetu. Namísto toho, abychom se spokojili s jedním poskytovatelem internetového připojení, si objednáme rovnou 2 linky od dvou nezávislých poskytovatelů, ideálně tak, aby oba poskytovatelé byli připojeni do jiného geograficky jinde umístěného uzlu peeringu.

Při výpadku jedné z linek nám tzv. network bonding zajistí, že server bude stále připojen do internetu pomocí druhého připojení. A vlastně se ani o network bonding v pravém slova smyslu nejedná, vždyť máme v serveru pouze zřízena dvě síťová rozhraní, řeknete si. A je to pravda.

Uplatnění network bondingu totiž sice může být v tomto tzv. fail-over řešení, kdy při selhání jedné linky bude stále fungovat druhá, ale ta pravá síla bondingu spočívá primárně v navýšení síťové propustnosti a odhlenčení jedné z linek pravidelným prokládáním síťového provozu.

Abychom tedy shrnuli, co to ten network bonding je, definujme si jej jako soubor různých metod pro vzájemné kombinování několika síťových připojení do jednoho. Tato síťová rozhraní se mohou nejen nahrazovat při výpadku jednoho nebo více z nich jinými, ale také pracovat současně a navýšit síťovou propustnost celého zařízení – serveru. Takovému kombinování říkáme agregace.

Historický kontext

S celosvětovým rozmachem internetu v 90. letech minulého století docházelo k poměrně rychlému, až skokovému, vývoji síťových standardů. Mnoho, primárně podnikových, uživatelů při tvorbě svých prvních vlastních lokálních sítí užívalo kabelů a portů, které byly vyrobeny a optimalizovány pro určité, předem dané, rychlosti internetu. Taková síťová propustnost nebyla vždy dogmatem, bylo ji možné při kratších délkách kabelů zvýšit, ale s rostoucími rychlosti internetu takové navyšování již nebylo udržitelné.

Vzhledem k tomu, jak nejen časově, ale hlavně finančně nákladné by bylo celé složité spleti firemních a malopodnikových sítí znovu přesíťovat a zmodernizovat kabely a porty novějších standardů umožňující vyšší propustnost, a tedy rychlejší síťovou komunikaci , přispěchali výrobci síťových zařízení s unikátním řešením. Vědomi si tohoto palčivého problému vymysleli právě síťový bonding.

Při zachování současných kabelů lze přidat další a vzájemně je zkombinovat. Data na lince tak potečou kupříkladu po dvou kabelech současně a zvýší se tím propustnost. Druhým řešením, které nebylo tak „hloupé“ v podobě dokupování levnějších pomalých kabelů, bylo přidávání nových ve směru od uživatelů k serveru.

Namísto toho, aby podnikový server komunikoval prostřednictvím jedné linky se všemi terminály v dané společnosti, byly jednotlivé terminály sdruženy namísto jedné velké skupiny do menších skupin, které byly připojeny přímo do serveru. Server tak mohl dedikovat plnou rychlost jedné linky menšímu počtu terminálů a samotných linek bylo do serveru připojeno více. Všechny terminály (koncové stanice např. zaměstnanců) tedy nesdílely jednu linku, ale např. celé jedno patro budovy disponovalo dedikovanou linkou k serveru.

Díky víceméně rovnoměrnému rozložení zátěže (za předpokladu, že všechny terminály by využívaly přístup k serveru rovnocenně) došlo k navýšení celkové rychlosti na všech terminálech zaměstnanců, a tedy k faktickému zvýšení rychlosti síťové komunikace i samotné práce zaměstnanců.

Na základě tohoto principu poté došlo i k dalším implementacím network bondingu, jakým je třeba už výše zmíněný fail-over, tedy převod provozu na jinou linku v případě selhání té primární. Protože šlo o revoluční řešení a každý výrobce jej chtěl nabízet, vyskytoval se v mnoha podobách a proprietárních standardech.

V roce 2000 proto IEEE (Institut pro elektrotechnické a elektronické inženýrství) zavedl nový univerzální standard 802.3ad využívající právě tohoto řešení a sjednocující řešení konkurenčních výrobců síťových zařízení. Tento standard od té doby nazýváme Link Aggregation Control Protocol, zkráceně LACP a nově je součástí skupiny standardu 802.1.

Režimy provozu síťového bondingu

V úvodní kapitole jsme si na dvou praktických příkladech ukázali, v čem nám network bonding dokáže pomoci. Aby to bylo přehledné, shrňme si tedy to zásadní, co již víme – spojení více síťových rozhraní (připojení) nám umožňuje

  • ochránit zařízení před výpadek jednoho z rozhraní - automatické přepnutí komunikace na druhé rozhraní - failover a
  • zvýšit propustnost primárně směrem od zařízení k jednotlivým zařízením (které tím mohou získat vyšší rychlost komunikace k danému zařízení), zjednodušeně jde o zvětšení šířky pásma - port-trunking.

Pojďme si nyní představit jednotlivé režimy network bondingu, kterých je celkem 6.

Mode 1 - active-backup

Zařízení, na kterém je network bonding dostupný, a tedy správně nakonfigurovaný v prvním režimu, tedy mode=1, musí disponovat alespoň dvěma síťovými rozhraními. Tento mód nám krásně demonstruje ukázka zmíněná v úvodu – server připojený ke dvěma poskytovatelům internetového připojení, přičemž jedno z nich je primární a druhé je záložní.

To druhé připojení nazýváme aktivní zálohou, podle toho se tak také tento režim jmenuje. Aktivně totiž využíváme pouze jedno síťové připojení, přes které teče veškerá síťová komunikace. Druhé síťové připojení je stále ve střehu připraveno převzít komunikaci serveru ve chvíli, kdy to první spadne a nebude na něm dostupný přístup do sítě (myslíme tedy k internetu).

Takovéto aktivní záložní připojení ale nemusí být pouze jedno, můžeme jich mít mnoho. A nemusíme mít nutně tolik internetových poskytovatelů, stačí mít třeba jednu primární trasu a dvě obchozí jinými směry. Při překopnutí kabelu vedoucího do našeho primárního síťového rozhraní bude komunikace pokračovat druhým v pořadí, poté třetím a tak dále.

Mode 2 - balance-xor

Tento druhý režim provozu se od toho prvního zásadně liší v tom, že komunikace probíhá na všech dostupných nakonfigurovaných síťových rozhraních současně. To znamená, že nejenom, že dochází k převzetí komunikace v případě selhání některého z připojení (failover), jak to umí mode=1 - active backup, ale také dochází ke zvětšení šířky datového síťového pásma.

Zvýšení potenciální rychlosti komunikace (propustnosti) je hlavní výhodou oproti základnímu prvnímu režimu. Navíc jde o inteligentní komunikaci, které v případě odchozí komunikace probíhá vždy pouze prostřednictvím té síťové karty, na níž byla komunikace zahájena. Nedochází tak ke ztrátě komunikace, kdy klient je dostupný pouze na jednom ze síťových rozhraní a nikoliv na všech současně.

Tento režim tak nabízí jak ochranu proti selhání jednoho nebo více síťových rozhraní/připojení, tak také tzv. load balancing, kdy komunikaci prokládá a rozprostírá mezi více síťových rozhraní současně, a tak všem současně odlehčuje.

Mode 3 - broadcast

Třetí mód funguje na principu broadcastu, což nám umožňuje posílat odchozí komunikaci na všechna rozhraní současně. Podobné chování můžeme nalézt například u síťového hubu, který je „hloupou“ variantou switche. Ten totiž posílá komunikaci pouze na port, na kterém se nachází cílové zařízení, což filtruje na základě MAC adresy. Hub funguje v broadcastovém režimu, tedy stejně jako mode=3 v síťového bondingu.

Veškerou komunikaci, kterou chce naše zařízení odeslat, pošle automaticky na všechna dostupná síťová rozhraní v daném seskupení síťových rozhraní.

Mode 4 - 802.3ad

Jak už jsme si vysvětlili v kapitole věnující se historickému kontextu, standard 802.3ad od IEEE institutu představuje unifikované standardizované řešení pro dynamické spojení více síťových rozhraní. V angličtině se standard označuje jako „dynamic link aggregation“.

Tento způsob spojení síťových karet umožňuje navýšit síťovou propustnost k serveru (nebo jinému zařízení) v síti. Představme si kupříkladu switch, který tento standard podporuje a bude na 4 gigabitových portech očekávat jedno zařízení. Na serveru, který připojíme ke switchi pomocí 4 síťových gigabitových karet a 4 rychlostně odpovídajících kabelů, tak jsme schopni vytvořit až čtyřgigabitové spojení.

Pochopitelně pokud switch bude disponovat všemi porty pouze jednogigabitovými, nebude moci jakékoliv další zařízení k switchi připojené se serverem komunikovat rychlostí 4 Gb/s, ale kdybychom ke switchi připojili vedle serveru další 4 zařízení, všechna k gigabitovým portům, bude moci každé komunikovat se serverem až rychlostí 1 Gb/s, za předpokladu ideálních podmínek. A nebude se tak celá jednogigabitová linka dělit mezi všechna zařízení (pokud bychom síťovou agregaci - network bonding - nepoužili).

Mode 5 - balance-tlb

Balance-tlb, kde zkratka „tlb“ označuje „transmit load balancing“, představuje v rámci pátého módu řešení pro efektivní vyvažování komunikace, jak již ostatně anglický překlad naznačuje.

Narozdíl od mode=2 (balance-xor), který odchozí komunikaci zasílá na stejné rozhraní, na níž byla přijata, dochází v praxi nastavením network bondingu do mode=5 k tomu, že provoz, který byl přijat na jedné síťové kartě, může být odeslán na jakékoliv jiné. Lze tedy říci, že dochází k přerozdělování odchozího provozu mezi síťové karty na základě jejich aktuálního vytížení. Nově odchozí provoz tak je odeslán kartou, která má aktuálně nejmenší zatížení.

Naopak příchozí provoz se vždy primárně směruje pouze na jednu kartu a až v případě jejího výpadku převezme její hlavní pozici karta jiná, a to ve spolupráci s nastavením switche.

Mode 6 - balance-alb

Šestý mód je velmi podobný tomu pátému s tím rozdílem, že se jedná o tzv. „adaptive load balancing“, zjednodušeně řečeno dochází k přerozdělování jak odchozí komunikace jako u balance-tlb, tak i příchozí komunikace. I zde pro oba provozy platí vzájemná zastupitelnost karet v případě selhání jedné nebo více z nich.

Konfigurace sdruženého síťového rozhraní

Dost bylo teorie, pojďme si to vyzkoušet! Vytvoříme si vlastní nové síťové rozhraní, které bude kombinovat 2 již existující fyzická rozhraní. Jen pozor, může se stát, že v průběhu konfigurace něco napoprvé nedopadne dobře, proto doporučuji provádět konfiguraci ve virtuálním prostředí. I kdyby to však skončilo nezdarem, stačí zařízení restartovat a provedené změny se resetují (zmizí). Aby se naše změny uložily trvale a přežily i restart zařízení, se naučíme později v této kapitole také.

Instalace bonding kernel modulu

Jako první ze všeho musíme nainstalovat kernelový modul, který nám umožní využívat samotný bonding. Instalaci provedeme pomocí příkazu

sudo apt-get install ifenslave

Po úspěšné instalaci je potřeba nainstalovaný bonding modul přidat do souboru /etc/modules, aby se při zavádění systému načetl. Stačí přidat na konec tohoto souboru název modulu, a to bonding

sudo nano /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
lp
rtc
bonding

Jakmile toto máme, soubor uložíme, opustíme prostředí textového editoru a vrátíme se zpět do promptu. Nyní by nám měl stačit restart zařízení, aby se modul načetl. Abychom tento zbytečně zdlouhavý proces přeskočili, můžeme jej načíst rovnou, a to pomocí příkazu

sudo modprobe bonding

Vytvoření spojeného rozhraní

V předchozí velké kapitole jsme si představili jednotlivé režimy network bondingu, mezi nejčastěji používaný patří jednoznačně mode=4, a to 802.3ad, který také nyní použijeme.

Chceme-li přidat nové síťové rozhraní typu bond s názvem bond0 a nastaveným módem 802.3ad, použijeme k tomu příkaz

sudo ip link add bond0 type bond mode 802.3ad

Jak je vidět, samotné zadávání parametrů příkazu je velice intuitivní. Nyní potřebujeme k nově vzniklému síťovému rozhraní pro network bonding přidat samotná fyzická rozhraní, v našem případě půjde o eth0 a eth1.

Uděláme to pomocí dvou příkazů

sudo ip link set eth0 master bond0
sudo ip link set eth1 master bond0

Nastavili jsme tato dvě rozhraní jako master (primární) pro bondovaný interface (rozhraní) bond0.

Permanentní uložení bondovaného rozhraní

Výše uvedeným postupem jsme vytvořili nové spojené rozhraní, které nám vydrží jen do následujícího restartu zařízení. Poté bychom jej museli nakonfigurovat znovu, což zpravidla nechceme. Naopak chceme, abychom jednou nakonfigurované zařízení měli k dispozici i v budoucnu.

V takovém případě otevřeme v libovolném editoru soubor ​​/etc/network/interfaces, například takto

sudo nano /etc/network/interfaces

A přidáme následující řádky, které zajistí totožnou konfiguraci, jako v případě dočasného nastavení uvedeného výše

auto bond0
iface bond0 inet dhcp
      bond-mode 4
      bond-miimon 100
      bond-primary eth0 eth1

Novým parametrem, s nímž jsme se dosud nesetkali, je zde bond-miimon. Jeho hodnota, v tomto případě 100, stanovuje, v jakém milisekundovém intervalu se má zjišťovat aktuální stav spojovaných síťových rozhraní pro případ, že by některé z nich nebylo dostupné.

Nyní už stačí jen restartovat síťového manažera, aby se změny projevily a bondovaný interface je připravený k použití.

service networking restart

Shození a nahození síťového rozhraní

S bondovaným síťovým rozhraní můžeme pracovat skoro stejně, jako s kterýmkoliv jiným, takže je možné jej také shodit nebo nahodit pomocí příkazů

ip link set dev bond0 up

nebo

ip link set dev bond0 down

Zjištění aktuálního stavu síťového rozhraní

V závěru si ještě můžeme zjistit aktuální stav nově nakonfigurovaného rozhraní pomocí

cat /proc/net/bonding/bond0

results matching ""

    No results matching ""