Bonding sense dolor

Suposem que fa dies vam instal·lar una màquina. El trasto té dues intefícies de xarxa, però per "guanyar temps" :-) vam deixar la configuració del bonding per més endavant. I ara tenim una màquina amb el seu firewall, els seus serveis arrencats i la gestionem remotament. I seria bonic configurar-li el bonding sense parar-ho tot i sense perdre gestió, oi?

Inventari

De cara a aquest exemple, suposarem que la màquina té:

  • Debian Sarge.
  • kernel 2.6. Els kernels pre-cuinats de Debian ja duen el mòdul de bonding.
  • Shorewall perque de vegades fa mandra "rascar" iptables.
  • Dues interfícies de xarxa (eth0 i eth1).
  • Resultat desitjat: una interfície de xarxa bond0 i les dues d'abans configurades com a esclaves d'aquesta.

Paquets a instal·lar

Que no et falti aquest paquet o quan provis d'aixecar la interfície de bonding et quedaràs més penjat que un pernil.
aptitude install ifenslave-2.6

I si el kernel és 2.4... endevina.

Configurem el mòdul

# /etc/modprobe.d/arch-aliases


alias bond0 bonding options bonding mode=0 miimon=100 downdelay=200 updelay=200

Bonding en mode "balance round-robin": simple, proporciona balanceig de càrrega i alta disponibilitat. Suficient en la majoria de casos.

Modifiquem els fitxers de configuració del firewall

Si ens deixem aquesta part serà com perdre les claus de casa. Però és trivial: on deia eth0 ara ha de dir bond0.

# /etc/shorewall/interfaces
net     bond0

Canviem els fitxer de configuració però encara no ho apliquem (les iptables no es toquen).

Modifiquem els fitxers de configuració de la xarxa

Tornem a canviar eth0 per bond0. Però a més afegim dues línies al final per configurar eth0 i eth1 com slaves.

# /etc/network/interfaces

auto bond0
iface bond0 inet static
    address 192.168.1.6
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.254
    up /sbin/ifenslave bond0 eth0
    up /sbin/ifenslave bond0 eth1

Apliquem tots els canvis d'una tacada

Cal executar un parell d'ordres per aplicar tot això. Si ho escrivim en una línia de comanes sols arribarem a executar la primera ordre i després ens quedarem sense xarxa. Uns segons després estarem corrent cap al servidor a conectar-nos per consola. Suposant que el servidor estigui a la mateixa zona geogràfica que nosaltres. :-/

Amb aquest "trick" li passarem tantes comanes com necessitem sense perdre connexió...

bash <<.
ifup bond0
shorewall restart
.

...perque no es posarà a treballar fins que trobi la línia que sols conté un punt.

Monitorització

Estaria bé veure que alguna cosa ha canviat, oi? Doncs a part del clàssic ip addr:

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.0 (January 14, 2004)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0f:20:79:ee:4e

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0f:20:79:ee:43

I si ets dels que procurem que el Nagios treballi per nosaltres, check_bonding va de perles.

Ampliar informació

La documentació del mòdul de bonding és excel·lent. Si no vols baixar-te les fonts del kernel també la tens disponible a Sourceforge.

Comentaris