Pregunta LACP con 2 NIC funcionando cuando uno de los dos está inactivo, no cuando los dos están arriba


Estoy teniendo problemas para conseguir que un troncal LACP funcione correctamente en Ubuntu 12.04.2 LTS.

Mi configuración es un host único conectado con dos interfaces 10 Gbe a dos switches Nexus 5548 separados, con vPC configurado para habilitar LACP de múltiples chasis. La configuración de Nexus es según las pautas de Cisco, y la configuración de Ubuntu según https://help.ubuntu.com/community/UbuntuBonding

El servidor está conectado al puerto Ethernet1 / 7 en cada conmutador Nexus, cuyos puertos están configurados de manera idéntica y están ubicados en el canal de puerto 15. El canal de puerto 15 se configura como VPC 15, y la salida de VPC se ve bien. Estos son puertos de acceso simple, es decir, no se requieren troncales 801.1q.

Diagrama:

    +----------+      +----------+      +----------+      +----------+
    | client 1 |------| nexus 1  |------| nexus 2  |------| client 2 |
    +----------+      +----------+      +----------+      +----------+
                           |                  |
                           |    +--------+    |
                           +----| server |----+
                           eth4 +--------+ eth5

Cuando cualquiera de los enlaces está inactivo, los clientes 1 y 2 pueden llegar al servidor. Sin embargo, cuando muestro el enlace secundario, el cliente conectado al conmutador con el enlace recién habilitado no puede acceder al servidor. Consulte la siguiente tabla para las transiciones de estado y los resultados:

   port states (down by means of "shutdown")
     nexus 1 eth1/7        up     up    down   up
     nexus 2 eth1/7       down    up     up    up

   connectivity
    client 1 - server      OK     OK     OK   FAIL
    client 2 - server      OK    FAIL    OK    OK

Ahora, creo que he aislado el problema al lado de Linux. Cuando se encuentra en estado activo, cada nexo utiliza el enlace local al servidor para entregar los paquetes, como se verifica en la tabla de direcciones mac. Lo que puedo ver en el servidor es que los paquetes de cada cliente se reciben en la interfaz ethX (paquetes del cliente 1 en eth4, paquetes del cliente 2 en eth4) usando tcpdump -i ethX, pero cuando ejecuto tcpdump -i bond0 Solo puedo traficar desde cualquiera de los hosts (de acuerdo con lo que dije anteriormente).

Observo el mismo comportamiento para el tráfico ARP e ICMP (IP); ARP falla desde un cliente cuando ambos enlaces están activos, funciona (junto con ping) cuando uno está inactivo, ping falla cuando habilito el enlace nuevamente (los paquetes aún se reciben en la interfaz eth, pero no en bond0).

Para aclarar, estoy configurando varios servidores en esta configuración, y todos muestran los mismos síntomas, por lo que no parece estar relacionado con el hardware.

Entonces, descubrir cómo arreglar eso es con lo que estoy tratando; Mi Google no me ha traído ninguna suerte hasta ahora.

Cualquier punteros son muy apreciados.

/ etc / network / interfaces

    auto eth4
    iface eth4 inet manual
    bond-master bond0

    auto eth5
    iface eth5 inet manual
    bond-master bond0

    auto bond0
    iface bond0 inet static
    address 10.0.11.5
    netmask 255.255.0.0
    gateway 10.0.0.3
    mtu 9216
    dns-nameservers 8.8.8.8 8.8.4.4
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 1
    #bond-slaves eth4
    bond-slaves eth4 eth5

/ proc / net / bonding / bond0

    A little further information:
    Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

    Bonding Mode: IEEE 802.3ad Dynamic link aggregation
    Transmit Hash Policy: layer2 (0)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0

    802.3ad info
    LACP rate: fast
    Min links: 0
    Aggregator selection policy (ad_select): stable
    Active Aggregator Info:
    Aggregator ID: 1
    Number of ports: 1
    Actor Key: 33
    Partner Key: 1
    Partner Mac Address: 00:00:00:00:00:00

    Slave Interface: eth4
    MII Status: up
    Speed: 10000 Mbps
    Duplex: full
    Link Failure Count: 8
    Permanent HW addr: 90:e2:ba:3f:d1:8c
    Aggregator ID: 1
    Slave queue ID: 0

    Slave Interface: eth5
    MII Status: up
    Speed: 10000 Mbps
    Duplex: full
    Link Failure Count: 13
    Permanent HW addr: 90:e2:ba:3f:d1:8d
    Aggregator ID: 2
    Slave queue ID: 0

EDITAR: Configuración añadida de Nexus

    vpc domain 100
      role priority 4000
      system-priority 4000
      peer-keepalive destination 10.141.10.17 source 10.141.10.12
      peer-gateway
      auto-recovery
    interface port-channel15
      description server5
      switchport access vlan 11
      spanning-tree port type edge
      speed 10000
      vpc 15
    interface Ethernet1/7
      description server5 internal eth4
      no cdp enable
      switchport access vlan 11
      channel-group 15

EDITAR: Se agregaron resultados del canal de puerto que no es VPC en nexus1 para el mismo servidor, antes y después del cambio de IP (se cambió la IP para influir en el algoritmo de equilibrio de carga). Esto sigue utilizando la misma configuración en el servidor.

      port states (down by means of "shutdown")
        nexus 1 eth1/7        up     up    down   up
        nexus 1 eth1/14      down    up     up    up <= port moved from nexus 2 eth1/7

   connectivity (sever at 10.0.11.5, hashing uses Eth1/14)
       client 1 - server      OK     OK     OK   FAIL
       client 2 - server      OK     OK     OK   FAIL

