Example: Configuring PIM Make-Before-Break Join Load Balancing
Understanding the PIM Automatic Make-Before-Break Join Load-Balancing Feature
The PIM automatic make-before-break (MBB) join load-balancing feature introduces redistribution of PIM joins on equal-cost multipath (ECMP) links, with minimal disruption of traffic, when an interface is added to an ECMP path.
The existing PIM join load-balancing feature enables distribution
of joins across ECMP links. In case of a link failure, the joins are
redistributed among the remaining ECMP links, and traffic is lost.
The addition of an interface causes no change to this distribution
of joins unless the clear pim join-distribution
command
is used to load-balance the existing joins to the new interface.
If the PIM automatic MBB join load-balancing feature is configured,
this process takes place automatically.
The feature can be enabled by using the automatic
statement at the [edit protocols pim join-load-balance]
hierarchy level. When a new neighbor is available, the time taken
to create a path to the neighbor (standby path) can be configured
by using the standby-path-creation-delay seconds
statement at the [edit protocols pim]
hierarchy
level. In the absence of this statement, the standby path is created
immediately, and the joins are redistributed as soon as the new neighbor
is added to the network. For a join to be moved to the standby path
in the absence of traffic, the idle-standby-path-switchover-delay seconds
statement is configured at the [edit
protocols pim]
hierarchy level. In the absence of this statement,
the join is not moved until traffic is received on the standby path.
protocols { pim { join-load-balance { automatic; } standby-path-creation-delay seconds; idle-standby-path-switchover-delay seconds; } }
Example: Configuring PIM Make-Before-Break Join Load Balancing
This example shows how to configure the PIM make-before-break (MBB) join load-balancing feature.
Requirements
This example uses the following hardware and software components:
Three routers that can be a combination of M Series Multiservice Edge Routers (M120 and M320 only), MX Series 5G Universal Routing Platforms, or T Series Core Routers (TX Matrix and TX Matrix Plus only).
Junos OS Release 12.2 or later.
Before you configure the MBB feature, be sure you have:
Configured the device interfaces.
Configured an interior gateway protocol (IGP) for both IPv4 and IPv6 routes on the devices (for example, OSPF and OSPFv3).
Configured multiple ECMP interfaces (logical tunnels) using VLANs on any two routers (for example, Routers R1 and R2).
Overview
Junos OS provides a PIM automatic MBB join load-balancing feature to ensure that PIM joins are evenly redistributed to all upstream PIM neighbors on an equal-cost multipath (ECMP) path. When an interface is added to an ECMP path, MBB provides a switchover to an alternate path with minimal traffic disruption.
Topology
In this example, three routers are connected in a linear manner between source and receiver. An IGP protocol and PIM sparse mode are configured on all three routers. The source is connected to Router R0, and five interfaces are configured between Routers R1 and R2. The receiver is connected to Router R2, and PIM automatic MBB join load balancing is configured on Router R2.
Figure 1 shows the topology used in this example.
Configuration
CLI Quick Configuration
To quickly configure this example, copy the
following commands, paste them into a text file, remove any line breaks,
change any details necessary to match your network configuration,
and then copy and paste the commands into the CLI at the [edit]
hierarchy level.
Router R0 (Source)
set protocols pim interface all mode sparse set protocols pim interface all version 2 set protocols pim rp static address 10.255.12.34 set protocols pim rp static address abcd::10:255:12:34
Router R1 (RP)
set protocols pim interface all mode sparse set protocols pim interface all version 2 set protocols pim rp local family inet address 10.255.12.34 set protocols pim rp local family inet6 address abcd::10:255:12:34
Router R2 (Receiver)
set protocols pim interface all mode sparse set protocols pim interface all version 2 set protocols pim rp static address 10.255.12.34 set protocols pim rp static address abcd::10:255:12:34 set protocols mld interface ge-0/0/3 version 1 set protocols mld interface ge-0/0/3 static group ff05::e100:1 group-count 100 set protocols pim join load-balance automatic set protocols pim standby-path-creation-delay 5 set protocols pim idle-standby-path-switchover-delay 10
Configuring PIM MBB Join Load Balancing
Step-by-Step Procedure
The following example requires that you navigate various levels in the configuration hierarchy. For information about navigating the CLI, see Using the CLI Editor in Configuration Mode in the Junos OS CLI User Guide.
To configure PIM MBB join load balancing across the setup:
Configure PIM sparse mode on all three routers.
[edit protocols pim interface all] user@host# set mode sparse user@host# set version 2
Configure Router R1 as the RP.
[edit protocols pim rp local] user@R1# set family inet address 10.255.12.34 user@R1# set family inet6 address abcd::10:255:12:34
Configure the RP static address on non-RP routers (R0 and R2).
[edit protocols pim rp ] user@host# set static address 10.255.12.34 user@host# set static address abcd::10:255:12:34
Configure the Multicast Listener Discovery (MLD) group for ECMP interfaces on Router R2.
[edit protocols mld interface ge-0/0/3] user@R2# set version 1 user@R2# set static group ff05::e100:1 group-count 100
Configure the PIM MBB join load-balancing feature on the receiver router (Router R2).
[edit protocols pim] user@R2# set join load-balance automatic user@R2# set standby-path-creation-delay 5 user@R2# set idle-standby-path-switchover-delay 10
Results
From configuration mode, confirm your configuration
by entering the show protocols
command. If the output does
not display the intended configuration, repeat the instructions in
this example to correct the configuration.
user@R0# show protocols ospf { area 0.0.0.0 { interface lo0.0; interface ge-0/0/3.1; interface ge-0/0/3.2; interface ge-0/0/3.3; interface ge-0/0/3.4; interface ge-0/0/3.5; } } ospf3 { area 0.0.0.0 { interface lo0.0; interface ge-0/0/3.1; interface ge-0/0/3.2; interface ge-0/0/3.3; interface ge-0/0/3.4; interface ge-0/0/3.5; } } pim { rp { static { address 10.255.12.34; address abcd::10:255:12:34; } } interface all { mode sparse; version 2; } interface fxp0.0 { disable; } interface ge-0/0/3.1; interface ge-0/0/3.2; interface ge-0/0/3.3; interface ge-0/0/3.4; interface ge-0/0/3.5; }
user@R1# show protocols ospf { area 0.0.0.0 { interface lo0.0; interface ge-0/0/3.1; interface ge-0/0/3.2; interface ge-0/0/3.3; interface ge-0/0/3.4; interface ge-0/0/3.5; } } ospf3 { area 0.0.0.0 { interface lo0.0; interface ge-0/0/3.1; interface ge-0/0/3.2; interface ge-0/0/3.3; interface ge-0/0/3.4; interface ge-0/0/3.5; } } pim { rp { local { family inet { address 10.255.12.34; } family inet6 { address abcd::10:255:12:34; } } } interface all { mode sparse; version 2; } interface fxp0.0 { disable; } interface ge-0/0/3.1; interface ge-0/0/3.2; interface ge-0/0/3.3; interface ge-0/0/3.4; interface ge-0/0/3.5; }
user@R2# show protocols mld { interface ge-0/0/3.1 { version 1; static { group ff05::e100:1 { group-count 100; } } } ospf { area 0.0.0.0 { interface lo0.0; interface ge-1/0/7.1; interface ge-1/0/7.2; interface ge-1/0/7.3; interface ge-1/0/7.4; interface ge-1/0/7.5; interface ge-0/0/3.1; } } ospf3 { area 0.0.0.0 { interface lo0.0; interface ge-1/0/7.1; interface ge-1/0/7.2; interface ge-1/0/7.3; interface ge-1/0/7.4; interface ge-1/0/7.5; interface ge-0/0/3.1; } } pim { rp { static { address 10.255.12.34; address abcd::10:255:12:34; } } interface all { mode sparse; version 2; } interface fxp0.0 { disable; } interface ge-1/0/7.1; interface ge-1/0/7.2; interface ge-1/0/7.3; interface ge-1/0/7.4; interface ge-1/0/7.5; interface ge-0/0/3.1; join-load-balance { automatic; } standby-path-creation-delay 5; idle-standby-path-switchover-delay 10; }
Verification
- Verifying Interface Configuration
- Verifying PIM
- Verifying the PIM Automatic MBB Join Load-Balancing Feature
Verifying Interface Configuration
Purpose
Verify that the configured interfaces are functional.
Action
Send 100 (S,G) joins from the receiver to Router R2 . From the operational mode of Router R2, run the show pim interfaces command.
user@R2> show pim interfaces Stat = Status, V = Version, NbrCnt = Neighbor Count, S = Sparse, D = Dense, B = Bidirectional, DR = Designated Router, P2P = Point-to-point link, Active = Bidirectional is active, NotCap = Not Bidirectional Capable Name Stat Mode IP V State NbrCnt JoinCnt(sg/*g) DR address ge-0/0/3.1 Up S 4 2 DR,NotCap 0 0/0 70.0.0.1 ge-1/0/7.1 Up S 4 2 DR,NotCap 1 20/0 14.0.0.2 ge-1/0/7.2 Up S 4 2 DR,NotCap 1 20/0 14.0.0.6 ge-1/0/7.3 Up S 4 2 DR,NotCap 1 20/0 14.0.0.10 ge-1/0/7.4 Up S 4 2 DR,NotCap 1 20/0 14.0.0.14 ge-1/0/7.5 Up S 4 2 DR,NotCap 1 20/0 14.0.0.18
The output lists all the interfaces configured for use with
the PIM protocol. The Stat
field indicates the current
status of the interface. The DR address
field lists the
configured IP addresses. All the interfaces are operational. If the
output does not indicate that the interfaces are operational, reconfigure
the interfaces before proceeding.
Meaning
All the configured interfaces are functional in the network.
Verifying PIM
Purpose
Verify that PIM is operational in the configured network.
Action
From operational mode, enter the show pim statistics command.
user@R2> show pim statistics PIM Message type Received Sent Rx errors V2 Hello 4253 5269 0 V2 Register 0 0 0 V2 Register Stop 0 0 0 V2 Join Prune 0 1750 0 V2 Bootstrap 0 0 0 V2 Assert 0 0 0 V2 Graft 0 0 0 V2 Graft Ack 0 0 0 V2 Candidate RP 0 0 0 V2 State Refresh 0 0 0 V2 DF Election 0 0 0 V1 Query 0 0 0 V1 Register 0 0 0 V1 Register Stop 0 0 0 V1 Join Prune 0 0 0 V1 RP Reachability 0 0 0 V1 Assert 0 0 0 V1 Graft 0 0 0 V1 Graft Ack 0 0 0 AutoRP Announce 0 0 0 AutoRP Mapping 0 0 0 AutoRP Unknown type 0 Anycast Register 0 0 0 Anycast Register Stop 0 0 0 Global Statistics Hello dropped on neighbor policy 0 Unknown type 0 V1 Unknown type 0 Unknown Version 0 Neighbor unknown 0 Bad Length 0 Bad Checksum 0 Bad Receive If 0 Rx Bad Data 0 Rx Intf disabled 0 Rx V1 Require V2 0 Rx V2 Require V1 0 Rx Register not RP 0 Rx Register no route 0 Rx Register no decap if 0 Null Register Timeout 0 RP Filtered Source 0 Rx Unknown Reg Stop 0 Rx Join/Prune no state 0 Rx Join/Prune on upstream if 0 Rx Join/Prune for invalid group 0 Rx Join/Prune messages dropped 0 Rx sparse join for dense group 0 Rx Graft/Graft Ack no state 0 Rx Graft on upstream if 0 Rx CRP not BSR 0 Rx BSR when BSR 0 Anycast Register Stop 0 0 0
The V2 Hello
field lists the number of PIM hello
messages sent and received. The V2 Join Prune
field lists
the number of join messages sent before the join-prune-timeout
value is reached. If both values are nonzero, PIM is functional.
Meaning
PIM is operational in the network.
Verifying the PIM Automatic MBB Join Load-Balancing Feature
Purpose
Verify that the PIM automatic MBB join load-balancing feature works as configured.
Action
To see the effect of the MBB feature on Router R2:
Run the show pim interfaces operational mode command before disabling an interface.
user@R2> show pim interfaces Stat = Status, V = Version, NbrCnt = Neighbor Count, S = Sparse, D = Dense, B = Bidirectional, DR = Designated Router, P2P = Point-to-point link, Active = Bidirectional is active, NotCap = Not Bidirectional Capable Name Stat Mode IP V State NbrCnt JoinCnt(sg/*g) DR address ge-0/0/3.1 Up S 4 2 DR,NotCap 0 0/0 70.0.0.1 ge-1/0/7.1 Up S 4 2 DR,NotCap 1 20/0 14.0.0.2 ge-1/0/7.2 Up S 4 2 DR,NotCap 1 20/0 14.0.0.6 ge-1/0/7.3 Up S 4 2 DR,NotCap 1 20/0 14.0.0.10 ge-1/0/7.4 Up S 4 2 DR,NotCap 1 20/0 14.0.0.14 ge-1/0/7.5 Up S 4 2 DR,NotCap 1 20/0 14.0.0.18
The
JoinCnt(sg/*g)
field shows that the 100 joins are equally distributed among the five interfaces.Disable the
ge-1/0/7.5
interface.[edit] user@R2# set interfaces ge-1/0/7.5 disable user@R2# commit
Run the show pim interfaces command to check if load balancing of joins is taking place.
user@R2> show pim interfaces Stat = Status, V = Version, NbrCnt = Neighbor Count, S = Sparse, D = Dense, B = Bidirectional, DR = Designated Router, P2P = Point-to-point link, Active = Bidirectional is active, NotCap = Not Bidirectional Capable Name Stat Mode IP V State NbrCnt JoinCnt(sg/*g) DR address ge-0/0/3.1 Up S 4 2 DR,NotCap 0 0/0 70.0.0.1 ge-1/0/7.1 Up S 4 2 DR,NotCap 1 25/0 14.0.0.2 ge-1/0/7.2 Up S 4 2 DR,NotCap 1 25/0 14.0.0.6 ge-1/0/7.3 Up S 4 2 DR,NotCap 1 25/0 14.0.0.10 ge-1/0/7.4 Up S 4 2 DR,NotCap 1 25/0 14.0.0.14
The
JoinCnt(sg/*g)
field shows that the 100 joins are equally redistributed among the four active interfaces.Add the removed interface on Router R2.
[edit] user@R2# delete interfaces ge-1/0/7.5 disable user@R2# commit
Run the show pim interfaces command to check if load balancing of joins is taking place after enabling the inactive interface.
user@R2> show pim interfaces Stat = Status, V = Version, NbrCnt = Neighbor Count, S = Sparse, D = Dense, B = Bidirectional, DR = Designated Router, P2P = Point-to-point link, Active = Bidirectional is active, NotCap = Not Bidirectional Capable Name Stat Mode IP V State NbrCnt JoinCnt(sg/*g) DR address ge-0/0/3.1 Up S 4 2 DR,NotCap 0 0/0 70.0.0.1 ge-1/0/7.1 Up S 4 2 DR,NotCap 1 20/0 14.0.0.2 ge-1/0/7.2 Up S 4 2 DR,NotCap 1 20/0 14.0.0.6 ge-1/0/7.3 Up S 4 2 DR,NotCap 1 20/0 14.0.0.10 ge-1/0/7.4 Up S 4 2 DR,NotCap 1 20/0 14.0.0.14 ge-1/0/7.5 Up S 4 2 DR,NotCap 1 20/0 14.0.0.18
The
JoinCnt(sg/*g)
field shows that the 100 joins are equally distributed among the five interfaces.Note:This output should resemble the output in Step 1.
Meaning
The PIM automatic MBB join load-balancing feature works as configured.