Nexus 9000 vPC, vPC Fabric Peering and EVPN ESI multihoming: what actually breaks

Three ways to make two Nexus 9000 leaves one LACP partner: vPC, vPC Fabric Peering, EVPN ESI multihoming. All forward on both cables. Which one holds up when a leaf loses the fabric, the host leg dies, or the peer-link goes? Four pairs, one fabric, thirteen drills, three passes.
Nexus 9000 vPC, vPC Fabric Peering and EVPN ESI multihoming: what actually breaks

On this page

A server sits in a rack with two cables into two different Nexus 9000 leaves, bonded with LACP. The bond only comes up if both switches present the same LACP system ID, so the two leaves have to agree to be one partner. NX-OS gives you three ways to make that agreement. Virtual port channel, vPC, uses a dedicated peer-link and a keepalive. vPC Fabric Peering keeps the vPC model but replaces the physical peer-link with a VXLAN tunnel through the spines. EVPN ESI multihoming drops vPC altogether and lets BGP route types do the coordination. All three forward on both cables. This post builds all three in one VXLAN EVPN fabric, puts a host behind each, and measures what each one does when a link, a leaf's uplinks, the host leg, and the peer-link go away.

Three panels: traditional vPC with a peer-link between two leaves, vPC Fabric Peering with the virtual peer-link running through the spines, and EVPN ESI multihoming where Type-1 and Type-4 routes over the BGP EVPN sessions coordinate the two leaves. In every panel a server with an LACP bond hangs off both leaves.
The same job done three ways: a physical peer-link, a VXLAN tunnel standing in for it, or BGP routes and no peer-link at all.

Where the designs differ

Comparison table. Peer-link: vPC a physical port-channel between the leaves; Fabric Peering a port-channel with no member ports, the peer-link is a VXLAN tunnel routed through the spines; ESI none. Keepalive: vPC a separate link or routed path; Fabric Peering the same, still required; ESI none. State sync: vPC CFS over the peer-link with ARP and MAC sync; Fabric Peering CFS over TCP/IP through the spines; ESI BGP EVPN, Type-4 elects the designated forwarder, Type-1 announces the segment, Type-2 carries the MACs with the ESI. VTEP address: vPC and Fabric Peering one anycast address for the pair plus each leaf's own; ESI each leaf keeps its own address only. What a remote VTEP sees: vPC and Fabric Peering one tunnel destination for the host; ESI the host MAC with an Ethernet Segment Identifier resolved through the segment's Type-1 routes to one or both leaves. A leaf isolated from the fabric: vPC keeps forwarding over the peer-link if a routed path exists across it; Fabric Peering the virtual peer-link dies with the uplinks and the vPC on that leaf is suspended; ESI core-tracking shuts the segment port-channel on that leaf. Extra hardware needs: vPC front-panel ports for the peer-link; Fabric Peering a TCAM region for the redirect, carved and reloaded; ESI a TCAM region on the first-generation implementation and none of the vPC infrastructure.
Where the designs differ. The two peer-link rows are where the failure drills pull the three apart.

The lab

Two spines and eight leaves, all Nexus 9300v under containerlab, in four pairs. Pair A is traditional vPC. Pair B is vPC Fabric Peering. Pairs C and D are EVPN ESI multihoming, two segments so the vPC pairs have more than one ESI to resolve and so ESI to ESI traffic is in the mix. One host behind each pair, all four in VLAN 10 mapped to VNI 10010, with the anycast gateway at 192.168.10.254. Every host is an 802.3ad bond running fast LACP with the layer3+4 transmit hash policy. The hosts behind the ESI pairs send VLAN 10 tagged, because the first-generation ESI implementation does not support a native VLAN on the segment trunk.

Topology: spine1 and spine2 at the top, four leaf pairs below them, each pair with one server on an LACP bond. Pair A has a peer-link and keepalive between its leaves; pairs B, C and D have no leaf to leaf cabling.
Eight leaves, four pairs, four hosts. The only leaf to leaf cabling in the fabric is pair A's peer-link and keepalive.

The underlay is OSPF on point to point /31 links, the overlay is iBGP in AS 65001 with the spines as route reflectors, BUM replication is ingress replication. Pairs A and B and the spines run NX-OS 10.6(1)F, pairs C and D run 9.3(16): on the 9300v, virtual peer-link exists in 10.6(1)F and not in 9.3(16), and the evpn esi multihoming command set exists in 9.3(16) and in no 10.x 9300v release. On hardware the release is set by the platform: fabric peering arrived in the 9.2(x) train for the 9332C, 9364C and 9300-FX, FXP and FX2 switches, the first-generation ESI implementation ran on first-generation 9300s through 9.3(x), and the current one arrived in 10.6(1)F for the 9300-FX2, FX3, GX and later families.

Four failure scenarios, each applied on the vPC primary or the first ESI leaf of the pair and removed 30 seconds later. One uplink shut. Both uplinks shut, so the leaf keeps its host bond and loses the fabric. The host leg, the leaf side of the bond, shut. And the peer-link, which only pair A has. Each drill runs one ping probe of 350 packets at 0.2 second intervals from a host on a different pair to the host behind the pair under test, starting 10 seconds before the failure. Before every drill the script waits until both leaves show the host port-channel bundled and the tunnel source or segment up, and warms the probe's ARP. The whole matrix ran three times on the same lab, and every number below is the range across those passes. I report probes never answered and the longest stretch with nothing arriving; both include the probe's own scheduling and round trip, so they bound the disruption rather than measure convergence exactly.

This post is for paying subscribers only

Subscribe to LevelUp I.T. newsletter and stay updated.

Don't miss anything. Get all the latest posts delivered straight to your inbox. It's free!
Great! Check your inbox and click the link to confirm your subscription.
Error! Please enter a valid email address!