Cuando hablamos de agrupacion o unificacion nos estamos referiendo a “teaming” o “bonding”. En donde unimos dos o mas interfaces de red en una sola, aplicando diferentes “RUNNERS”, o comportamientos. Los “RUNNERS” que usted puede aplicar son los siguientes de acuerdo a metodo que implemente:
Teaming:
- broadcast: Corredor simple que dirige el dispositivo del equipo para transmitir paquetes a través de todos los puertos.
- roundrobin: Corredor simple que dirige el dispositivo del equipo para transmitir paquetes de una manera round-robin.
- activebackup: Vela por cambios de enlace y selecciona el puerto activo que se utilizará para las transferencias de datos.
- loadbalance: Para hacer equilibrio de carga pasiva, el corredor sólo establece la función de hash BPF que determinará el puerto para la transmisión de paquetes. Para realizar un balanceo de carga activo, el corredor mueve los hashes entre los puertos disponibles intentando alcanzar el equilibrio perfecto.
- lacp: Implementa el protocolo LACP 802.3ad. Puede usar las mismas posibilidades de selección de puertos Tx que el corredor de equilibrio de carga.
Si estas definiciones no le hacen sentido, puede consultar la pagina de ayuda con “man teamd.conf”
Bonding:
- mode=0 (balance-rr): Round-robin política: Es el modo predeterminado. Transmite paquetes en orden secuencial desde el primer esclavo disponible hasta el último. Este modo proporciona equilibrio de carga y tolerancia a fallos.
- mode=1 (active-backup): Política de copia de seguridad activa: En este modo, sólo hay un esclavo en el enlace activo. El otro se activa, sólo cuando falla el esclavo activo. La dirección MAC del enlace es visible externamente en un solo puerto (adaptador de red) para evitar confundir el conmutador. Este modo proporciona tolerancia a fallos.
- mode=2 (balance-xor): Política XOR: Transmisión basada en [(dirección MAC de origen XOR’d con dirección MAC de destino) cuenta de esclavo de módulo]. Esto selecciona el mismo esclavo para cada dirección MAC de destino. Este modo proporciona equilibrio de carga y tolerancia a fallos.
- mode=3 (broadcast): Política de difusión: transmite todo en todas las interfaces esclavas. Este modo proporciona tolerancia a fallos.
- mode=4 (802.3ad): IEEE 802.3ad Agregación de enlaces dinámicos. Crea grupos de agregación que comparten la misma configuración de velocidad y dúplex. Utiliza todos los esclavos en el agregador activo según la especificación 802.3ad.
Es importante aclarar que en el examen RHCE usted puede utilizar el metodo que prefiera o con el que se sienta mas comodo. Tambien puede realizar estas configuraciones de multiples maneras; tales como les muestro a continuacion o bien con el comando “nmtui”, o bien utilizando la aplicacion grafica de NetworkManager “gnome-control-center network”
Una vez entendido esta primera parte, entonces vamos a comenzar a realizar nuestra practica. Vamos a utilizar la siguiente informacion para la realizacion de nuestros ejercicios:
Servidor: labsystem1.home.cert.com Interfaces de red: ens8, ens9
Comenzaremos con la implementacion a travez de “teaming”. Es impotante que sepan que ustedes pueden aplicar el “runner” (corredor) que quieran. Solo por propositos de este ejercicio vamos a utilizar activebackup
Para facilitar nuestro trabajo, ya he creado el siguiente script el cual le llame “teaming-script”. Usted si prefiere puede editar el “gateway” y “dns”. Tambien usted puede realizar esta configuracion ejecutando cada comando del script.
#!/bin/bash # # create-team0 # PATH=/bin:/usr/bin:/sbin:/usr/sbin echo 'Create teaminterface....' nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}}' echo 'Assign the team IPV4 network settings...' nmcli con mod team0 ipv4.address 192.168.4.5/24 nmcli con mod team0 ipv4.gateway 192.168.4.2 nmcli con mod team0 ipv4.dns 192.168.4.2 nmcli con mod team0 ipv4.method manual echo 'Create each of the ports...' nmcli con add type team-slave con-name team0-port1 ifname ens8 master team0 nmcli con add type team-slave con-name team0-port2 ifname ens9 master team0 nmcli connection down team0 nmcli connection up team0-port1 nmcli connection up team0-port2
Si usted tiene alguna duda sobre como utilizar el runner, es decir el formato correcto, pues para esto puede verificarlo en dos lugares. Puede ejecutar “man teamd.conf“, o puede verificar los ejemplos que estan en la ayuda del sistema:
[root@labsystem1 ~]# cd /usr/share/doc/teamd-1.25/example_configs/ [root@labsystem1 example_configs]# ls activebackup_arp_ping_1.conf activebackup_ethtool_1.conf activebackup_ethtool_3.conf activebackup_nsna_ping_1.conf broadcast.conf loadbalance_1.conf loadbalance_3.conf roundrobin_2.conf activebackup_arp_ping_2.conf activebackup_ethtool_2.conf activebackup_multi_lw_1.conf activebackup_tipc.conf lacp_1.conf loadbalance_2.conf random.conf roundrobin.conf [root@labsystem1 example_configs]#
Entonces simplemente ejecutamos el script y comenzamos con nuestra verificacion. La salida despues de ejecutar el script es la siguiente:
[root@labsystem1 ~]# sh teaming-script Create teaminterface.... Connection 'team0' (f46e2a33-1f1c-4ab2-8d54-867c1d37e26e) successfully added. Assign the team IPV4 network settings... Create each of the ports... Connection 'team0-port1' (21f94801-4bfd-45cc-9f31-8839b781a348) successfully added. Connection 'team0-port2' (a6e2f725-d9ec-42ac-897a-ae79965b1aa7) successfully added. Connection 'team0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4) Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9) [root@labsystem1 ~]#
Despues de esto puede verificar que la direccion IP esta correcta:
[root@labsystem1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:8c:bb:78 brd ff:ff:ff:ff:ff:ff inet 192.168.4.60/24 brd 192.168.4.255 scope global ens3 valid_lft forever preferred_lft forever inet6 fe80::3350:f60f:73ef:6bd4/64 scope link valid_lft forever preferred_lft forever 3: ens8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000 link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff 4: ens9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000 link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff 5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000 link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff 8: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000 link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff inet 192.168.4.5/24 brd 192.168.4.255 scope global team0 valid_lft forever preferred_lft forever inet6 fe80::aeb1:ad31:b313:fb7/64 scope link valid_lft forever preferred_lft forever [root@labsystem1 ~]#
Tambien lo puede verificar de esta forma:
[root@labsystem1 ~]# nmcli -p connection show team0 =============================================================================== Connection profile details (team0) =============================================================================== connection.id: team0 connection.uuid: f46e2a33-1f1c-4ab2-8d54-867c1d37e26e connection.stable-id: -- connection.interface-name: team0 connection.type: team connection.autoconnect: yes connection.autoconnect-priority: 0 connection.timestamp: 1490423262 connection.read-only: no connection.permissions: connection.zone: -- connection.master: -- connection.slave-type: -- connection.autoconnect-slaves: -1 (default) connection.secondaries: connection.gateway-ping-timeout: 0 connection.metered: unknown connection.lldp: -1 (default) ------------------------------------------------------------------------------- ipv4.method: manual ipv4.dns: ipv4.dns-search: ipv4.dns-options: (default) ipv4.dns-priority: 0 ipv4.addresses: 192.168.4.5/24 ipv4.gateway: -- ipv4.routes: ipv4.route-metric: -1 ipv4.ignore-auto-routes: no ipv4.ignore-auto-dns: no ipv4.dhcp-client-id: -- ipv4.dhcp-timeout: 0 ipv4.dhcp-send-hostname: yes ipv4.dhcp-hostname: -- ipv4.dhcp-fqdn: -- ipv4.never-default: no ipv4.may-fail: yes ipv4.dad-timeout: -1 (default) ------------------------------------------------------------------------------- ipv6.method: auto ipv6.dns: ipv6.dns-search: ipv6.dns-options: (default) ipv6.dns-priority: 0 ipv6.addresses: ipv6.gateway: -- ipv6.routes: ipv6.route-metric: -1 ipv6.ignore-auto-routes: no ipv6.ignore-auto-dns: no ipv6.never-default: no ipv6.may-fail: yes ipv6.ip6-privacy: -1 (unknown) ipv6.addr-gen-mode: stable-privacy ipv6.dhcp-send-hostname: yes ipv6.dhcp-hostname: -- ipv6.token: -- ------------------------------------------------------------------------------- team.config: {"runner": {"name": "activebackup"}} ------------------------------------------------------------------------------- =============================================================================== Activate connection details (f46e2a33-1f1c-4ab2-8d54-867c1d37e26e) =============================================================================== GENERAL.NAME: team0 GENERAL.UUID: f46e2a33-1f1c-4ab2-8d54-867c1d37e26e GENERAL.DEVICES: team0 GENERAL.STATE: activated GENERAL.DEFAULT: no GENERAL.DEFAULT6: no GENERAL.VPN: no GENERAL.ZONE: -- GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/8 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/3 GENERAL.SPEC-OBJECT: / GENERAL.MASTER-PATH: -- ------------------------------------------------------------------------------- IP4.ADDRESS[1]: 192.168.4.5/24 IP4.GATEWAY: ------------------------------------------------------------------------------- IP6.ADDRESS[1]: fe80::aeb1:ad31:b313:fb7/64 IP6.GATEWAY: ------------------------------------------------------------------------------- [root@labsystem1 ~]#
Tambien, puede mirar el scritp ifcfg que se crea, esto es si usted en un amante de manipular estos archivos directamente:
[root@labsystem1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-team0 DEVICE=team0 TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}}" BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=team0 UUID=f46e2a33-1f1c-4ab2-8d54-867c1d37e26e ONBOOT=yes DEVICETYPE=Team IPADDR=192.168.4.5 PREFIX=24 IPV6_PEERDNS=yes IPV6_PEERROUTES=yes [root@labsystem1 ~]#
Tambien puede realizar un ping utilizando la interfaz creada:
[root@labsystem1 ~]# ping -I team0 google.com PING google.com (172.217.4.174) from 192.168.4.5 team0: 56(84) bytes of data. 64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=1 ttl=50 time=26.5 ms 64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=2 ttl=50 time=26.0 ms ^C --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 26.029/26.272/26.516/0.292 ms [root@labsystem1 ~]#
Como ven esta es la primera parte de nuestra configuracion. Ahora veremos las herramientas que teaming tiene de verificacion. Vamos a ver que podemos hacer con el comando “teamdctl” y “teamnl”
[root@labsystem1 ~]# teamdctl team0 state setup: runner: activebackup ports: ens8 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 ens9 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 runner: active port: ens8 [root@labsystem1 ~]# teamnl team0 options queue_id (port:ens9) 0 priority (port:ens9) 0 user_linkup_enabled (port:ens9) false user_linkup (port:ens9) true enabled (port:ens9) false queue_id (port:ens8) 0 priority (port:ens8) 0 user_linkup_enabled (port:ens8) false user_linkup (port:ens8) true enabled (port:ens8) true activeport 3 mcast_rejoin_interval 0 mcast_rejoin_count 1 notify_peers_interval 0 notify_peers_count 1 mode activebackup [root@labsystem1 ~]# teamdctl team0 config dump { "device": "team0", "mcast_rejoin": { "count": 1 }, "notify_peers": { "count": 1 }, "ports": { "ens8": { "link_watch": { "name": "ethtool" } }, "ens9": { "link_watch": { "name": "ethtool" } } }, "runner": { "name": "activebackup" } } [root@labsystem1 ~]#
Aqui tenemos nuestra salida de verificacion. Ahora bien, otras pruebas como desconectar una interfaz de red, y ver que la conexion persista ya que estamos utilizando el runner “activebackup” quedan por su parte.
Espero que en esta primera parte tenga claro como utilizar teaming.
Ahora vamos a continuar con un ejemplo de como utilizar “bond“. Para esto tambien vamos a partir de la configuracion que tenemos en nuestro servidor. Y para facilitar el ejercicio, tambien vamos a ejecutar el siguiente script:
#!/bin/bash # # create-bond0 # PATH=/bin:/usr/bin:/sbin:/usr/sbin nmcli con add type bond ifname bond0 con-name bond0 mode active-backup nmcli con add type bond-slave ifname ens8 con-name bond0-slave1 master bond0 nmcli con add type bond-slave ifname ens9 con-name bond0-slave2 master bond0 nmcli dev show bond0 nmcli con mod bond0 ipv4.addresses 192.168.4.6/24 nmcli con mod bond0 ipv4.method manual nmcli con mod bond0 ipv4.gateway 192.168.4.2 nmcli con mod bond0 ipv4.dns 192.168.4.2 nmcli con down bond0 nmcli connection up bond0-slave1 nmcli connection up bond0-slave2
Y la salida despues de ejecutar el script es la siguiente:
[root@labsystem1 ~]# sh bonding-script Connection 'bond0' (56b22b66-544d-449f-8a64-408cb3a26359) successfully added. Connection 'bond0-slave1' (21e71552-7ed8-4f8b-a339-5202931d7659) successfully added. Connection 'bond0-slave2' (1bc7de4b-1970-40b7-b84e-bdf77e2bcf19) successfully added. GENERAL.DEVICE: bond0 GENERAL.TYPE: bond GENERAL.HWADDR: 52:54:00:2F:8A:74 GENERAL.MTU: 1500 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: bond0 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/3 IP4.ADDRESS[1]: 192.168.4.130/24 IP4.GATEWAY: 192.168.4.2 IP4.DNS[1]: 192.168.4.2 IP6.ADDRESS[1]: fe80::e199:b549:c8a5:b857/64 IP6.GATEWAY: Connection 'bond0' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3) Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8) [root@labsystem1 ~]#
Y realizamos una verificacion rapida:
[root@labsystem1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:8c:bb:78 brd ff:ff:ff:ff:ff:ff inet 192.168.4.60/24 brd 192.168.4.255 scope global ens3 valid_lft forever preferred_lft forever inet6 fe80::3350:f60f:73ef:6bd4/64 scope link valid_lft forever preferred_lft forever 3: ens8: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000 link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff 4: ens9: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000 link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff 5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000 link/ether 52:54:00:c5:0c:f7 brd ff:ff:ff:ff:ff:ff 8: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000 link/ether 52:54:00:2f:8a:74 brd ff:ff:ff:ff:ff:ff inet 192.168.4.6/24 brd 192.168.4.255 scope global bond0 valid_lft forever preferred_lft forever inet6 fe80::e199:b549:c8a5:b857/64 scope link valid_lft forever preferred_lft forever [root@labsystem1 ~]# nmcli connection s NAME UUID TYPE DEVICE bond0 56b22b66-544d-449f-8a64-408cb3a26359 bond bond0 bond0-slave1 21e71552-7ed8-4f8b-a339-5202931d7659 802-3-ethernet ens8 bond0-slave2 1bc7de4b-1970-40b7-b84e-bdf77e2bcf19 802-3-ethernet ens9 ens3 5832646e-4d9f-45ba-abc1-5972607f55e9 802-3-ethernet ens3 virbr0 6297e8a8-bd13-4861-a1bf-d5fd022c940b bridge virbr0 [root@labsystem1 ~]# [root@labsystem1 ~]# ping -I bond0 google.com PING google.com (172.217.4.174) from 192.168.4.6 bond0: 56(84) bytes of data. 64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=1 ttl=50 time=26.6 ms 64 bytes from lax28s01-in-f174.1e100.net (172.217.4.174): icmp_seq=2 ttl=50 time=25.3 ms ^C --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 25.329/26.003/26.677/0.674 ms [root@labsystem1 ~]#
Y con esto ya tenemos configurado nuestro “bond“.
Ahora solo usted debe decidir que metodo de agrupación o unificación de redes va a utilizar en el examen.