〇、鏈路負載均衡的功能(What)#
鏈路負載均衡的作用是將內網用戶訪問外網的流量分發到多條鏈路中。就好比從公司到家,有好幾條路可以選,鏈路負載均衡可以幫助我們在下班的時候選一條最快到家躺著的路,或者有最好風景的路,再或者是有燒烤的路。
從功能上,我們可以看出鏈路負載均衡的場景:
對於企業來說,應用多出口鏈路可以防止某一出口鏈路故障對公司業務的影響,也能避免跨 ISP 訪問資源慢的問題。
一、為什麼需要鏈路負載均衡(Why)#
上文我們說,鏈路負載均衡的主要功能是選路,而網絡中負責選路的還有路由,而且路由也有能夠同時應用於多出口鏈路的等價靜態路由和策略路由,那為什麼我們還需要鏈路負載均衡?
等價靜態路由與策略路由#
要回答這個問題,首先我們要定義等價靜態路由和策略路由的概念:
等價靜態路由:手動配置的,具有相同目的地、相同優先級、不同下一跳的兩條或多條靜態路由。數據轉發時會隨機選擇其中的一條靜態路由;
策略路由:手動配置的,可以匹配四元組、角色、ISP、應用、域名等多維信息,在多個下一跳中根據不同的選路算法進行選路的策略。
根據等價靜態路由和策略路由的概念可以看出:兩者都可以進行多出口的選路,而且策略路由的功能更強大,完成了更接近於鏈路負載均衡的功能。但是,兩者的缺點也很明顯:策略都是靜態的,而鏈路卻是動態的。
鏈路負載均衡#
鏈路有健康度的概念,在動態的網絡環境中,鏈路可能發生故障、可能擁塞,有著各種意外情況。鏈路負載均衡的需求便是來源於此,因為靜態的路由策略無法感知到鏈路的動態變化,所以需要一種增強的策略,在路由匹配的前提下,能夠根據鏈路的狀態動態的進行選路。
鏈路負載均衡是對路由功能的一種增強,依賴於路由的匹配結果。
二、鏈路負載均衡要實現什麼(How)#
要實現鏈路負載均衡,首先我們要整理出其特性:
- 鏈路基本信息維護:出接口、下一跳、運營商、帶寬、優先級、權重、健康度等;
- 鏈路狀態感知:
- 接口狀態:啟用、停用、新增 IP、刪除 IP、類型為路由口、交換口...
- 鏈路狀態:與目的相關,丟包率、帶寬、負載...
- 鏈路池:鏈路集合,是負載均衡的選擇範圍;
- 鏈路負載均衡算法:隨機、輪詢、加權輪詢、優先級、負載率、就近選路...
- 除了以上特性外,考慮到存在客戶端到伺服器的多條連接被 NAT 轉為不同的 IP 的情況,可能被伺服器認為是攻擊而被阻斷,所以需要對特定時間內具有相同特徵(如四元組)的會話進行鏈路選擇跟隨,稱為 “會話保持”。
鏈路狀態感知#
- 監聽接口狀態
- 使用 ping 等協議感知鏈路狀態
不建議過度的感知鏈路狀態,因為會佔用鏈路帶寬及伺服器的資源。通常使用流量統計等可以計算出鏈路的負載率信息,結合接口狀態監測即可。
鏈路負載均衡算法#
隨機#
通過 hash 算法從正常鏈路中選擇一條,如果沒有,從過載鏈路中隨機選擇
輪詢#
在正常鏈路中按序選擇一條,如果沒有,從過載鏈路中按序選擇
加權輪詢#
按權值比重將連接分配到正常鏈路列表中,同上,如果沒有,從過載鏈路中按加權輪詢選擇一條。
加權的原理基本上就是根據權重大小每次模擬選擇一條鏈路,然後將此條鏈路權重減一,下次模擬選路按新的權重進行選路,最終生成一個選路列表。實際選路時然後輪詢這個選路列表。假設存在 a:2、b:4、c:1 三條鏈路,按照權重模擬選路生成列表為:{b, b, a, b, a, b, c},實際選路就按此列表輪詢選擇。
優先級#
按優先級在正常鏈路列表中選擇一條,同上,如果沒有,從過載鏈路中按優先級選擇一條
負載率#
根據鏈路的流量與鏈路帶寬的比例計算負載率,選擇最小負載的一條
就近選路#
根據目的 ip 查詢 ISP 信息庫,找到目的所在的 ISP,選擇為此 ISP 的鏈路。可以結合其他算法對選擇結果做進一步負載均衡。
會話保持#
根據四元組及選路結果建立會話保持表,會話保持表中項定時過期。新連接到達後查詢會話保持表,如果匹配成功,則更新會話保持表的過期時間;如果沒有匹配成功,則新加會話保持表項。
Done!
此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://www.vikifish.com/posts/network/linklb