JUNOS 中的 ECMP 负载平衡

JUNOS 中的 ECMP 负载平衡

我正在尝试弄清楚如何在 JUNOS 中使用 ECMP 负载平衡。我知道这不是实现负载平衡的最佳方法,但它既快捷又简单,而且可以完成我需要做的事情。在 ScreenOS 中,这很容易。

设备:SRX220 JunOS:10.3R2.11

以下是我目前得到的信息:

routing-options {
    static {
        route 0.0.0.0/0 {
            next-hop [ 1.1.1.1 1.1.1.2 ];
            metric 10;
        }
    }
    maximum-paths 2;

这样做可以吗?

汤姆

答案1

您肯定不想要maximum-paths。这会限制您的路由表大小,并且与 ECMP 无关。

因此只需:

routing-options {
    static {
        route 0.0.0.0/0 {
            next-hop [ 1.1.1.1 1.1.1.2 ];
            metric 10;
        }
    }
}

你会看到的:

lab@router> show route 0.0.0.0/0
...
0.0.0.0/0          *[Static/5] 00:01:28, metric 10
                    > to 1.1.1.1 via ge-0/0/0.0
                      to 1.1.1.2 via ge-0/0/0.0

两个下一跳都显示在路由表中,但要查看转发表中实际发生的情况,您必须深入挖掘:

lab@router> show route forwarding-table destination 0.0.0.0/0
...
Destination        Type RtRef Next hop           Type Index NhRef Netif
0.0.0.0/0          user     0 1.1.1.1            ucst   558     3 ge-0/0/0.0

默认情况下,当路由器将路由表推送到转发表时,它会随机选择一个下一跳。要更改该行为,您可以定义“转发表导出”策略,该策略控制从路由表构建转发表时发生的情况:

routing-options {
    static {
        route 0.0.0.0/0 {
            next-hop [ 1.1.1.1 1.1.1.2 ];
            metric 10;
        }
    }
    forwarding-table {
        export LOAD-BALANCE;
    }
}
policy-options {
    policy-statement LOAD-BALANCE {
        then {
            load-balance per-packet;
        }
    }
}

现在,路由表仍然看起来一样:

lab@router> show route 0.0.0.0/0
...
0.0.0.0/0          *[Static/5] 00:07:28, metric 10
                    > to 1.1.1.1 via ge-0/0/0.0
                      to 1.1.1.2 via ge-0/0/0.0

但是转发表(计算的地方)有两条路由:

lab@router> show route forwarding-table destination 0.0.0.0/0                    
...
Destination        Type RtRef Next hop           Type Index NhRef Netif
0.0.0.0/0          user     0                    ulst 262142     2
                              1.1.1.1            ucst   558     3 ge-0/0/0.0
                              1.1.1.2            ucst   540     3 ge-0/0/0.0

现在您正在进行负载平衡!

然而,有一点要记住,尽管极具误导性 load-balance per-packet声明中,所有具有此配置的 Juniper 路由器实际上都每流负载平衡。每个数据包都基于(源 IP、目标 IP 和协议号)进行哈希处理。因此,如果您只有几个流量,它们很可能都使用相同的下一跳。一旦您增加流量数量,您应该会看到更均匀的负载。

(实际上,最早的硬件确实实现了每个数据包的负载平衡,但你可能永远不会遇到这种情况)

相关内容