Ethernet Bonding: come garantire ridondanza e/o massimizzare la banda disponibile
Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.
Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione. |
Versioni Compatibili Debian 6 "squeeze" Debian 7 "wheezy" Debian 8 "jessie" |
Introduzione
In ambiente server Windows si parla generalmente di teaming riguardo alla configurazione di due o più schede di rete in modo che siano viste come una sola. Gli obiettivi sono quelli di aumentare la banda disponibile, di garantire un bilanciamento di carico tra le varie schede di rete e garantire una maggior sicurezza, visto che se una delle schede di rete ha problemi, ci sono le altre a garantire che la trasmissione non cada.
Per lo stesso concetto su Linux si parla invece di bonding, che è perciò un sistema per avere due o più interfacce di rete legate in modo da apparire come una unica interfaccia fisica, o, per dirla con altre parole, un sistema che ha lo scopo di unire due o più flussi ethernet al fine di formare un unico canale.
Requisiti Generali
Prima di iniziare, è altamente raccomandata una verifica sull'integrità e la funzionalità delle singole schede di rete. Lanciando il comando 'mii-tool' dovreste vedere qualcosa di simile:
# mii-tool eth0: negotiated 100baseTx-FD, link ok eth1: negotiated 100baseTx-FD, link ok
Per far sì che il bonding funzioni, il kernel deve avere il supporto per il bonding delle periferiche:
# modinfo -n bonding /lib/modules/2.6.20-16/kernel/drivers/net/bonding/bonding.ko
Tipi di bonding
Esistono diversi tipi di bonding, relativi a come il kernel gestirà i flussi di dati in entrata e in uscita dal sistema:
mode=0 (balance-rr)
: viene configurato un round-robin tra le due interfacce. I pacchetti vengono trasmessi attraverso la scheda di rete scarica e se una delle due va KO viene usata solo la scheda di rete funzionante. Questa modalità fornisce sia il load balance e sia il fault tolerance, ma richiede che tutto il traffico passante per il bond converga prima o poi in uno stesso switch;mode=1 (active-backup)
: una sola schede di rete viene usata. Se questa si rompe il MAC address viene associato all'altra funzionante (di backup) e quindi il flusso di rete viene garantito. Questa modalità fornisce un sistema di fault tolerance e non è necessario uno switch che abbia funzionalità avanzate. Questa modalità è utile solo per garantire ridondanza.mode=2 (balance-xor)
: il traffico di rete viene inoltrato sulla scheda in base a questa regola di XOR: ((source MAC) XOR (dest MAC)). Questa modalità garantisce load balance e fault tolerance;mode=3 (broadcast)
: vengono usate tutte le interfacce per trasmettere e ricevere, il fault tolerance è garantito senza switch preposti. Questa modalità è di norma utile nel caso sia necessario servire due o più gruppi di host tra loro indipendenti;mode=4 (802.3ad)
: è una modalità di supporto allo standard IEEE 802.3ad Dynamic link aggregation. È necessario uno switch che supporti lo standard 802.3ad;mode=5 (balance-tlb)
: Adaptive Transmit Load Balancing. Il traffico in entrata è ricevuto solo sullo slave attivo, il traffico in uscita viene distribuito a seconda del carico su ogni slave. Non necessita di particolari switch, ma è necessario che il traffico passante per il bond possa raggiungere ogni destinazione possibile a prescindere dalla scheda fisica effettivamente usata per trasmettere un certo pacchetto dati;mode=6 (balance-alb)
: Adaptive Load Balancing. Fornisce bilanciamento del carico sia in ricezione che in trasmissione. Valgono limiti e benefici indicati per il modo 5, inoltre richiede la capacità di cambiare l’indirizzo MAC del dispositivo di rete senza che questo interrompa il traffico.
Requisiti degli switch
Con "switch" si può intendere sia un dispositivo switch vero e proprio che un altro computer Linux, il termina identifica cioè il dispositivo in cui confluiscono i cavi delle schede componenti il bond.
- Modalità 1, 5, 6: nessun requisito.
- Modalità 0, 2, 3: possibilità di "raggruppare" le singole porte dello switch.
- Modalità 4: supporto per lo standard 802.3ad, possibilità di "raggruppare" le singole porte dello switch e altre eventuali in base allo specifico modello.
Installazione
Il bonding su Linux è gestito dal programma ifenslave
.
Per Debian 7 (Wheezy) e precedenti, con privilegi di amministrazione basta:
# apt-get install ifenslave-2.6
Mentre a partire da Debian 8 (Jessie):
# apt-get install ifenslave
Configurazione
Interfaces/modprobe.d
La configurazione vera e propria del networking viene fatta, come sempre, tramite il file /etc/network/interfaces
. Supponendo che eth0 ed eth1 siano le schede ethernet presenti sulla nostra Debian box:
auto bond0 iface bond0 inet static address <indirizzo_ip> netmask <subnetmask> network <indirizzo_di_rete> gateway <ip_del_gateway> up /sbin/ifenslave bond0 eth0 eth1 down /sbin/ifenslave -d bond0 eth0 eth1
Commentate eventuali riferimenti alle schede fisiche presenti nel file, quindi salvate.
Aprite ora il file /etc/modprobe.d/arch/i386
(per architetture i386), oppure /etc/modprobe.d/arch/x86_64
(per architetture a 64 bit) e aggiungete le seguenti righe:
alias bond0 bonding options bonding mode=1 miimon=100 downdelay=200 updelay=200
Riavviate il sistema di networking (oppure il sistema intero) e controllate eventuali messaggi d'errore al boot:
# service networking restart
Solo interfaces
auto bond0 iface bond0 inet static address <indirizzo_ip> netmask <subnetmask> network <indirizzo_di_rete> gateway <ip_del_gateway> bond_mode <modalità_di_bonding_preferita> bond_miimon 100 bond_downdelay 200 bond_updelay 200 bond-slaves eth0 eth1
Fatto questo riavviamo il sistema di networking con:
# /etc/init.d/networking restart
Sintassi alternativa
auto bond0 iface bond0 inet static address <indirizzo_ip> netmask <subnetmask> network <indirizzo_di_rete> gateway <ip_del_gateway> bond_mode <modalità_di_bonding_preferita> bond_miimon 100 bond_downdelay 200 bond_updelay 200 bond-slaves none auto eth0 iface eth0 inet manual bond-master bond0 auto eth1 iface eth1 inet manual bond-master bond0
In questo caso si deroga a quanto scritto in inizio sezione, ovvero relativamente alla necessità di eliminare qualsiasi riferimento alle interfacce da includere in bond0.
Note finali
- In una rete con singolo switch è inutile optare per una configurazione pensata per garantire ridondanza, questo perché le stesse configurazioni per massimizzare la banda sono in grado di gestire guasti alle singole interfacce. In tale topologia la modalità 5 non presenta vincoli di sorta.
- In una rete con più switch se il fine è garantire ridondanza si consiglia l'utilizzo della modalità
active-backup
, in caso contrariobalance-rr
. - Relativamente al parametro bond-slaves è possibile usare il valore all per includere automaticamente tutte le interfacce di rete fisiche presenti.
Approfondimenti
Documentazione
/usr/share/doc/ifenslave-2.6/README.Debian.gz
Sitografia
Guida scritta da: Ferdybassi | Debianized 40% |
Estesa da:
| |
Verificata da:
| |
Verificare ed estendere la guida | Cos'è una guida Debianized |