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,沒有額外散列值 |
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的鏈路 |