Site icon Tosolini.info

Ubuntu Server, Bonding (trunk link aggregation)

Vediamo come aggregare due schede di rete (anche conosciuto come trunk aggregation,  link aggregation, o teaming sotto windows) in un link unico. I vantaggi sono molteplici, come molte sono le possibilità di scelta del tipo di aggregazione dei link. Le due principali sono active – backup (anche conosciuta come active – failover) o di affasciamento attraverso il protocollo 802.3ad. La scelta dipende dalla tipologia di switch/router di rete che avete a disposizione.  Ad esempio la disponibilità degli apparati di rete a supportare il protocollo 802.3ad. Di seguito tutte le possibilità offerte dal bonding:

balance-rr

Round-robin: vengono trasmessi in sequenza dei pacchetti sulle schede di rete. In caso di mancata risposta verrà assicurato un load-balancing e una politica di fault tolerance. Tuttavia alcuni pacchetti possono venire persi poiché il round-robin appunto tenterà in modo sequenziale l’efficenza della scheda di rete guasta. Poco utilizzato.

active-backup

Active-backup: Una delle schede di rete sarà attiva, mentre le altre saranno considerate di backup. Le schede di backup diventeranno attive se la principale fallisce. Rispetto al round-robin il MAC address del bonding fornito sarà visibile solo ed esclusivamente ad una porta, ovvero quella attiva. In tale maniera viene aiutato il lavoro degli switch che potranno inoltrare correttamente con più facilità i pacchetti anche dopo lo scambio delle schede di rete. Molto utilizzato.

balance-xor

XOR : è una versione di mezzo tra active-backup e round-robin. Il Mac address viene trasmesso su tutte le schede per avere la medesima destinazione in arrivo. Questa modalità offre load balancing e fault tolerance. Poco utilizzato.

Mode 3 :broadcast

Broadcast : Trasmette su tutte le interfacce di rete, assicurando il fault tolerance, ma utilizzando al massimo la velocità di una scheda di rete. Poco utilizzato.

802.3ad

IEEE 802.3ad Dynamic link aggregation. Crea un gruppo di aggregazione che condivide la stessa velocità e caratteristica di Duplex. Il vantaggio di questa modalità è che si può raddoppiare la velocità/disponibiltà di rete nel sistema operativo, utilizzando appunto le caratteristiche di banda di due o più schede di rete in condizioni di normale utilizzo, mentre in caso di guasto viene assicurato il fault tolerance. Il protocollo 802.3ad assicura il costante monitoraggio di buon funzionamento delle schede di rete, sia lato client che server. Molto utilizzato.

Prerequisiti:
Pacchetto Ethtool per la configurazione del Duplex o la velocità in caso di diverse marche di schede di rete, al fine di armonizzare le caratteristiche.

Switch compatibile con il protocollo IEEE 802.3ad Dynamic link aggregation.

balance-tlb

Trasmissione adattativa in load balancing: Il canale viene aggreagato ma non richiede nessuna particolarità lato switch. Il traffico in uscita è distribuito in base al carico (stabilità dalla velocità di rete) su ogni scheda. Il traffico in entrata sarà ricevuto solo da una scheda. Se la scheda va in blocco, la successiva prenderà in carico il MAC address per completare la richiesta. Poco utilizzato.

Prerequisiti:
Ethtool per ottenere la velocità di ogni scheda di rete.

balance-alb

Load balancing adattativo: include il metodo precedente con l’aggiunta del carico di load balancing (modalità rlb per IPV4) e non richiede nessuna particolarità lato switch. Le richieste vengono bilanciate attraverso una negoziazione ARP. Il bonding intercetterà la riposta ARP e riscriverà la sorgente dell’indirizzo hardware con una unica per tutte le schede “schiave” del bond. Ovviamente il tempo di processamento rallenta la velocità di esecuzione sul server. Poco utilizzato.

Ora vediamo come possiamo implementarlo sul nostro sistema, tenendo conto che sarà necessario resettare la configurazione di rete, quindi dovrete utilizzare la console oppure una scheda di rete appositamente creata per l’amministrazione. Se lo farete dalla connessione SSH a cui andrete ad applicare la configurazione vi taglierete fuori dall’accesso del server!!
Provvediamo a scaricare il pacchetto di bonding:


