miércoles, 1 de octubre de 2014

Bonding

Introducción.

El controlador bonding, originalmente creado por Donald Becker, está incluido en prácticamente todas las distribuciones de GNU/Linux y permite sumar las capacidades de varias interfaces físicas de red con objeto de crear una interfaz lógica. Esto se lleva a cabo con el objeto de contar con redundancia o bien balanceo de carga.

Procedimientos.

Archivo de configuración.

En CentOS 5 y Red Hat Enterprise Linux 5 se debe editar el archivo /etc/modprobe.conf:
vi /etc/modprobe.conf
En ALDOS 1.4CentOS 6 y Red Hat Enterprise Linux 6 se debe crear un archivo que puede denominarse arbitrariamente como/etc/modprobe.d/bonding.conf:
vi /etc/modprobe.d/bonding.conf
En cualquiera de los dos casos mencionados, se debe añadirse lo siguiente para asociar el controlador bonding a la interfaz bond0 del siguiente modo:
alias bonding bond0
El controlador puede llevar además opciones que permiten modificar su funcionamiento, de entre los cuales los más importantes sonmode y miimon. A fin de obtener un buen funcionamiento, es importante configurar al menos estas dos opciones.
Para fines generales, se puede puede utilizar lo siguiente:
alias bond0 bonding
options bonding mode=0 miimon=0
El valor de la opción mode establece la política de balanceo de carga y tolerancia a fallos y el valor de la opción miimon establece al tipo de supervisión de MII, donde 0 corresponde la configuración más común.
Al terminar con el archivo /etc/modprobe.conf, es importante utilizar el mandato depmod con la opción -a para regenerar el archivomodules.dep, el cual es utilizado como el mapa de dependencias de los controladores utilizados por el núcleo del sistema.
depmod -a
Lo anterior solo debe devolver el símbolo de sistemas después de unos segundos.

Opción mode.

Se utiliza para establecer la política baja la cual se hará trabajar las tarjetas en conjunto. Los posibles valores son:
0 (cero): Establece una política de Round-Robin, que es un algoritmo que asigna una carga equitativa y ordenada a cada proceso, para proporcionar tolerancia a fallos y balanceo de carga entre los miembros del arreglo de dispositivos. Todas las transmisiones de datos son enviadas y recibidas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible. Es la política predeterminada del controlador y la que funciona para la mayoría de los casos.
1 (uno): Establece una política de respaldo activo que proporciona tolerancia a fallos. Todo el tráfico se transmite a través de una tarjeta y solo se utilizará la otra en caso de que falle la primera.
2 (dos): Establece una política XOR (exclusive-or, exclusiva-o) para proporcionar tolerancia a fallos y balanceo de carga. Este algoritmo compara las solicitudes entrantes de las direcciones MAC hasta que coinciden para la dirección MAC (Media Access Control) de una de las tarjetas esclavas. Una vez que se establece el enlace, las transmisiones de datos de datos son enviadas en forma secuencial empezando con la primera interfaz disponible.
3 (tres): Establece una política de Round-Robin, para proporcionar tolerancia a fallos y balanceo de carga. Todas las transmisiones de datos son enviadas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible.
En el siguiente ejemplo se establece la política 0 (cero):
options bonding mode=0

Opción miimon.

Se utiliza para especificar cada cuantos milisegundos se debe supervisar el enlace MII (Media Independent Interface). Se utiliza cuando se necesita alta disponibilidad para verificar si la interfaz está activa y verificar si hay un cable de red conectado. En el siguiente ejemplo se establecen 100 milisegundos:
options bonding mode=0 miimon=100
Se requiere que todos los controladores del arreglo de tarjetas tengan soporte para MII. Para verificar si el controlador de la tarjeta tiene soporte para MII, se utiliza el mandato ethtool, donde la salida debe devolver Link Detected con el valor yes. Ejemplo:
ethtool eth0
Lo anterior debe devolver algo similar a lo siguiente:
Settings for eth0:
 Supported ports: [ TP MII ]
 Supported link modes:   10baseT/Half 10baseT/Full 
                         100baseT/Half 100baseT/Full 
 Supports auto-negotiation: Yes
 Advertised link modes:  10baseT/Half 10baseT/Full 
                         100baseT/Half 100baseT/Full 
 Advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Half
 Port: MII
 PHYAD: 32
 Transceiver: internal
 Auto-negotiation: on
 Supports Wake-on: pumbg
 Wake-on: d
 Current message level: 0x00000007 (7)
 Link detected: yes
Para desactivar esta función, se utiliza el valor 0 (cero). Ejemplo:
options bonding mode=0 miimon=0

Archivo de configuración /etc/sysconfig/network-scripts/bond0.

Este se configura con las mismas variables de un dispositivo de red regular. Requiere las variables ONBOOTBOOTPROTODEVICE,IPADDRPREFIX (o bien NETMASK en CentOS 5 y Red Hat™ Enterprise Linux 5) y GATEWAY.
En el siguiente ejemplo se configura la interfaz bond0 con la dirección IP estática 192.168.0.1, máscara de subred de 24 bits (255.255.255.0), puerta de enlace 192.168.0.254 y la interfaz inicia junto con el sistema creando el archivo /etc/sysconfig/network-scripts/ifcfg-bond0 con el siguiente contenido:
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192-168.0.1
PREFIX=24
GATEWAY=192.168.0.254
Las interfaces de red a utilizar como esclavas se configuran de la siguiente forma, considerando que se tiene eth0 y eth1, el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-eth0 sería:
DEVICE=eth0
BOOTPROTO=none
ONBOOT=no
SLAVE=yes
MASTER=bond0
Y el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-eth1 sería:
DEVICE=eth1
BOOTPROTO=none
ONBOOT=no
SLAVE=yes
MASTER=bond0

Iniciar, detener y reiniciar el servicio network.

Para ejecutar por primera vez el servicio network tras configurar el acoplamiento de tarjetas, utilice:
service network start
Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:
service network restart
Para detener el servicio network utilice:
service network stop

Comprobaciones.

Para verificar que la interfaz lógica quedó configurada, en el caso de haber utilizado las interfaces eth0 y eth1, utilice:
ip addr list
Lo anterior debe devolver algo similar a lo siguiente:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
    link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
    link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop 
    link/sit 0.0.0.0 brd 0.0.0.0
5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.1.255 scope global bond0
    inet6 fe80::206:4fff:fe80:d92/64 scope link tentative 
       valid_lft forever preferred_lft forever
Para verificar que las interfaces de red están funcionando correctamente y que hay un cable de red conectado a éstas, se utiliza el mandato ethtool del siguiente modo:
ethtool eth0 |grep "Link detected"
ethtool eth1 |grep "Link detected"
Si ambas tarjetas tiene soporte para MII, lo anterior debe devolver lo siguiente:
 Link detected: yes
 Link detected: yes

Autor: Joel Barrios

Servidor PXE en Ubuntu 16.04

Escenario. Es un entorno para arrancar e instalar el SO a través de la red.  PXE, (Preboot eXecution Enviroment) La idea es que las máqui...