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.
