負載均衡高可用是從系統設計、產品配置等多個方面提供了可用性保障。此外,您可以根據業務需求,配合使用云解析DNS等產品實現跨地域容災。多可用區高可用指標設計為99.99%,單可用區設計為99.90%。
CLB系統的高可用
負載均衡實例采用集群部署,可實現會話同步,以消除服務器單點故障,提升冗余,保證服務的穩定性。其中四層負載均衡通過LVS(Linux Virtual Server)+ keepalived的方式實現,七層負載均衡通過Tengine(淘寶網發起的Web服務器項目,在Nginx的基礎上,針對有大訪問量的網站需求進行了優化)實現。
來自公網的請求通過等價多路徑路由(ECMP)到達LVS集群,LVS集群內的每臺LVS通過組播報文將會話同步到該集群內的其它LVS機器上,從而實現LVS集群內各臺機器間的會話同步。同時,LVS集群會對Tengine集群進行健康檢查,將異常機器從Tengine集群移除,保證七層負載均衡的可用性。
最佳實踐:
會話同步可以保證長連接不受集群內服務器故障的影響,但是對于短連接或連接未觸發會話同步規則時(未完成三次握手),集群內的服務器故障仍可能會影響用戶請求。為了防止集群中某臺機器故障導致的會話中斷,您可以在業務邏輯中加入重試機制,降低對用戶訪問造成的影響。
單CLB實例的高可用
為了向廣大用戶提供更穩定可靠的負載均衡服務,阿里云負載均衡已在大部分地域部署了多可用區以實現同地域下的跨機房容災。當主可用區出現故障或不可用時,負載均衡有能力在非常短的時間內(約30秒)切換到備可用區并恢復服務;當主可用區恢復時,負載均衡同樣會自動切換到主可用區提供服務。
負載均衡的主備可用區是可用區級別的容災。只有當主可用區整體不可用時,如機房整體斷電或者機房出口光纜中斷等,負載均衡才會切換到備可用區。而并非某個實例出現故障,就切換到備可用區。
最佳實踐:
為了更好地利用負載均衡的主備可用區機制,建議您在支持主備可用區的地域創建負載均衡實例,即在購買負載均衡實例時選擇可用區類型為多可用區的地域。
當您選擇CLB的主備可用區時,可以根據ECS實例的可用區分布進行選擇。大部分ECS實例位于哪個可用區,就將哪個可用區選擇為CLB的主可用區,以獲取最小的訪問延遲。
但是并不建議您將全部ECS實例都部署在一個可用區內,您也需要在CLB的備可用區部署少量ECS實例,以便在極端情況下(主可用區整體不可用時),切換到備可用區后仍舊可以正常處理負載均衡轉發的請求。
多CLB實例的高可用
如果您對可用性的要求特別高,負載均衡實例自身的可用性保障機制可能無法滿足您的需求。例如當網絡攻擊或配置錯誤等情況導致負載均衡實例不可用時,由于未出現可用區級故障,不會觸發負載均衡實例的可用區切換。此時,您可以創建多個CLB實例,通過云解析DNS對訪問進行調度,或通過全球負載均衡解決方案實現跨地域容災備份。
最佳實踐:
您可以在一個地域內的多個可用區或多個地域內部署負載均衡實例和后端ECS實例,然后使用云解析DNS對訪問進行調度。
后端ECS實例的高可用
負載均衡通過健康檢查來判斷后端ECS實例的可用性。健康檢查機制提高了前端業務整體可用性,避免了后端ECS異常對總體服務的影響。
開啟健康檢查功能后,當后端某個ECS實例健康檢查出現異常時,負載均衡會自動將新的請求分發到其他健康檢查正常的ECS實例上,而當該ECS實例恢復正常運行時,負載均衡會將其自動恢復到負載均衡服務中。關于健康檢查的詳細機制,請參見健康檢查概述。
最佳實踐:
為了使健康檢查功能正常運作,您需要開啟并正確配置健康檢查。具體的操作流程請參見配置和管理健康檢查。