1. 程式人生 > >360網路負載平衡系統

360網路負載平衡系統

LVS(linux virtual server)作用一種通用的,效能強大的負載均衡技術,承接著奇虎360絕大多數的業務流量,今天我們邀請到了360公司系統部的張志強鍋鍋,為我們介紹介紹一下lvs在360的部署和新功能特性。

背景簡介

Lvs(linux virtual server)作用一種通用的,效能強大的負載均衡技術,承接著奇虎360絕大多數的業務流量,其中包括360搜尋、網站衛士、花椒直播等核心業務。隨著接入業務增多,對這一基礎設施的效能、穩定性以及擴充套件性也提出了越來越多的要求,為適應公司逐步發展壯大的業務需求,經過6年多的發展360 lvs平臺在部署和新功能特性方面也有了日新月異的發展。

功能特性

1.FULLNAT模式

Linux開源的lvs系統目前主要有NAT、TUNNEL、DR三種模式,各有其優缺點。

比如說DR和NAT模式要求realserver和LVS在同一個vlan中,導致部署成本過高,不可跨網段部署,且realserver端需要配置VIP等資訊在大批量配置是較為繁瑣。

TUNNEL模式雖然可以跨VLAN,但realserver需要部署ipip模組、繫結VIP以及配置arp_filter等操作,網路拓撲上需要聯通外網,較複雜不易維護。

為了解決解決上述問題,我們在LVS上研發了一種新的轉發模式:FUULNAT

該模式與NAT模式的主要的區別是:

在packet IN 時,除了做DNAT還做SNAT ,將目標ip變為realserver ip,源ip變為內網bip(內部轉發池地址),並儲存對應的session資訊;

在packet OUT時,通過查詢之前建立的session表,重新將出方向的源ip轉換為vip,目的ip 轉換位客戶端ip;

由於是三層通訊,從而實現lvs–>realserver間可以跨網路vlan通訊。為提供較好的網路負載能力,並充分利用網絡卡多佇列特性,lvs伺服器專門提供一個C的內部bip地址用於和後端realserver的通訊。

但這種模式的缺點是遮蔽了真實的客戶端地址資訊,使得realserver端無法獲取真實的客戶端IP資訊,為此我們在地址轉換時會將真實客戶端ip儲存到tcp協議的option欄位中,並提供了ttm模組用於使用者在realserver端獲取到真實的客戶端ip資訊。

該模式在滿足使用者需求的基礎上,實現了跨網段部署,並簡化了realserver端的配置,作為公司目前主流的部署方式,經過公司6年多的實踐證明該模式在效能和可靠性方面都是值得信賴的。

FULLNAT網路轉發模型如下:

FULLNAT網路

圖.Fullnat轉發模型

Fullnat地址

圖.Fullnat地址轉換模型

2.安全防護—防攻擊

鑑於LVS當前的主要功能是負載均衡和失敗冗餘,不能對flood型別的包攻擊進行防護,導致攻擊流量會被轉發到後端RS上,而RS對此類攻擊的防護工作TCP層,防護效率不高,同時大流量的包轉發也會大大消耗LVS機器的CPU,影響LVS的正常工作。

為了解決上述問題, 我們採取了以下兩個措施:

增加攻擊防護功能

在LVS上增加一種攻擊防護功能:Syn-Proxy,該功能借鑑TCP的syn-cookie機制,代理Client和RS之間的TCP連線握手過程,在與Clinet三次握手完成後,才去和RS建立連線,從而實現對synflood攻擊的防禦;

採用“session不存在直接丟棄”的策略

採用“session不存在直接丟棄”的策略,實現了對ack/fin/rst 其它TCP標誌位攻擊的防禦;

經過上述兩種策略使得上述情況的異常資料包不會達到realserver那一層就被丟棄了,而lvs伺服器各方面效能是要強於realserver的,並且synproxy在syn flood攻擊的情況下可以有效的減少新建session的開銷,所以可以有效的保證業務的正常執行。

3.UDP之殤

作為資訊統計和分析的重要資訊來源之一,源地址透傳一直是業務方強烈要求的一項功能。利用TCP協議的option欄位存放真實源地址資訊,並在rs端提供對應的模組用於解析到真實的客戶端地址,因此FULLNAT模式對TCP協議的源地址透傳功能提供了很好的支援。

不過,UDP作為一種不可靠傳輸協議,是沒有提供對應的欄位用於儲存私有資訊的,所以TCP的那套方式在UDP是無法工作的。為解決該問題,我們提出了一種新的lvs tunnel模式,與傳統tunnel模式的不同之處在於,出入方向的資料包都會經過lvs伺服器,realserver端只需載入定製的ipip模組即可,不需要在其上繫結vip,設定對應裝置的arp_filter等操作,簡化了大批量部署的複雜性,且通過ipip tunnel天然的解決了真實客戶端透傳功能。

資料包轉發模型如下:

lvs tunnel模型

    圖.新型lvs tunnel模型

當資料包到達lvs伺服器是建立session保留連線資訊,內層資料包做DNAT將目的地址轉換成rs地址,外層新增ipip頭,源目的地址分別為bip和realserver地址。realserver收到資料包後解封外層ipip頭並建立session保留連線資訊,回包時再根據之前的session資訊新增外層ipip頭,使得目的地址指向lvs伺服器;Lvs伺服器收到資料包之後去除外層頭,並將源地址NAT為vip地址轉發給客戶端。

4.部署與運維架構

目前大多數機房lvs伺服器的部署方式如下,一個叢集中多臺lvs伺服器,每臺伺服器上行通過ospf協議連線到外網核心,向其通告vip資訊。下行直連內網核心,用於與後端rs之間通訊。這種方式保證了lvs伺服器之間已經realserver之間服務的冗餘性。

lvs 部署架構

     圖. lvs 部署架構

上述模型已經可以滿足目前公司大多數的業務需求,在資源利用和冗餘性方面存在兩個問題:一 機房公網出口雙外核心出口不負載;二  雙內外網核心結構下不能利用核心交換機的冗餘特性,高可用性不夠,當直連核心出故障時,lvs需要跟著調整。
為此我們又與公司netops團隊共同研討出下面一種新的冗餘性架構,用於解決上面兩個問題。lvs伺服器上行通過ospf協議連線兩個萬兆Tor,下行通過BGP協議與兩個內網核心連線,新架構模型如下:.lvs 部署

圖.lvs 部署新架構

該方式在負載均衡和冗餘性方面都得到了有效的提升。

總結 

lvs作為公司的重要基礎設施,360 LVS團隊經過多年的摸索,在功能特性、安全、穩定性以及環境部署、運維、問題定位分析方面都積累了許多彌足珍貴的經驗,滿足業務不斷升級變化的需求。

文章來自微信公眾號:HULK一線技術雜談