7609 Load Balance Issue and Polarization
环境:
1. CISCO7609
2. Two engine for WS-SUP720-3BXL
问题:
客户配置了5条静态路由负载均衡,状态及流量都比较正常,但当客户加了第6条静态路由的时候,发现有一个口的流量与其他相比少了很多。
30 second input rate 349662000 bits/sec, 141978 packets/sec |
30 second output rate 330499000 bits/sec, 71334 packets/sec |(9/1)
-------------------------------------------------------------|----
30 second input rate 363785000 bits/sec, 139117 packets/sec |
30 second output rate 634835000 bits/sec, 134002 packets/sec |(9/9)
-------------------------------------------------------------|----
30 second input rate 369379000 bits/sec, 139501 packets/sec |
30 second output rate 603555000 bits/sec, 127889 packets/sec |(8/1)
-------------------------------------------------------------|----
30 second input rate 339343000 bits/sec, 138604 packets/sec |
30 second output rate 625077000 bits/sec, 132784 packets/sec |(9/17)
-------------------------------------------------------------|----
30 second input rate 363548000 bits/sec, 138348 packets/sec |
30 second output rate 615937000 bits/sec, 128804 packets/sec |(9/23)
-------------------------------------------------------------|----
30 second input rate 353248000 bits/sec, 143046 packets/sec |
30 second output rate 649456000 bits/sec, 135419 packets/sec |(9/24)
根据以下命令确认路由是否正常,但发现没有异样:
Show ip cef summary Show ip cef X.X.X.X Show ip cef X.X.X.X detail Show ip cef X.X.X.X internal
首先我们先介绍下CEF的负载均衡
基于CEF的负载均衡分两种:
1. Per-packet load balancing
这种方法可以得到几乎完美的分配流量达到负载均衡,但是对基于Session的业务来说是不好的选择,例如TCP,如果TCP 3次握手被分在不同路径上传送,某条线路延时大,就需要重传,严重影响通信。
并且在很多基于硬件转发的平台上是不支持这种负载均衡的。
2. Per-destination load balancing
这种方法主要是基于Session的,例如有同样源ip和目的ip的数据流(根据不同的算法也会把端口加上去)都属于同一Session。这些数据会经过HASH运算去匹配16个桶,说白了就是要遵守事先定好的规则。
另外规则可以通过以下命令进行更改:
ip cef load-sharing algor univer [id] ip cef load-sharing algor tun [id] ip cef load-sharing algor original
其次介绍下Polarization
中文意思就是极化, 什么是极化?咱们用下面这个例子简单解释下。
ping 10.1.1.1 ------+------- | +---+----+ | SW1 | | HASH | +---+----* | \\1, 2,| \\3, 4,| \\5 6 | \\ +---+----* *--------+ | SW2 | | SW3 | | HASH | | HASH | +---+----* *----+---+ | \\0, 0/ | 2,| \\0/ |1, 4,| 0/ \0 |3, 6 | 0// \\ |5 +---+----*/ *----+---+ | SW4 | | SW5 | | | | | +---*----+ +---*----+ \ // 2\\ /1 4\ //3 6\\ //5 +-------\--/-------+ | 10.1.1.0/24 | +------------------+
由于是相同的设备,而且算法都是默认算法,所以经过HASH得出的结果也是一样的,因此就产生了SW2—>SW5 和 SW3–>SW4两条线无流量。
默认情况下,HASH是采用“src-dst IP + universal ID”来计算的。
当配置了“mls ip cef load-sharing full”后,HASH就采用“src/dst IP + src/dst L4 port”来计算了。
解决极化的方法:
1. 更改不同层次交换机的HASH算法,导致算出的结果不一致。
2. 更改负载的链路数,例如在汇聚层是双上联,你可以在核心层改成3条负载线路。可以达到同样消除极化的效果。
解决问题:
注:为了避免极化问题,在PFC3 上对某些参数进行了调整,使其默认就避免极化的发生(算法采用“L3 src_dst IPs + universal ID + multiple adjs”),但这样可能导致流量分配不均(在基数负载均衡下是不会有这种问题的),参考如下:
CEF pathcount | hw pathcount | hw mapping --------------|--------------|---------------- 2 | 15 | 7:8 4 | 5 | 1:1:1:2 6 | 11 | 1:2:2:2:2:2 8 | 13 | 1:1:1:2:2:2:2:2
对此可以通过命令“mls ip cef load-sharing simple”来关闭调整。这样就可以使线路负载均衡,但是如果遇到极化的问题就需要手动调整了。
对于load-sharing算法的总结:
1. default mls ip cef load-sharing ip
L3 src_dst IPs + universal ID + multiple adjs
2. mls ip cef load-sharing full
L3 src_dst IPs + L4 src_dst ports+ multiple adjs
3. mls ip cef load-sharing full simple
L3 src_dst IPs + L4 src_dst ports
4. mls ip cef load-sharing simple
L3 src_dst IPs + universal ID
5. mls ip cef load-sharing full exclude-port source
L3 src_dst IPs + L4 dst port + multiple adjs
6. mls ip cef load-sharing full exclude-port destination
L3 src_dst IPs + L4 src port + multiple adjs
链接信息:
Cisco Express Forwarding Feature Module
How Does Load Balancing Work?
Troubleshooting Load Balancing Over Parallel Links Using Cisco Express Forwarding
Load Balancing with CEF
版权声明:
本文链接:7609 Load Balance Issue and Polarization
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接
果然是赵勇,再次受教。
晕。。。