簡介
本文檔介紹埠通道負載均衡中可能發生的極化情況,並提供如何防止極化的建議。
必要條件
需求
思科建議您瞭解以下主題:
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景
極化是雜湊演算法選擇網路中的特定路徑而未使用冗餘路徑的問題。
拓撲
組態
N7K1和N7K2連線在VPC中,Po100、Po200、Po300和Po301位於VPC埠通道中。
N7K1和N7K2充當純L2交換機,這些交換機上不會發生路由。
所有交換機都運行相同的埠通道負載均衡演算法。
在從N7K1和N7K2發出的流量上會出現極化問題,無論從源到目的地的流量是否在同一個VLAN中(無路由),或者它們是否位於不同的VLAN中,並且路由發生在N7K3或N7k4上。
流量傳輸
來源將多個串流傳送到目的地(具有多個來源和目的地IP位址,且每個封包的L4連線埠資訊也有所不同)。使用良好的流量混合,以確保在理想情況下,流量在埠通道成員介面之間均勻分配。
從源發出的流量到達N7k3/N7k4,然後透過N7K1/N7K2到達目的地。
N7K1和N7K2上Po100和Po200的成員鏈路中的一個鏈路發出幾乎99%的流量,另一個鏈路保持空閒。也就是說,在每台交換機N7K1和N7K2上,4/2和4/3中的一個鏈路傳輸99%的單播流量,而另一個鏈路傳輸不到1%。同樣,9/2和9/3中的一個鏈路傳輸99%的流量,而另一個鏈路傳輸不到1%。故障排除部分中的輸出顯示N7K1上Po100和Po200成員介面的流量。在N7K2上可看到類似的輸出。
無論使用的埠通道負載平衡演算法的型別如何,只要在N7K1/N7K2對和N7K3/N7K4對上使用相同的埠通道負載平衡演算法,即可發現此問題。用於檢查埠通道負載均衡演算法的命令如下所示:
N7K1# show port-channel load-balance
Warning: Per Packet Load balance configuration has higher precedence
System config:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Port Channel Load-Balancing Configuration for all modules:
Module 1:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 2:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 3:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 4:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 7:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 8:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 9:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
疑難排解
如果在埠通道上發現負載均衡不均衡,則可能是因為極化。
當流量到達N7K3和N7K4交換機時,它們透過N7K4的Po301和N7K3的Po300轉發到N7K1/N7K2交換機。在這裡,負載均衡演算法啟動,一些流轉發到N7K1,其他流轉發到N7K2。
最初,所有流量都會進入eth1/1上的交換機N7K3/N7K4,根據src-dst IP地址和l4埠資訊,某些流在指向N7K1的鏈路上被雜湊,而其它流在指向N7K2的鏈路上被雜湊。雜湊操作基於交換機計算的rbh值來完成。為簡單起見,我們假設交換機根據使用的負載均衡演算法,將傳入流量分為兩個流(流X和流Y)。流X從一個埠通道成員鏈路傳送出去,流Y從另一個埠通道成員鏈路傳送出去。
現在,當流量落在N7K1/N7K2對上時,可能發生兩種情況。(考慮X和Y可以互換。)
案例1:
N7K3將流X傳送到N7K1並將流Y傳送到N7K2
N7K4將流Y傳送到N7K1並將流X傳送到N7K2
案例2:
N7K3將流X傳送到N7K1並將流Y傳送到N7K2
N7K4將流X傳送到N7K1並將流Y傳送到N7K2
在案例1中,N7K1和N7K2接收兩種型別的流(流X和流Y),即使在使用與N7K3/N7K4相同的埠通道負載均衡演算法之後,也不會出現極化,因為流從不同鏈路上的Po100和Po200輸出。因此,我們看到埠通道成員介面之間的流量分配更佳。
在案例2中,N7K1僅接收流X,N7K2僅接收流Y,如果這些交換機上使用的埠通道負載均衡演算法與N7K3/N7K4對中使用的演算法相同,則這可能會產生極化。由於N7K1和N7K2使用相同的埠通道負載均衡演算法,因此N7K1僅在Po100/Po200的一個成員鏈路上傳送流X,而另一個成員鏈路不轉發任何流量。同樣,N7K2隻在Po100/Po200的一個成員鏈路上傳送流Y,而另一個成員鏈路不轉發任何流量。
由於交換機N7K1和N7K2接收的流量已分類為begin,因此僅使用一個埠通道成員鏈路將所有傳入流量從交換機N7K1/N7K2傳送出去,而從另一個成員鏈路傳送的任何流量都不傳送。在傳入流量速率超過單埠通道鏈路的頻寬的情況下,由於另一埠通道成員鏈路不會轉發此流量,因此可能會丟棄額外的流量。
在port-channel中使用兩個以上的連結時,可能會發生類似問題。例如,如果埠通道中使用了四個鏈路,則根據雜湊的情況,要麼不會發生偏振,要麼我們看到部分偏振,其中四個埠通道成員鏈路中只有兩個用於轉發所有傳入流量。其他兩個連結不會轉寄任何內容
極化是由設計引起的,因此分析設計以確保沒有極化發生。輸出表明N7k1上的Po100和Po200上發生極化(在N7K2上也可以看到類似的輸出)。
N7K1# show port-channel summary | i 200
200 Po200(SU) Eth LACP Eth9/2(P) Eth9/3(P)
N7K1# show port-channel traffic interface port-channel 200
NOTE: Clear the port-channel member counters to get accurate statistics
ChanId Port Rx-Ucst Tx-Ucst Rx-Mcst Tx-Mcst Rx-Bcst Tx-Bcst
------ --------- ------- ------- ------- ------- ------- -------
200 Eth9/2 0.0% 99.99% 44.44% 4.00% 0.0% 100.00%
200 Eth9/3 0.0% 0.00% 55.55% 96.00% 0.0% 0.0%
N7K1# show port-channel summary | i 100
100 Po100(SU) Eth LACP Eth4/2(P) Eth4/3(P)
N7K1# show port-channel traffic interface port-channel 100
NOTE: Clear the port-channel member counters to get accurate statistics
ChanId Port Rx-Ucst Tx-Ucst Rx-Mcst Tx-Mcst Rx-Bcst Tx-Bcst
------ --------- ------- ------- ------- ------- ------- -------
100 Eth4/2 0.0% 99.99% 40.55% 7.00% 0.0% 100.00%
100 Eth4/3 0.0% 0.00% 54.44% 93.00% 0.0% 0.0%
因應措施
本節介紹一些用於確保不會發生極化的解決方法。
- 正確設計:由於導致偏振的主要原因是設計不當,因此最好確保我們更改網路設計,以確保拓撲中沒有出現偏振的空間。
如果無法對設計進行變更,我們可以執行下列動作。
- 在交換機的每個級別上使用不同的埠通道負載均衡演算法(N7K1/N7k2對使用一種演算法,N7K3//N7k4對使用另一種演算法)。當負載均衡演算法發生更改時,N7k1/N7k2交換機現在會根據N7k3/N7k4交換機所用資訊以外的某些其他資訊對傳入流量進行雜湊。因此,傳出流量使用所有埠通道成員鏈路。(選擇哪種演算法取決於交換機收到的流量型別。)
- 如果要使用相同的負載均衡演算法,請在交換機的每一層使用不同的旋轉值。
rotate 命令透過按使用者配置的位元組偏移雜湊輸入,在雜湊演算法中引入隨機性,有助於避免極化。(N7k1/N7k2對使用一個旋轉值,N7k3/N7k4對使用不同的旋轉值。)