4.2 链路聚合:负载均衡

1.为啥推荐2,4,8条成员呢

思科Catalyst交换机每产生一个聚合端口,交换机都会为其成员链路进行编号,通常选择物理端口ID小的编号为0,然后依次类推最大是7。设备会将0-7这3bit散列值依次分配给成员链路,并将结果存放到芯片的hash表中。那设备又是如何分配呢?下面以3条成员链路的聚合端口为例。
1. 成员链路编号依次是0,1,2,按照顺序分配0–7散列值。
2. 首先依次分的散列值是0,1,2;然后依次分散列值是3,4,5;最后分散列值是6,7;8个散列值分完就不在继续分配。
3. 编号为1的成员链路分配3个散列值0,3,6;编号为1的成员链路分配3个散列值1,4,7; 编号为2的成员链路分配2个散列值2,5。
散列值的数量代表理想情况下成员链路的转发流量占比, 所以可以得出3个成员的聚合链路流量占比为3:3:2。下表总结了2到8个成员链路时散列值数量分配占比情况,其散列值和端口编号具体对应关系,请参照上面的例子自行计算。由此可以看出有2,4,8个成员链路时候,负载均衡占比比较平均

成员链路数量散列值数量占比简要计算(分子是散列值数量,分母是成员数量)
24:48/2=4,每个成员链路4个散列值,8%2=0,没有额外散列值
33:3:28/3=2,每个成员链路2个散列值,8%3=2,编号0和1成员链路额外1个散列值
42:2:2:28/4=2,每个成员链路2个散列值,8%4=0,没有额外散列值
52:2:2:1:18/5=1,每个成员链路1个散列值,8%5=3,编号0,1,2成员链路额外1个散列值
62:2:1:1:1:18/6=1,每个成员链路1个散列值,8%6=2,编号0,1成员链路额外1个散列值
72:1:1:1:1:1:18/7=1,每个成员链路1个散列值,8%7=1,编号0成员链路额外1个散列值
81:1:1:1:1:1:1:18/8=0,每个成员链路1个散列值,8%8=0,没有额外散列值
提示:其他厂商的成员链路散列值分配数量占比跟思科几乎没有区别,不同之处在于散列值的数量,具体hash算法和成员down/up时流量转发优化。

2.思科散列算法到底怎么工作

思科负载均衡中流量使用哪个端口有2个散列算法:bit和xor,到底用哪一个就看管理员配置load balance的参数了,参数与算法的对比表如下。

参数hash算法支持的交换机型号
src-ipbit所有
dst-ipbit所有
src-dst-ipxor所有
src-macbit所有
dst-macbit所有
src-dst-macxor所有
src-portbit4500 6500
dst-portbit4500 6500
src-dst-portxor4500 6500

总结:参数就1个关键值用bit,有2个关键值用xor。
下面以load balance的参数是src-ip和src-dst-ip为例,讲解bit和xor在成员链路数量不同的情况下如何进行负载分配,其中src-ip=192.168.10.6和dst-ip=192.168.20.1为例。

2.1 bit

按照参数和算法对比表load-balance=src-ip时使用bit算法,src-ip=192.168.10.6换成二进制,其最低3位bit是110,最后的计算结果如下表所示,散列值与端口编号对应关系请参照第1节的例子。

成员链路数量使用bit分配链路
2110最后1bit:0,散列值为0散列值0分配给编号0的链路
3110最后2bit:10,二进制10的十进制散列值为2散列值2分配给编号2的链路
4110最后2bit:10,二进制10的十进制散列值为2散列值2分配给编号2的链路
5110最后3bit:110,二进制110的十进制散列值为6散列值6分配给编号0的链路
6110最后3bit:110,二进制110的十进制散列值为6散列值6分配给编号5的链路
7110最后3bit:110,二进制110的十进制散列值为6散列值6分配给编号5的链路
8110最后3bit:110,二进制110的十进制散列值为6散列值6分配给编号5的链路

2.2 xor

按照参数和算法对比表load-balance=src-dst-ip时使用xor算法,src-ip=192.168.10.6换成二进制,其最低3位bit是110,dst-ip=192.168.10.1,换成二进制,其最低3位bit是001。xor就是将相应的位进行异或,相同则为0,不同则为1。最后的计算结果如下表所示,散列值与端口编号对应关系请参照第1节的例子。

成员链路数量使用bit分配链路
2110最后1bit:0,001最后1bit:0,1xor0=1,二进制1的十进制散列值为1散列值1分配给编号1的链路
3110最后2bit:10,001最后2bit:01,10xor01=11,二进制11的十进制散列值为3散列值3分配给编号0的链路
4110最后2bit:10,001最后2bit:01,10xor01=11,二进制11的十进制散列值为3散列值3分配给编号3的链路
5110最后3bit:110,001最后3bit:001,110xor001=111,二进制111的十进制散列值为7散列值7分配给编号2的链路
6110最后3bit:110,001最后3bit:001,110xor001=111,二进制111的十进制散列值为7散列值7分配给编号1的链路
7110最后3bit:110,二进制110的十进制散列值为6散列值7分配给编号0的链路
8110最后3bit:110,二进制110的十进制散列值为6散列值7分配给编号6的链路
不管是bit还是xor,成员链路数量为m,需要低bit位的数量n,用2^n>=m计算得到最小n值即可。

版权声明:本文为ldg513783697原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。