Ethernet Bonding: mode 1 Active-Backlup

In questo infobox verra' descritto come configurare in bonding le interfacce di rete di un sistema Linux (Debian nel caso specifico). Tramite questa tecnica e' possibile raggruppare piu' interfacce fisiche in un'interfaccia logica in modo da distribuire il carico su piu' schede anziche' una sola oppure mettere in atto meccanismi di fault-tolerance.    

In particolare, esistono diverse modalita' di bonding, caratterizzate da meccanismi di funzionamento differenti:    

- Mode 0, Balance RR    
- Mode 1. Active-Backup    
- Mode 2, Balance XOR    
- Mode 3, Broadcast    
- Mode 4, 802.3ad    
- Mode 5, Balance TLB    
- Mode 6, Balance ALB    

Nella configurazione descritta viene utilizzata la modalita' Active Backup, ove e' attiva una sola interfaccia, mentre l'altra resta in "standby" pronta a subentrare in caso di problemi alla scheda primaria. Questa modalita, inoltre, non richiede particolari modifiche alla configurazione degli switch coinvolti.    
La configurazione presentata viene al momento utilizzata per un bilanciatore dove ho voluto garantire un minimo di ridondanza al fine di erogare il servizio anche in caso di problemi alla scheda attiva in quel momento.    

Innanzitutto e' necessario installare il package ifenslave, che consente di aggiungere e rimuovere interfacce slave ad un device in bonding:    

apt-get install ifenslave-2.6    

Per potere configurare delle schede di rete in bonding, inoltre, e' necessario che nel kernel sia abilitato il supporto per questa funzionalita'. Nel caso di Debian Lenny il kernel standard include gia' un modulo per questa funzionalita' che puo' essere caricato con il comando modprobe bonding.    
In alternativa, al fine di automatizzare l'operazione ad ogni avvio del sistema e' preferibile inserire la seguente linea in /etc/modules:    
    
bonding    
    
Il modulo, inoltre, richiede che gli vengano passati alcuni parametri sulla linea di comando di modprobe. Poiche' ho preferito fare in modo che esso venga caricato automaticamente al boot del sistema, tali opzioni sono state inserite nel file /etc/modprobe.d/arch/i386:    
  
alias bond0 bonding    
options bonding mode=1 miimon=100 downdelay=200 updelay 200    
    
L'opzione mode specifica la tipolgia di bonding da utilizzare (nel caso Active/Backup), miimon indica invece ogni quanti millisecondi il link di ogni slave viene verificato al fine di identificare eventuali failure. Infine downdelay e updelay indicano rispettivamente quanti millisecondi attendere prima di disabilitare uno slave dopo che sia stato verificato un link failure e quanto attendere prima di riabilitarlo dopo che il link sia ritornato disponibile.    
In caso siano necessarie piu' interfacce logiche in bonding, e' possibile aggiungere altri alias al file /etc/modprobe.d/arch/i386 (ad es. alias bond1 bonding.    

Una volta modificato il file eseguire il comando depmod -r.      

Infine, dopo avere abilitato il bonding e' necessario configurare l'interfaccia bond0 ed aggiungere le interfacce fisiche al bond con il comando ifenslave. Anziche' utilizzare ifconfig ed ifenslave da command line e' possibile modificare il file /etc/network/interfaces commentando le entries relative alle varie eth ed aggiungendo la parte riguardante l'interfaccia bond0:    
  
        auto bond0    
        iface bond0 inet static    
        address 10.62.1.164    
        netmask 255.255.255.192    
        network 10.62.1.128    
        gateway 10.62.1.129    
        up /sbin/ifenslave bond0 eth0 eth1    
        down /sbin/ifenslave -d bond0 eth0 eth1    
    
In questo modo la configurazione verra' memorizzata in modo da potere  essere riapplicata anche dopo eventuali reboot del sistema.    

Per verificare lo stato delle interfacce appartenenti al bonding e' possibile fare  riferimento al file /proc/net/bonding/bond0:    
  
Bonding Mode: fault-tolerance (active-backup)    
Primary Slave: None    
Currently Active Slave: eth1    
MII Status: up    
MII Polling Interval (ms): 100    
Up Delay (ms): 200    
Down Delay (ms): 200    

Slave Interface: eth0    
MII Status: down    
Link Failure Count: 0    
Permanent HW addr: 00:a0:d2:1c:2b:f9    

Slave Interface: eth1    
MII Status: up    
Link Failure Count: 0    
Permanent HW addr: 00:0b:cd:67:8c:1c    
    
Nell'esempio in questione e' possibile notare che l'interfaccia al momento attiva e' la eth1, mentre la eth0 e' invece scollegata, come si puo' evincere da MII status=down  

Infine, per testare il funzionamento del sistema, se si hanno entrambe le schede collegate, sara' sufficiente scollegare il cavo ethernet dalla scheda in quel momento in funzione e verificare se il sistema continui ad essere raggiungibile.    

La procedura illustrata prevede la modifica di alcuni file di configurazione presenti in una distribuzione debian GNU/Linux, in modo da rendere le modifiche al sistema permamenenti. In caso ci si volesse limitare a dei test dovrebbe essere possibile ottenere il medesimo risultato caricando il modulo bonding da linea di comando e gestendo il bonding tramite ifenslave. Personalmente non ho mai fatto test in tal senso, ma i comandi da dare dovrebbero essere i seguenti:    
  
modprobe bonding  mode=1 miimon=100 downdelay=200 updelay 200    
ifconfig bond0 10.62.1.164 netmask 255.255.255.192 up    
ifenslave bond0 eth0    
ifenslave bond0 eth1    
 

Privacy Policy