# [HOW TO]Bonding: schede di rete ridondanti e load balancing

## fat_penguin

Introduzione

Spesso capita di dover mettere in funzione dei server ad alta affidabilità. 

In questa breve guida vedremo come configurare due schede di rete in modo che siano ridondanti tra di loro.

In poche parole se una scheda si guasta o la porta sullo switch si blocca, il nostro sistema continuerà ad essere on-line.

In ambiente Microsoft questa feature viene chiamata teaming mentre in Linux è conosciuta come bonding.

Ci sono molti modi per configurare il bonding e nel file /usr/src/linux/Documentation/networking/bonding.txt si trovano le spiegazioni dettagliate per ogni possibile impostazione.

Nel nostro caso useremo il tipo 5 descritto come segue nella documentazione del kernel:

/usr/src/linux/Documentation/networking/bonding.txt

```
 balance-tlb or 5

 

       Adaptive transmit load balancing: channel bonding that does

       not require any special switch support. The outgoing

       traffic is distributed according to the current load

       (computed relative to the speed) on each slave. Incoming

       traffic is received by the current slave. If the receiving

       slave fails, another slave takes over the MAC address of

       the failed receiving slave.

                                   

       Prerequisite:

            

       Ethtool support in the base drivers for retrieving the

       speed of each slave.

```

Le schede utilizzate per la stesura di questo how to sono le seguenti:

```
 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

 Ethernet controller: VIA Technologies, Inc. VT6102 [Rhine-II] (rev 74)

```

La compatibilità con le piu conosciute schede di rete non sembra comunque essere un problema.

Sul web ho trovato conferma di buon funzionamento anche per le seguenti interfacce:

```
Realtek 8139D

3Com XL, Vortex

Intel E100

D-Link 

```

Un'ultimo appunto: si presume di partire da un sistema gia funzionante al quale si vuole aggiungere questa feature. Si puo ad ogni modo eseguire questa configurazione anche durante l'istallazione.

Configurazione bonding

Innanzi tutto va attivato il supporto nel kernel. Il supporto va inserito come modulo in modo da potergli passare determinati parametri al momento dell'attivazione.

```
 Device Drivers  --->

    Networking support  --->

       <M>     Bonding driver support  

```

Chiaramente vanno inseriti anche i moduli necessari alle schede di rete istallate, nel mio caso sono stati inseriti come buil-in.

Compiliamo e istalliamo il kernel.

Il pacchetto che permette la gestione del bonding si chiama ifenslave ed è diponibile nel portage, quindi basta dare un bel:

```
emerge ifenslave

```

Nel file /etc/conf.d/net commentiamo l'attuale impostazione riguardante le schede attualmente configurate ed impostiamo i seguenti parametri, chiaramente secondo le vostre esigenze di rete:

/etc/conf.d/net

```
iface_bond0="192.168.1.100 broadcast 192.168.1.255 netmask 255.255.255.0"

gateway="bond0/192.168.1.1"

```

Passiamo ora alla parte di boot-up.

Leviamo le attuali ethX dal runlevel di default:

```
rc-update del net.eth0 default

```

Creiamo il seguente link

```
ln -s /etc/init.d/net.eth0 /etc/init.d/net.bond0

```

e aggiungiamo al runlevel di default il bond0

```
rc-update add net.bond0 default

```

Modifichiamo i file come indicato di seguito:

/etc/modules.d/bond

```
alias bond0 bonding

options bond0 mode=5 miimon=100

```

/etc/modules.autoload.d/kernel-2.6

```
... # eventuali altri moduli e moduli delle schede di rete

bond0

```

/etc/conf.d/local.start

```
ifenslave bond0 eth0 eth1

```

Ora un bel modules-update , un reboot e il gioco è fatto!

Monitoraggio bonding

Per controllare lo stato e le configurazioni del bonding ci basta controllare il contenuto del file /proc/net/bonding/bond0.

