SLB技術原理淺析
1 SLB功能介紹
SLB(Server Load Balance)服務通過設定虛擬服務地址(IP),將位於同一地域(Region)的多臺雲伺服器(Elastic Compute Service,簡稱ECS)資源虛擬成一個高效能、高可用的應用服務池;再根據應用指定的方式,將來自客戶端的網路請求分發到雲伺服器池中。
SLB服務會檢查雲伺服器池中ECS的健康狀態,自動隔離異常狀態的ECS,從而解決了單臺ECS的單點問題,同時提高了應用的整體服務能力。在標準的負載均衡功能之外,SLB服務還具備TCP與HTTP抗DDoS攻擊的特性,增強了應用伺服器的防護能力。
SLB服務是ECS面向多機方案的一個配套服務,需要同ESC結合使用。
2 SLB技術架構
整個SLB系統由3部分構成:四層負載均衡,七層負載均衡 和 控制系統,如下圖所示;
- 四層負載均衡,採用開源軟體LVS(linux virtual server),並根據雲端計算需求對其進行了定製化;該技術已經在阿里巴巴內部業務全面上線應用2年多詳見第3節;
- 七層負載均衡,採用開源軟體Tengine;該技術已經在阿里巴巴內部業務全面上線應用3年多;參見第4節;
- 控制系統,用於 配置和監控 負載均衡系統;
3 LVS技術特點
LVS是全球最流行的四層負載均衡開源軟體,由章文嵩博士(當前阿里雲產品技術負責人)在1998年5月創立,可以實現LINUX平臺下的負載均衡。
LVS是 基於linux netfilter框架實現(同iptables)的一個核心模組,名稱為ipvs;其鉤子函式分別HOOK在LOCAL_IN和FORWARD兩個HOOK點,如下圖所示;
在雲端計算大規模網路環境下,官方LVS存在如下問題;
- 問題1:LVS支援NAT/DR/TUNNEL三種轉發模式,上述模式在多vlan網路環境下部署時,存在網路拓撲復雜,運維成本高的問題;
- 問題2:和商用負載均衡裝置(如,F5)相比,LVS缺少DDOS攻擊防禦功能;
- 問題3:LVS採用PC伺服器,常用keepalived軟體的VRRP心跳協議進行主備部署,其效能無法擴充套件;
- 問題4:LVS常用管理軟體keepalived的配置和健康檢查效能不足;
為了解決上述問題,我們在官方LVS基礎上進行了定製化;
- 解決1:新增轉發模式FULLNAT,實現LVS-RealServer間跨vlan通訊;
- 解決2:新增synproxy等攻擊TCP標誌位DDOS攻擊防禦功能,;
- 解決3:採用LVS叢集部署方式;
- 解決4:優化keepalived效能;
3.1 FULLNAT技術
FULLNAT實現主要思想:引入local address(內網ip地址),cip-vip轉換為lip->rip,而 lip和rip均為IDC內網ip,可以跨vlan通訊;
IN/OUT的資料流全部經過LVS,為了保證頻寬,採用萬兆(10G)網絡卡;
FULLNAT轉發模式,當前僅支援TCP協議;
3.2 SYNPROXY技術
LVS針對TCP標誌位DDOS攻擊,採取如下策略;
- Synflood攻擊,利用synproxy模組進行防禦,如下圖所示;實現主要思想:參照linux tcp協議棧中syncookies的思想,LVS代理TCP三次握手;代理過程:client傳送syn包給LVS,LVS構造特殊seq的synack包給client,client回覆ack給LVS,LVS驗證ack包中ack_seq是否合法;如果合法,則LVS再和Realserver建立3次握手;
- Ack/fin/rstflood攻擊,查詢連線表,如果不存在,則直接丟棄;
3.3 叢集部署方式
LVS叢集部署方式實現的主要思想:LVS和上聯交換機間執行OSPF協議,上聯交換機通過ECMP等價路由,將資料流分發給LVS叢集,LVS叢集再轉發給業務伺服器;
健壯性:lvs和交換機間執行ospf心跳,1個vip配置在叢集的所有LVS上,當一臺LVS down,交換機會自動發現並將其從ECMP等價路由中剔除;
可擴充套件:如果當前LVS叢集無法支撐某個vip的流量,LVS叢集可以進行水平擴容;
叢集部署方式極大的保證了異常情況下,負載均衡服務的穩定性;
3.4 keepalived優化
對LVS管理軟體keepalived進行了全面優化;
- 優化了網路非同步模型,select改為epoll方式;
- 優化了reload過程;
綜上所述,四層負載均衡產品有如下特點;
- 高可用,LVS叢集保證了冗餘性,無單點;
- 安全,LVS自生攻擊防禦+雲盾,提供了近實時防禦能力;
- 健康檢查:對後端ECS進行健康檢查,自動遮蔽異常狀態的ECS,待該ECS恢復正常後自動解除遮蔽;
4 Tengine技術特點
Tengine是阿里巴巴發起的web伺服器專案,其在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高階功能和特性;Nginx是當前最流行的7層負載均衡開源軟體之一;
注:Tengine開源地址http://tengine.taobao.org/;
針對雲端計算場景,tengine定製的主要特性如下;
- 繼承Nginx-1.4.6的所有特性,100%相容Nginx的配置;
- 動態模組載入(DSO)支援。加入一個模組不再需要重新編譯整個Tengine;
- 更加強大的負載均衡能力,包括一致性hash模組、會話保持模組,還可以對後端的伺服器進行主動健康檢查,根據伺服器狀態自動上線下線;
- 監控系統的負載和資源佔用從而對系統進行保護;
- 顯示對運維人員更友好的出錯資訊,便於定位出錯機器;
- 更強大的防攻擊(訪問速度限制)模組;
採用Tengine作為SLB的基礎模組,阿里七層負載均衡產品有如下特點;
- 高可用,Tengine叢集保證了冗餘性,無單點;
- 安全,多維度的CC攻擊防禦能力;;
- 健康檢查,對後端ECS進行健康檢查,自動遮蔽異常狀態的ECS,待該ECS恢復正常後自動解除遮蔽;
- 支援7層會話保持功能;
- 支援一致性hash排程;
5 技術展望
SLB作為負載均衡裝置,其最重要的指標是 穩定性,在進一步提高穩定性方面,主要工作有2點;
- 支援叢集內部 session同步;
- 採用anycast技術實現同城雙A;
同時,在功能方面有更多支援;
- 白名單訪問控制。從SLB層面實現訪問控制,使用者可以在SLB系統上配置白名單,便於使用者靈活限定外部訪問請求;
- 更多服務協議的支援。如:HTTPS、UDP等;
(本文作者是SLB研發工程師 吳佳明_普空)