1. 程式人生 > >SLB技術原理淺析

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節;
  • 控制系統,用於 配置和監控 負載均衡系統;

slb-1

3 LVS技術特點

LVS是全球最流行的四層負載均衡開源軟體,由章文嵩博士(當前阿里雲產品技術負責人)在1998年5月創立,可以實現LINUX平臺下的負載均衡。
 
LVS是 基於linux netfilter框架實現(同iptables)的一個核心模組,名稱為ipvs;其鉤子函式分別HOOK在LOCAL_IN和FORWARD兩個HOOK點,如下圖所示;


 
slb-2
 
在雲端計算大規模網路環境下,官方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協議;
 
slb-3

3.2 SYNPROXY技術

LVS針對TCP標誌位DDOS攻擊,採取如下策略;

  1. Synflood攻擊,利用synproxy模組進行防禦,如下圖所示;實現主要思想:參照linux tcp協議棧中syncookies的思想,LVS代理TCP三次握手;代理過程:client傳送syn包給LVS,LVS構造特殊seq的synack包給client,client回覆ack給LVS,LVS驗證ack包中ack_seq是否合法;如果合法,則LVS再和Realserver建立3次握手;

slb-4

  1. Ack/fin/rstflood攻擊,查詢連線表,如果不存在,則直接丟棄;

3.3 叢集部署方式

LVS叢集部署方式實現的主要思想:LVS和上聯交換機間執行OSPF協議,上聯交換機通過ECMP等價路由,將資料流分發給LVS叢集,LVS叢集再轉發給業務伺服器;
 
健壯性:lvs和交換機間執行ospf心跳,1個vip配置在叢集的所有LVS上,當一臺LVS down,交換機會自動發現並將其從ECMP等價路由中剔除;
 
可擴充套件:如果當前LVS叢集無法支撐某個vip的流量,LVS叢集可以進行水平擴容;
 
叢集部署方式極大的保證了異常情況下,負載均衡服務的穩定性;
 
slb-5

3.4 keepalived優化

對LVS管理軟體keepalived進行了全面優化;

  1. 優化了網路非同步模型,select改為epoll方式;
  2. 優化了reload過程;

綜上所述,四層負載均衡產品有如下特點;

  1. 高可用,LVS叢集保證了冗餘性,無單點;
  2. 安全,LVS自生攻擊防禦+雲盾,提供了近實時防禦能力;
  3. 健康檢查:對後端ECS進行健康檢查,自動遮蔽異常狀態的ECS,待該ECS恢復正常後自動解除遮蔽;

4 Tengine技術特點

Tengine是阿里巴巴發起的web伺服器專案,其在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高階功能和特性;Nginx是當前最流行的7層負載均衡開源軟體之一;
 
注:Tengine開源地址
http://tengine.taobao.org/

針對雲端計算場景,tengine定製的主要特性如下;

  1. 繼承Nginx-1.4.6的所有特性,100%相容Nginx的配置;
  2. 動態模組載入(DSO)支援。加入一個模組不再需要重新編譯整個Tengine;
  3. 更加強大的負載均衡能力,包括一致性hash模組、會話保持模組,還可以對後端的伺服器進行主動健康檢查,根據伺服器狀態自動上線下線;
  4. 監控系統的負載和資源佔用從而對系統進行保護;
  5. 顯示對運維人員更友好的出錯資訊,便於定位出錯機器;
  6. 更強大的防攻擊(訪問速度限制)模組;

採用Tengine作為SLB的基礎模組,阿里七層負載均衡產品有如下特點;

  1. 高可用,Tengine叢集保證了冗餘性,無單點;
  2. 安全,多維度的CC攻擊防禦能力;;
  3. 健康檢查,對後端ECS進行健康檢查,自動遮蔽異常狀態的ECS,待該ECS恢復正常後自動解除遮蔽;
  4. 支援7層會話保持功能;
  5. 支援一致性hash排程;

5 技術展望

SLB作為負載均衡裝置,其最重要的指標是 穩定性,在進一步提高穩定性方面,主要工作有2點;

  1. 支援叢集內部 session同步;
  2. 採用anycast技術實現同城雙A;

 
同時,在功能方面有更多支援;

  1. 白名單訪問控制。從SLB層面實現訪問控制,使用者可以在SLB系統上配置白名單,便於使用者靈活限定外部訪問請求;
  2. 更多服務協議的支援。如:HTTPS、UDP等;

 
(本文作者是SLB研發工程師 吳佳明_普空)