Il mio ha questo aspetto:

```
Ethernet Channel Bonding Driver: v2.6.0 (January 14, 2004)

Bonding Mode: transmit load balancing

Primary Slave: None

Currently Active Slave: eth0

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:0c:6e:b4:60:5f

Slave Interface: eth1

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:30:4f:10:e1:c1

```

Inoltre è possibile usare ifconfig per vedere i parametri di rete

```
bond0     Link encap:Ethernet  HWaddr 00:0C:6E:B4:60:5F  

              inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0

              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

              RX packets:170 errors:0 dropped:0 overruns:0 frame:0

              TX packets:1575 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:0 

              RX bytes:17324 (16.9 Kb)  TX bytes:100978 (98.6 Kb)

                                                            

eth0      Link encap:Ethernet  HWaddr 00:0C:6E:B4:60:5F  

              UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

              RX packets:136 errors:0 dropped:0 overruns:0 frame:0

              TX packets:819 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000 

              RX bytes:14056 (13.7 Kb)  TX bytes:53743 (52.4 Kb)

              Interrupt:23 Base address:0x9400 

                                                                                                                        

eth1      Link encap:Ethernet  HWaddr 00:30:4F:10:E1:C1  

              UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

              RX packets:34 errors:0 dropped:0 overruns:0 frame:0

              TX packets:757 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000 

              RX bytes:3268 (3.1 Kb)  TX bytes:47397 (46.2 Kb)

              Interrupt:19 Base address:0xb800 

                                                                                                    

lo          Link encap:Local Loopback  

             inet addr:127.0.0.1  Mask:255.0.0.0

             UP LOOPBACK RUNNING  MTU:16436  Metric:1

             RX packets:0 errors:0 dropped:0 overruns:0 frame:0

             TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

             collisions:0 txqueuelen:0 

             RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)                                                                                        

```

...anche un route tanto per verificare che sia tutto ok.

```
Kernel IP routing table

Destination       Gateway                          Genmask             Flags Metric Ref    Use Iface

192.168.1.0      *                                        255.255.255.0   U       0      0        0 bond0

loopback           gentoo.home.com         255.0.0.0            UG    0      0        0 lo

default               192.168.1.1                    0.0.0.0                 UG    0      0        0 bond0

```

Test di funzionamento

Pingate l'host in bonding e provate a staccare un cavo di rete... 

Note

Attenzione, leggete bene la documentazione del kernel. 

Una configurazione "superficiale" del bonding potrebbe riperquotersi sul buon funzionamento dell'infrastruttura di rete.

Particolarità

Ecco come risulterebbe un ifconfig di un bondig mode 1 (active-backup)

```
bond0     Link encap:Ethernet  HWaddr 00:0C:6E:B4:60:5F  

              inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0

              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

              RX packets:120 errors:0 dropped:0 overruns:0 frame:0

              TX packets:72 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:0 

              RX bytes:11851 (11.5 Kb)  TX bytes:12373 (12.0 Kb)

                                                            

eth0      Link encap:Ethernet  HWaddr 00:0C:6E:B4:60:5F  

              UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1

              RX packets:108 errors:0 dropped:0 overruns:0 frame:0

              TX packets:73 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000 

              RX bytes:10717 (10.4 Kb)  TX bytes:12535 (12.2 Kb)

              Interrupt:23 Base address:0x9400 

                                             

eth1      Link encap:Ethernet  HWaddr 00:0C:6E:B4:60:5F  

              UP BROADCAST RUNNING NOARP SLAVE MULTICAST  MTU:1500  Metric:1

              RX packets:12 errors:0 dropped:0 overruns:0 frame:0

              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000 

              RX bytes:1134 (1.1 Kb)  TX bytes:0 (0.0 b)

              Interrupt:19 Base address:0xb800 

                                                   

lo          Link encap:Local Loopback  

             inet addr:127.0.0.1  Mask:255.0.0.0

             UP LOOPBACK RUNNING  MTU:16436  Metric:1

             RX packets:0 errors:0 dropped:0 overruns:0 frame:0

             TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

             collisions:0 txqueuelen:0 

             RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)                                                                                                

```

