文章目录

  • 1.为啥推荐2,4,8条成员呢
  • 2.思科散列算法到底怎么工作
  • 2.1 bit
  • 2.2 xor

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个成员链路时候,负载均衡占比比较平均

成员链路数量

散列值数量占比

简要计算(分子是散列值数量,分母是成员数量)

2

4:4

8/2=4,每个成员链路4个散列值,8%2=0,没有额外散列值

3

3:3:2

8/3=2,每个成员链路2个散列值,8%3=2,编号0和1成员链路额外1个散列值

4

2:2:2:2

8/4=2,每个成员链路2个散列值,8%4=0,没有额外散列值

5

2:2:2:1:1

8/5=1,每个成员链路1个散列值,8%5=3,编号0,1,2成员链路额外1个散列值

6

2:2:1:1:1:1

8/6=1,每个成员链路1个散列值,8%6=2,编号0,1成员链路额外1个散列值

7

2:1:1:1:1:1:1

8/7=1,每个成员链路1个散列值,8%7=1,编号0成员链路额外1个散列值

8

1:1:1:1:1:1:1:1

8/8=0,每个成员链路1个散列值,8%8=0,没有额外散列值

提示:其他厂商的成员链路散列值分配数量占比跟思科几乎没有区别,不同之处在于散列值的数量,具体hash算法和成员down/up时流量转发优化。

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

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

参数

hash算法

支持的交换机型号

src-ip

bit

所有

dst-ip

bit

所有

src-dst-ip

xor

所有

src-mac

bit

所有

dst-mac

bit

所有

src-dst-mac

xor

所有

src-port

bit

4500 6500

dst-port

bit

4500 6500

src-dst-port

xor

4500 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

分配链路

2

110最后1bit:0,散列值为0

散列值0分配给编号0的链路

3

110最后2bit:10,二进制10的十进制散列值为2

散列值2分配给编号2的链路

4

110最后2bit:10,二进制10的十进制散列值为2

散列值2分配给编号2的链路

5

110最后3bit:110,二进制110的十进制散列值为6

散列值6分配给编号0的链路

6

110最后3bit:110,二进制110的十进制散列值为6

散列值6分配给编号5的链路

7

110最后3bit:110,二进制110的十进制散列值为6

散列值6分配给编号5的链路

8

110最后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

分配链路

2

110最后1bit:0,001最后1bit:0,1xor0=1,二进制1的十进制散列值为1

散列值1分配给编号1的链路

3

110最后2bit:10,001最后2bit:01,10xor01=11,二进制11的十进制散列值为3

散列值3分配给编号0的链路

4

110最后2bit:10,001最后2bit:01,10xor01=11,二进制11的十进制散列值为3

散列值3分配给编号3的链路

5

110最后3bit:110,001最后3bit:001,110xor001=111,二进制111的十进制散列值为7

散列值7分配给编号2的链路

6

110最后3bit:110,001最后3bit:001,110xor001=111,二进制111的十进制散列值为7

散列值7分配给编号1的链路

7

110最后3bit:110,二进制110的十进制散列值为6

散列值7分配给编号0的链路

8

110最后3bit:110,二进制110的十进制散列值为6

散列值7分配给编号6的链路

不管是bit还是xor,成员链路数量为m,需要低bit位的数量n,用2^n>=m计算得到最小n值即可。