Ethernet Bonding: come garantire ridondanza e/o massimizzare la banda disponibile

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

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 raddoppiare 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

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:

# modprobe --list | grep 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 e non prevede switch di rete con particolari funzionalità;
  • 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;
  • 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 e non necessita di particolati switch;
  • mode=3 (broadcast): vengono usate tutte le interfacce per trasmettere e ricevere. Il fault tolerance è garantito senza switch preposti;
  • 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;
  • mode=6 (balance-alb): Adaptive Load Balancing. Fornisce bilanciamento del carico sia in ricezione che in trasmissione. Non necessita di switch particolari, ma richiede la capacità di cambiare l’indirizzo MAC del dispositivo di rete senza che questo interrompa il traffico.

Installazione

Il bonding su Linux è gestito dal programma ifenslave:

apt-get install ifenslave-2.6

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

Aggiornate la lista dei moduli caricati:

# update-modules

e riavviate il sistema di networking (oppure il sistema intero) e controllate eventuali messaggi d'errore al boot:

# /etc/init.d/networking restart

Installazione alternativa

Il bonding su Linux è gestito dal programma ifenslave:

# apt-get install ifenslave-2.6

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>
bond_mode <modalità_di_bonding_preferita>
bond_miimon 100
bond_downdelay 200
bond_updelay 200
slaves eth0 eth1

Tra le modalità di bonding configurabili, vi consiglio la modalità balance-rr o active-backup, e vi ricordo che è importante commentare o cancellare i riferimenti alla schede di rete reali.
Fatto questo riavviamo il sistema di networking con:

# /etc/init.d/networking restart



Ferdybassi