Los resultados después de cambiar la IP son los predichos; La interfaz no utilizada que se activa provoca fallos.

      connectivity (sever at 10.0.11.15, hashing uses Eth1/7)
       client 1 - server      OK    FAIL    OK    OK
       client 2 - server      OK    FAIL    OK    OK

5
2017-09-26 15:52


origen


¿Tiene algún otro host utilizando el canal de puerto virtual que esté funcionando? Puede ser útil si publica su configuración de VPC desde los conmutadores. Tu configuración de Linux parece válida. - Zoredache
No en este conmutador, no, y toda mi configuración de LAG hasta ahora ha sido entre dispositivos Cisco y / o Arista; nunca antes había tocado esto en Linux. Agregará la configuración de VPC a la pregunta original. Lo que intentaré mañana es aislar más haciendo de este un canal de puerto estándar en un solo conmutador, es decir, sin VPC. Entonces solo es cuestión de encontrar la manera correcta de engañar al algoritmo LB para que lo pruebe correctamente. - Tolli
Puede y debe editar detalles adicionales en su pregunta en lugar de tratar de ponerlos en un comentario. - Zoredache
Solo pensé - golpear a Enter me estaba jugando una mala pasada. :) - Tolli
Como se vio en la última edición, reproducí con un canal de puerto normal. Mientras está conectado a un solo conmutador, al host en modo 4, y haciendo una descarga para una de las interfaces, el Nexus sigue viendo el enlace como activo e incluido en el canal del puerto. Ahora, lo que también hice fue cambiar del modo 4 al 2 (balance-xor). Después de cambiar eso, no estoy experimentando los fallos descritos en el OP. Sin embargo, el problema de ifdown descrito aquí sigue siendo el mismo. Para la aplicación en cuestión, el modo 2 probablemente funcionará igual de bien. Sin embargo, obviamente me encantaría que funcione correctamente con el modo 4. - Tolli


Respuestas:


La única configuración de LACP que logré trabajar en Ubuntu es esta:

auto bond0
iface bond0 inet dhcp
  bond-mode 4
  bond-slaves none
  bond-miimon 100
  bond-lacp-rate 1
  bond-updelay 200 
  bond-downdelay 200

auto eth0
iface eth0 inet manual
  bond-master bond0

auto eth1
iface eth1 inet manual
  bond-master bond0

es decir, no uso esclavos sino maestro de bonos. No estoy seguro de cuál es la diferencia, pero encontré que esta configuración funcionó para mí.

No tengo ningún problema con LACP en mi configuración, aunque esto es con la red 1Gbe.

Además, si aún tiene problemas, intente conectar ambos cables en el mismo conmutador y configurar los puertos para LACP. Solo para eliminar la posibilidad de problemas con multi chasis LACP.


2
2017-09-26 21:28



Gracias por la sugerencia, ya que mi OOB no está jugando bien ahora mismo, lo intentaré mañana por la mañana en el sitio. - Tolli
El uso de esclavos no cambia nada. bond-primary Creo que no es relevante cuando se usa el modo 4 / 802.3ad AFAICTO, solo active-backup. ¿Qué versión estás ejecutando? Esta guia muestra dos variantes para Ubuntu, y este hilo se refiere a los cambios de configuración también. Además, la guía en backdrift.org muestra otra sintaxis para modprobe.d / bonding. Intenté mezclar todas las opciones (primaria y no, sintaxis de vinculación diferente, esclavos, ninguna y ninguna), sin suerte. - Tolli
Tolli: en realidad estoy usando esta configuración en modo 4 y funciona perfectamente. Cuando miré por primera vez una configuración de vinculación en Ubuntu, estaba usando 10.04. Parecía haber errores en los scripts de red para soportarlo. Esta configuración fue la única que funcionó para mí en ese momento y por eso me quedé con ella. ¿Ha intentado enlazar en el mismo interruptor en lugar de a través del interruptor? - Matt
Sí, también intenté conectar dos puertos al mismo conmutador con los mismos resultados. Ver la última incorporación al OP. También estaba teniendo problemas con los scripts en 12.04; El enfoque más confiable para mí al cambiar los parámetros en esta configuración es "ifdown eth4; ifdown eth5; ifdown bond0; rmmod bonding; ifup eth4; ifup eth5; ifup bond0" - divertido. Por mucho que odie no resolver las cosas, tal vez dejar los resultados en este momento sea el modo balance-xor. Sin embargo, me gustaría probar en otro servidor en un entorno separado, tengo otro proyecto similar por venir. - Tolli
¿Su servidor también tiene doble 1GBe nic's? Pruébelo con esos o con cualquier servidor que pueda tener por ahí que tenga 1GBe nics. Esto aislará el problema al servidor o al conmutador. Me inclino a pensar que podría ser un problema de configuración en su conmutador. ¿También cambia tener instalado el último firmware? - Matt


El problema no está en el lado de Linux sino en el lado de nexus y cómo funciona en la configuración de vPC.

para configurar vPC en nexus primero necesita conectar dos switches nexus y configre que enlace como "peer-link".

en una situación normal, cuando ambos enlaces de los conmutadores al servidor están en estado UP, el tráfico en vlan 11 configurado en vPC se descarta en peer-link.

solo cuando una de las interfaces que forman parte de vPC está inactiva: el tráfico en vlan 11 se permite en el enlace entre pares.

Así es como funciona vPC en los interruptores de nexus.

para resolver este problema, puede ejecutar fabric-path y establecer otra conexión entre los conmutadores nexus-1 y nexus-2.


0
2018-06-17 13:55