天天看點

SLB技術原理淺析

slb(server load balance)服務通過設定虛拟服務位址(ip),将位于同一地域(region)的多台雲伺服器(elastic compute service,簡稱ecs)資源虛拟成一個高性能、高可用的應用服務池;再根據應用指定的方式,将來自用戶端的網絡請求分發到雲伺服器池中。

slb服務會檢查雲伺服器池中ecs的健康狀态,自動隔離異常狀态的ecs,進而解決了單台ecs的單點問題,同時提高了應用的整體服務能力。在标準的負載均衡功能之外,slb服務還具備tcp與http抗ddos攻擊的特性,增強了應用伺服器的防護能力。

slb服務是ecs面向多機方案的一個配套服務,需要同esc結合使用。

整個slb系統由3部分構成:四層負載均衡,七層負載均衡 和 控制系統,如下圖所示;

四層負載均衡,采用開源軟體lvs(linux virtual server),并根據雲計算需求對其進行了定制化;該技術已經在阿裡巴巴内部業務全面上線應用2年多詳見第3節;

七層負載均衡,采用開源軟體tengine;該技術已經在阿裡巴巴内部業務全面上線應用3年多;參見第4節;

控制系統,用于 配置和監控 負載均衡系統;

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;

fullnat實作主要思想:引入local address(内網ip位址),cip-vip轉換為lip->rip,而 lip和rip均為idc内網ip,可以跨vlan通訊;

in/out的資料流全部經過lvs,為了保證帶寬,采用萬兆(10g)網卡;

fullnat轉發模式,目前僅支援tcp協定;

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攻擊,查找連接配接表,如果不存在,則直接丢棄;

lvs叢集部署方式實作的主要思想:lvs和上聯交換機間運作ospf協定,上聯交換機通過ecmp等價路由,将資料流分發給lvs叢集,lvs叢集再轉發給業務伺服器;

健壯性:lvs和交換機間運作ospf心跳,1個vip配置在叢集的所有lvs上,當一台lvs down,交換機會自動發現并将其從ecmp等價路由中剔除;

可擴充:如果目前lvs叢集無法支撐某個vip的流量,lvs叢集可以進行水準擴容;

叢集部署方式極大的保證了異常情況下,負載均衡服務的穩定性;

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

優化了網絡異步模型,select改為epoll方式;

優化了reload過程;

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

高可用,lvs叢集保證了備援性,無單點;

安全,lvs自生攻擊防禦+雲盾,提供了近實時防禦能力;

健康檢查:對後端ecs進行健康檢查,自動屏蔽異常狀态的ecs,待該ecs恢複正常後自動解除屏蔽;

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排程;

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

支援叢集内部 session同步;

采用anycast技術實作同城雙a;

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

白名單通路控制。從slb層面實作通路控制,使用者可以在slb系統上配置白名單,便于使用者靈活限定外部通路請求;

更多服務協定的支援。如:https、udp等;

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

繼續閱讀