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性能;
注1:ali-LVS開源地址https://github.com/alibaba/LVS;
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開源地址https://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研發工程師 吳佳明_普空)
最後更新:2017-04-03 12:55:42