Ethernet Channel Bonding ovvero NIC Teaming su sistemi Linux
Il collegamento del canale Ethernet consente di abilitare due o più schede di interfaccia di rete (NIC) a una singola scheda NIC virtuale che può aumentare la larghezza di banda e fornisce ridondanza delle schede NIC. Questo è un ottimo modo per ottenere collegamenti ridondanti, tolleranza agli errori o reti di bilanciamento del carico nel sistema di produzione. Se una NIC fisica è inattiva o scollegata, le risorse verranno spostate automaticamente su un'altra scheda NIC. Il bonding canale/NIC funzionerà con l'aiuto del driver di bonding nel Kernel. Utilizzeremo due NIC per dimostrare la stessa cosa.
Sono disponibili quasi sei tipi di Channel Bond. Qui esamineremo solo due tipi di Channel Bond che sono popolari e ampiamente utilizzati.
- 0: bilanciamento del carico (Round-Robin): il traffico viene trasmesso in ordine sequenziale o round-robin da entrambe le NIC. Questa modalità fornisce il bilanciamento del carico e la tolleranza agli errori.
- 1: Backup attivo: solo una scheda NIC slave è attiva in un dato momento. L'altra scheda di interfaccia sarà attiva solo se la scheda NIC slave attiva si guasta.
Creazione del collegamento dei canali Ethernet
Abbiamo due schede Ethernet di rete, ovvero eth1 e eth2 dove verrà creato bond0 a scopo di collegamento. È necessario disporre dei privilegi di superutente per eseguire i comandi seguenti.
Bilanciamento del carico (Round-Robin)
Configura eth1
Menziona i parametri dell'interfaccia MASTER bond0 e eth1 come SLAVE nel file di configurazione come mostrato di seguito.
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"
USERCTL=no
MASTER=bond0
SLAVE=yes
Configura eth2
Anche qui specificare il parametro MASTER bond0 e l'interfaccia eth2 come SLAVE.
vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE="eth2"
TYPE="Ethernet"
ONBOOT="yes"
USERCTL=no
#NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
Crea la configurazione bond0
Crea bond0 e configura l'interfaccia di bonding del canale nella directory "/etc/sysconfig/network-scripts/" chiamata ifcfg-bond0.
Di seguito è riportato un esempio di file di configurazione del channel bonding.
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
IPADDR=192.168.246.130
NETMASK=255.255.255.0
BONDING_OPTS="mode=0 miimon=100"
Nota: nella configurazione sopra abbiamo scelto le opzioni di collegamento mode=0 ovvero Round-Robin e miimon=100 (Intervalli di polling 100 ms).
Vediamo le interfacce create utilizzando il comando ifconfig che mostra “bond0” in esecuzione come MASTER entrambe le interfacce “eth1” e “eth2” correndo come SCHIAVI.
ifconfig
bond0 Link encap:Ethernet HWaddr 00:0C:29:57:61:8E
inet addr:192.168.246.130 Bcast:192.168.246.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe57:618e/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:17374 errors:0 dropped:0 overruns:0 frame:0
TX packets:16060 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1231555 (1.1 MiB) TX bytes:1622391 (1.5 MiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:57:61:8E
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:16989 errors:0 dropped:0 overruns:0 frame:0
TX packets:8072 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1196931 (1.1 MiB) TX bytes:819042 (799.8 KiB)
Interrupt:19 Base address:0x2000
eth2 Link encap:Ethernet HWaddr 00:0C:29:57:61:8E
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:385 errors:0 dropped:0 overruns:0 frame:0
TX packets:7989 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34624 (33.8 KiB) TX bytes:803583 (784.7 KiB)
Interrupt:19 Base address:0x2080
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:480 (480.0 b) TX bytes:480 (480.0 b)
Riavviare Il servizio di rete e le interfacce dovrebbero essere OK.
service network restart
Shutting down interface bond0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: [ OK ]
Verifica dello stato del vincolo.
watch -n .1 cat /proc/net/bonding/bond0
Uscita campione
L'output di seguito mostra che la modalità di bonding è bilanciamento del carico (RR) e eth1 e eth2 si stanno presentando.
Every 0.1s: cat /proc/net/bonding/bond0 Thu Sep 12 14:08:47 2013
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 2
Permanent HW addr: 00:0c:29:57:61:8e
Slave queue ID: 0
Slave Interface: eth2
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 2
Permanent HW addr: 00:0c:29:57:61:98
Slave queue ID: 0
Crea backup attivo
In questo scenario, le interfacce Slave rimangono le stesse. ci sarà solo una modifica nell'interfaccia del bond ifcfg-bond0 invece di '0' sarà '1' come mostrato sotto .
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
IPADDR=192.168.246.130
NETMASK=255.255.255.0
BONDING_OPTS="mode=1 miimon=100"
Riavviare il servizio di rete e verificare lo stato del collegamento.
service network restart
Shutting down interface bond0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: [ OK ]
Controllo dello stato del vincolo con comando.
watch -n .1 cat /proc/net/bonding/bond0
Uscita del campione
La modalità bonding mostra tolleranza agli errori (backup attivo) e l'interfaccia slave è attiva.
Every 0.1s: cat /proc/n... Thu Sep 12 14:40:37 2013
Ethernet Channel Bonding Driver: v3.6.0 (September 2
6, 2009)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:57:61:8e
Slave queue ID: 0
Slave Interface: eth2
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:0c:29:57:61:98
Slave queue ID: 0
Nota: giù e su manualmente le interfacce slave per verificare il funzionamento del Channel Bonding. Si prega di vedere il comando come di seguito.
ifconfig eth1 down
ifconfig eth1 up
Questo è tutto!