I server sono spesso equipaggiati con più di una scheda di rete ( NIC: network inteface card ) per poter essere collegati in infrastrutture di rete ridondanti. Correttamente utilizzate queste schede posso garantire elevati livelli di servizio (SLA) e qualche preoccupazione in meno per il sistemista Linux.
Riporto a titolo di esempio un esempio di struttura ridondata:
Supponendo che il server possieda 2 interfacce di rete e che la tua infrastruttura di rete preveda la possibilità di collegare il server a due linee differenti es: due core o due switch ridondati (nell’eventualità che uno dei due si guasti o sia irraggiungibile il carico di lavoro viene gestito dall’altro) la configurazione in bind o team delle schede ti garantirà di non perdere connessione e assicurare un adeguato SLA in condizioni critiche ( con uno switch non funzionante ).
La prima operazione da compiere è creare una interfacccia virtuale di tipo bond, convenzionalmente essa viene definita bond0:
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
il cui contenuto è il seguente:
DEVICE=bond0 IPADDR=192.168.1.2 NETWORK=192.168.1.0 NETMASK=255.255.255.0 USERCTL=no BOOTPROTO=none ONBOOT=yes
Le opzioni su cui mi soffermerò sono quelle direttamente legate al tipo di interfaccia utili allo scopo:
DEVICE: definisce il nome dell’interfaccia ( bond0 )
IPADDR: definisce l’IP che questa interfaccia assumerà, indipendentemente da quele NIC (eth0 o eth1) è utilizzato
ONBOOT: indica che tale scheda deve essere resa attiva quando si avvia il server
L’IPADDR deve contenere l’IP che intendi assegnare all’interfaccia di rete, similmente a come avresti fatto se avessi voluto assegnarlo ad una interfaccia fisica come la eth0; di conseguenza anche i parametri NETWORK e NETMASK devono essere impostati per lavorare nella tua rete.
Modifica quindi i file relativi alla configurazione delle schede Eth0 ed Eth1 come descritto di seguito:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none # vi /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none
In particolare le opzioni su cui prestare particolare attenzione sono DEVICE che assume il nome del device a cui la configurazione deve riferirsi, MASTER che indica il device utilizzato come master ossia la scheda che contiene i parametri di riferimento per il funzionamento del bonding o teaming e SLAVE che imposta ciascuna scheda in modalità slave della bond0.
L’operazione successiva consiste nell’impostare il caricamento del modulo e delle relative opzioni necessarie a Linux per inizializzare correttamente il binding delle interfacce, il file da modificare è il /etc/modprobe.conf aggiungendo le righe seguenti:
alias bond0 bonding options bond0 mode=[modalità] miimon=100
La prima indica a Linux di caricare il modulo bonding con l’alias bond0, per convenzione o coerenza con il nome dell’interfaccia appena creata.
La seconda riga aggiunta inisica con quali opzioni vuoi che il modulo bonding sia caricato, in particolare il valore bond0 indica che tali opzioni sono valide per l’alias appena visto sopra, la modalità può essere specificata secondo una di quelle previste nel kernel, io faccio riferimento a questa pagina.
Tra le modalità disponibili c’è:
active-backup or 1
ogni modalità può essere impostata con la notazione alfabetica (active-backup) o con la notazione numerica (1), nell’esempio che sto descrivendo, dove l’esigenza è di garantire la continuità del servizio a fronte di una indisponibilità lato network di uno switch, la modalità più indicata è proprio l’active-backup che come recita il manuale consente di impostare le due interfacce in modo che siano una attiva e l’altra in stand-by in attesa di poter subentrare in caso di indisponibilità della scheda attiva.
Altre modalità consentono, ad esempio, di ottenere maggiori performance sfruttando l’aggragazione di più link, tale modalità prevede che anche gli switch lo supportino e cablaggi completamente differenti.
Tornando al comando options, l’ultima opzione impostata miimon imposta la frequenza (esperessa in intervallo in millisecondi) con cui il bonding deve essere monitorato per accorgersi della indisponibilità del link, come recita il manuale 100 è un buon punto di partenza, tale valore devi adattarlo alla tua rete valutando i tempi di latenza e la tipologia di rete stessa.
Se avessi creato anche una bond1 avresti dovuto aggiungere un alias e delle options per ciascuna bond, questo perchè potresti avere più di due NIC e volerle mettere in bonding in modalità differenti magari a due a due.
E’ il momento di testare la configurazione, prima di tutto il kernel deve caricare il modulo bonding e leggere le opzioni impostate per tale modulo:
# modprobe bonding
quindi riavviamo la rete per verificare che tutto funzioni correttamente:
# service network restart
Se tutto è stato impostato correttamente dovresti avere il seguente risultato:
# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface bond0: [ OK ]
ed eseguendo il comando:
# ifconfig
noteremo la presenza della nuova scheda bond0 oltre alle schede eth0 ed eth1, dolo la bond0 ha IP impostato (inet addr) mentre nella seconda riga delle schede eth0 ed eth1 troverai per entrambe:
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
Un’altra particolarità di questa configurazione è che sia la bond0 sia le ethX hanno il medesimo HWaddr ossia il MAC ADDRESS della scheda attiva, normalmente la eth0, tale valore non cambia in caso di switch tra la eth0 e la eth1 per evitare confusione nella tabelle di arp e allarmi come tentativo di mac spoofing.
Per esehuire un test della configurazione e delle performance puoi edeguire un ping continuo al server da una schermata del pc con cui sei connesso, e disabilitare alternatamente la eth0 e la eth1 con i seguenti comandi:
# ifdown eth0 # ifup eth0 # # # # ifdown eth1 # ifup eth1
ATTENZIONE: NON disabilitare contemporaneamente entrambe le schede ( ifdown eth0 e ifdown eth1) perderesti la connessione al server se sono le interfacce attraverso cui sei collegato in ssh.
Se i parametri di configurazione sono corretti non dovresti vedere variazioni al ping, mi è capitato di perdere 1 o 2 ping ad ogni ifdown, in tal caso puoi ritoccare il valore del paramero miimon in modo da ottenere una variazione impercettibile al ping.
Buon lavoro