Notato i MAC address delle schede? ... a dipendenza del tipo di bonding configurato, cambia la modalità di lavoro del bonding stesso.

Per completezza eccovi anche il file /proc/net/bonding/bond0

```
Ethernet Channel Bonding Driver: v2.6.0 (January 14, 2004)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth0

MII Status: up

MII Polling Interval (ms): 100

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:0c:6e:b4:60:5f

Slave Interface: eth1

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:30:4f:10:e1:c1

```

L' how to originale si trova su http://wiki.gentoo-italia.net/ Last edited by fat_penguin on Sun Feb 27, 2005 1:22 pm; edited 1 time in total

----------

## gutter

Complimenti per l'ottimo howto  :Very Happy: 

Aggiunto ai post utilissimi, sezione Howto.

----------

## SilverXXX

Ottimo howto, e potrebbe tornarmi molto utile appena decido (ma soprattuto trovo i soldi) di comprare un modem ethernet, così utilizzo pure le due schede di rete che mi avanzano. Volevo solo chiederti una cosa; visto che ho uno switch di rete gigabit, con il bonding attivo (le due schede sono da 100) si hanno anche incrementi nella velocità di trasderimento?

----------

## iridium103

grazie! era l'how-to che mi serviva!  :Very Happy: 

----------

## FonderiaDigitale

 *fat_penguin wrote:*   

> 
> 
> Nel nostro caso useremo il tipo 5 descritto come segue nella documentazione del kernel:
> 
> /usr/src/linux/Documentation/networking/bondig.txt

 

hai perso una n  :Razz: 

cmq date un occhio anche a http://www.fonderiadigitale.it/gentoo/seminari/2004/Webb.it_Padova/Gechi-SambaBackupServer.pdf, da pagina 28,29 e appendice A (pagina 50)

----------

## fat_penguin

 *FonderiaDigitale wrote:*   

>  *fat_penguin wrote:*   
> 
> Nel nostro caso useremo il tipo 5 descritto come segue nella documentazione del kernel:
> 
> /usr/src/linux/Documentation/networking/bondig.txt 
> ...

 

Corretto, grazie della segnalazione.

byebye

fat_penguin

----------

## X-Drum

GG bel lavoro!

vi ricordo che gli script per la rete dell'ultimo baselayout (1.11.9-r1)

sono configurabili per supporto bonding.

----------

## fat_penguin

 *X-Drum wrote:*   

> GG bel lavoro!
> 
> vi ricordo che gli script per la rete dell'ultimo baselayout (1.11.9-r1)
> 
> sono configurabili per supporto bonding.

 

In che senso ?

byebye

fat_penguin

----------

## gutter

Apri:

```
/etc/conf.d/net 
```

e lo vedi  :Wink: 

----------

## fedeliallalinea

@gutter: devi avere anche un sistema ~x86 per vederlo

----------

## gutter

 *fedeliallalinea wrote:*   

> @gutter: devi avere anche un sistema ~x86 per vederlo

 

Hai ragione  :Wink:  avevo dimenticato di avere baselayout in ~x86.

Pardon  :Wink: 

----------

## fat_penguin

@gutter: dai, non fare il prezioso,  postaci l'  /etc/conf,d/net ... cosi non devo per forza istallarmi i pacchetti ~x86!

 :Wink: 

byebye

fat_penguin

----------

## X-Drum

ecco il file /etc/conf.d/net.example del baselayout in questione

@tutti scusate vi ho messo la versione ma nn ho puntualizzato 

che per ultima versione di baselayout intendevo ultima perchè

ancora in fase di testing

----------

## gutter

Vi ha accontentato X-Drum  :Wink: 

----------