sudo apt-get install ifenslave

Nel caso vogliate eseguire il bonding di tipo 802.3AD o balance-tlb occorre anche il pacchetto ethtool


sudo apt-get install ethtool

A questo punto dobbiamo aggiungere il supporto del bonding al kernel. Basterà editare il file /etc/modules aggiungendo all’ultima riga il valore bonding come nell’esempio sottostante:


# /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.
loop
lp
rtc
bonding

Ora spegneremo la, o le, schede di rete attive.


sudo stop networking

Quindi ricarichiamo il modulo del kernel, dopo la modifica di /etc/modules


sudo modbrope bonding

Finalmente possiamo editare le nostre schede di rete per il bonding, con il classico


vi /etc/network/interfaces

La configurazione, come vedremo, cambia a seconda del metodo utilizzato (active-failover, 802.3ad eccetera) ma sostanzialmente è molto simile alla configurazione classica della scheda di rete di Ubuntu, con qualche piccola aggiunta di qualche parametro. Ovviamente la configurazione di ogni singola scheda di rete permane nel sistema, va solo indicato a quale bonding essa va associata. Potenzialmente infatti potremo avere più bond, ma è una soluzione che personalmente non ho mai visto ne sperimentato.

Vediamo una configurazione base impostata per lavorare in modalità active-failvoer:


#eth0 configurata manualmente, come utilzzo primario in active.
auto eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0

#eth1 seconda scheda, in genere backup, di bond0.
auto eth1
iface eth1 inet manual
bond-master bond0

# bond0 e' a tutti gli effetti una scheda di rete.
# bond0 e' configurata per essere utilizzata con indirizzo statico.
auto bond0
iface bond0 inet static
address 192.168.1.10
gateway 192.168.1.1
netmask 255.255.255.0
bond-mode active-backup
bond-miimon 100
bond-slaves none

Come potete vedere le schede di rete eth0 e eth1 sono state associate a bond0 attraverso la riga bond-master bond0, mentre in bond0 è stato definito il metodo active-backup attraverso la riga bond-mode active-backup

Ora verifichiamo invece l’altro esempio, quello relativo all’802.3ad


#eth0 configurata manualmente come interfaccia di bond0
auto eth0
iface eth0 inet manual
bond-master bond0

#eth1 crea il secondo link a bond0
auto eth1
iface eth1 inet manual
bond-master bond0

# bond0 e' a tutti gli effetti una scheda di rete.
# bond0 e' configurata per essere utilizzata con indirizzo statico.
auto bond0
iface bond0 inet static
address 192.168.1.10
gateway 192.168.1.1
netmask 255.255.255.0
# bond0 usa lo standard IEEE 802.3ad LACP bonding protocol
bond-mode 802.3ad
bond-miimon 100
bond-lacp-rate 1
bond-slaves eth0 eth1

Anche in questo caso si nota come le schede di rete siano affiliate a bond0, ma a differenza dell’active-slave eth0 non è indicata come master. Viceversa in bond0 vi sono molti più parametri, tra cui il bond-mode e sopratutto la dichiarazione delle eth in bond-slaves.

Ora vediamo come padroneggiare questa nuova scheda di rete, che per l’appunto si chiama bond0. Innanzitutto accendiamo la rete:


sudo start networking

se tutto è andato ok, dovremo vedere con il comando ifconfig la nostra nuova interfaccia nell’elenco. Nel caso dell’802.3ad sarà interessante anche vedere lo stato di salute ed altre informazioni. Queste sono registrate all’avvio nel file /proc/net/bonding/bond0 , con un semplice cat potrete visionarne l’interno.

Altresì potrete accendere o spegnere la singola interfaccia di bond proprio come fareste per le singole eth. I comandi sono i soliti:


ifdown bond0
ifup bond0

Si raccomanda di spegnere ogni volta la connessione di rete prima di effettuare qualsiasi cambiamento al file /etc/network/interfaces e provare ad effettuare un riavvio al termine dei lavori per controllare che tutto sia a posto.

Exit mobile version