Bonding: multiplicando la velocidad de transmision en Ethernet
El channel bonding o unión de interfaces de red consiste en simular un dispositivo de red con gran ancho de banda uniendo varias tarjetas de red independientes, de manera que las aplicaciones sólo verán un interfaz de red. Con el channel bonding conseguimos varias cosas:
- mayor ancho de banda: el ancho de banda de la interfaz virtual será la suma de los anchos de banda de las interfaces reales.
- balanceo de carga: tendremos balanceo de carga del tráfico de red entre todas las interfaces reales (por defecto Round Robin).
- redundancia: si falla una tarjeta de red los datos irán sólo por las que estén en buen estado.
En Linux se encarga del channel bonding el módulo Linux Channel Bonding. Veamos cómo activarlo en un equipo con dos interfaces de red (eth0 y eth1):
- instalamos ifenslave (interface enslave, paquete ifenslave):
# apt-get install ifenslave
cargamos en el kernel el módulo bonding (el parámetro miimon=100 significa que monitoriza cada 100 ms si las tarjetas reales funcionan):
# modprobe bonding miimon=100
editamos /etc/network/interfaces y configuramos la interfaz virtual bond0 (con la directiva slaves definimos las tarjetas de red reales que forman bond0):
auto bond0
iface bond0 inet static
address 192.168.0.100
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
slaves eth0 eth1
- Para que al arrancar sólo se active bond0 eliminaremos las líneas auto eth0 y auto eth1.
- levantamos la interfaz virtual:
# ifup bond0
Si las interfaces reales están up las echaremos abajo
# ifdown eth0
# ifdown eth1
comprobamos si todo está correcto (las tres interfaces deben tener la misma MAC address):
# ifconfig
bond0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1357 errors:0 dropped:0 overruns:0 frame:0
TX packets:793 errors:14 dropped:0 overruns:0 carrier:14
collisions:0 txqueuelen:0
RX bytes:144979 (141.5 KiB) TX bytes:148606 (145.1 KiB)
eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:462 errors:0 dropped:0 overruns:0 frame:0
TX packets:303 errors:14 dropped:0 overruns:0 carrier:14
collisions:0 txqueuelen:1000
RX bytes:51388 (50.1 KiB) TX bytes:51796 (50.5 KiB)
Interrupt:17 Base address:0×1800
eth1 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:895 errors:0 dropped:0 overruns:0 frame:0
TX packets:490 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:93591 (91.3 KiB) TX bytes:96810 (94.5 KiB)
Interrupt:16 Base address:0×8400
vim/etc/modprobe.confalias eth0 e1000 alias eth1 e1000 alias bond0 bonding options bonding mode=6 miimon=100 Explicando los Modos: mode 0 (por defecto) modo round robin. transmitirá paquetes secuencialmente en todas las tarjetas de red pertenecientes al bonding, partiendo desde el primer dispositivo esclavo hasta el último. uso: provee balanceo y alta disponibilidad. esto equivale a definir mode=0 en /etc/modprobe.confCode:alias bond0 bonding options bonding mode=0mode 1
modo active-backup, solo uno de los esclavos del bonding envia y recibe paquetes.
uso: solo alta disponibilidad.
esto equivale a definir mode=1 en /etc/modprobe.confCode:alias bond0 bonding options bonding mode=1mode 2
modo XOR, se alterna la transmisión de paquetes entre los esclavos del bonding
uso: provee balanceo y alta disponibilidad.
esto equivale a definir mode=2 en /etc/modprobe.confCode:alias bond0 bonding options bonding mode=2mode 3
modo broadcast, enviá todo por todos los esclavos.
uso: solo alta disponibilidad
esto equivale a definir mode=3 en /etc/modprobe.confCode:alias bond0 bonding options bonding mode=3mode 4
modo Dynamic link aggregation, crea grupos que comparten la misma velocidad y duplex.
las tarjetas deben soportar IEEE 802.3ad.
uso: alta disponibilidad y balanceo de carga.
esto equivale a definir mode=4 en /etc/modprobe.confCode:alias bond0 bonding options bonding mode=4mode 5
modo balance-tib, balancea todo el trafico de salida, todo el trafico de entrada es recibido por el esclavo activo.
uso: alta disponibilidad y balanceo de carga.
esto equivale a definir mode=5 en /etc/modprobe.confCode:alias bond0 bonding options bonding mode=5mode 6
modo balance-alb, básicamente hace lo mismo que el mode5, pero también balancea el trafico de entrada.
uso: alta disponibilidad y balanceo de carga.
esto equivale a definir mode=6 en /etc/modprobe.confCode:alias bond0 bonding options bonding mode=6para rendimiento recomiendo probar el modo 6.
NOTA: algunos modos necesitan que se especifique un parámetro para miimon, esto es necesario ya que si una tarjeta falla el bonding no podrá renegociar una velocidad correctamente.
el parámetro se agrega en las opciones, por ejemplo para mode 6Code:alias bond0 bonding options bonding mode=6 miimon=100NOTA: muchas veces al hacer esto "en caliente" el bonding no queda funcionando bien, es recomendable reiniciar (es una de las pocas cosas para las que hay que reiniciar un linux)
Enlace relacionado con este TEMA:
http://www.estrellateyarde.es/so/channel-bonding-en-linux
http://www.debianadmin.com/linux-ethernet-bonding-configuration.html
http://linax.wordpress.com/2009/07/31/linux-ethernet-bonding/
http://grupos.pucp.edu.pe/archivos/linux/linux.200407/0060.html
Linux Ethernet Bonding Configuration
PARA RED HAT:
http://docs.hp.com/en/B9903-90050/ch05s04.html
Linux bond or team multiple network interfaces (NIC) into single interface Red Hat
http://lincgeek.org/blog/?p=286
http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-networkscripts-interfaces.html
(1) http://www.linuxhorizon.ro/bonding.html (2) http://www.linuxtopia.org/online-books/rhel5/rhel5-administration/rhel5-s1-networkscripts-interfaces.html#s2-networkscripts-interfaces-chan (3) http://www.linuxtopia.org/online-books/rhel5/rhel5-administration/rhel5-s1-modules-ethernet.html#s2-modules-bonding Graficamente: http://www.linuxtopia.org/online_books/rhel5/rhel5_administration/rhel5_ch-network-config.html
CASO ESPECIFICO DE RED HAT, CENTOS, y FEDORA CORE:
cd /etc/network/interfaces
vim ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
vim ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
vim ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.100.0
NETMASK=255.255.255.0
IPADDR=192.168.100.2
GATEWAY=192.168.100.3
USERCTL=no
vim /etc/modprobe.conf
alias eth0 e1000
alias eth1 e1000
alias bond0 bonding
options bond0 mode=balance-alb miimon=100
# ifconfig
bond0 Link encap:Ethernet HWaddr 00:13:72:54:22:77
inet addr:192.168.100.2 Bcast:192.168.100.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:296558387 errors:2 dropped:0 overruns:0 frame:1
TX packets:1151190594 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:41329976342 (38.4 GiB) TX bytes:1662997497699 (1.5 TiB)
eth0 Link encap:Ethernet HWaddr 00:13:72:54:22:77
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:290963317 errors:2 dropped:0 overruns:0 frame:1
TX packets:1144355412 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:40724833551 (37.9 GiB) TX bytes:1653633031267 (1.5 TiB)
Base address:0xecc0 Memory:dfae0000-dfb00000
eth1 Link encap:Ethernet HWaddr 00:13:72:54:22:77
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:5595083 errors:0 dropped:0 overruns:0 frame:0
TX packets:6835196 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:605143812 (577.1 MiB) TX bytes:9364481771 (8.7 GiB)
Base address:0xdcc0 Memory:df8e0000-df900000
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:1771719 errors:0 dropped:0 overruns:0 frame:0
TX packets:1771719 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:153085633 (145.9 MiB) TX bytes:153085633 (145.9 MiB)
Prueba directa:
# ethtool eth0 | grep "Link detected:"
Link detected: yes
# ethtool eth1 | grep "Link detected:"
Link detected: yes
[GUIA]configurar bonding, red alta disponibilidad/balanceo de carga (centos/redhat)