《360網絡負載平衡系統》要點:
本文介紹了360網絡負載平衡系統,希望對您有用。如果有疑問,可以聯系我們。
LVS(linux virtual server)作用一種通用的,性能強大的負載均衡技術,承接著奇虎360絕大多數的業務流量,今天我們邀請到了360公司系統部的張志強鍋鍋,為我們介紹介紹一下lvs在360的部署和新功能特性.
Lvs(linux virtual server)作用一種通用的,性能強大的負載均衡技術,承接著奇虎360絕大多數的業務流量,其中包括360搜索、網站衛士、花椒直播等核心業務.隨著接入業務增多,對這一基礎設施的性能、穩定性以及擴展性也提出了越來越多的要求,為適應公司逐步發展壯大的業務需求,經過6年多的發展360 lvs平臺在部署和新功能特性方面也有了日新月異的發展.
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地址轉換模型
鑒于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的開銷,所以可以有效的保證業務的正常運行.
作為信息統計和分析的重要信息來源之一,源地址透傳一直是業務方強烈要求的一項功能.利用TCP協議的option字段存放真實源地址信息,并在rs端提供對應的模塊用于解析到真實的客戶端地址,因此FULLNAT模式對TCP協議的源地址透傳功能提供了很好的支持.
不過,UDP作為一種不可靠傳輸協議,是沒有提供對應的字段用于保存私有信息的,所以TCP的那套方式在UDP是無法工作的.為解決該問題,我們提出了一種新的lvs tunnel模式,與傳統tunnel模式的不同之處在于,出入方向的數據包都會經過lvs服務器,realserver端只需加載定制的ipip模塊即可,不需要在其上綁定vip,設置對應設備的arp_filter等操作,簡化了大批量部署的復雜性,且通過ipip tunnel天然的解決了真實客戶端透傳功能.
數據包轉發模型如下:
? ? 圖.新型lvs tunnel模型
當數據包到達lvs服務器是創建session保留連接信息,內層數據包做DNAT將目的地址轉換成rs地址,外層添加ipip頭,源目的地址分別為bip和realserver地址.realserver收到數據包后解封外層ipip頭并創建session保留連接信息,回包時再根據之前的session信息添加外層ipip頭,使得目的地址指向lvs服務器;Lvs服務器收到數據包之后去除外層頭,并將源地址NAT為vip地址轉發給客戶端.
目前大多數機房lvs服務器的部署方式如下,一個集群中多臺lvs服務器,每臺服務器上行通過ospf協議連接到外網核心,向其通告vip信息.下行直連內網核心,用于與后端rs之間通信.這種方式保證了lvs服務器之間已經realserver之間服務的冗余性.
? ? ?圖. lvs?部署架構
圖.lvs 部署新架構
該方式在負載均衡和冗余性方面都得到了有效的提升.
lvs作為公司的重要基礎設施,360 LVS團隊經過多年的摸索,在功能特性、安全、穩定性以及環境部署、運維、問題定位分析方面都積累了許多彌足珍貴的經驗,滿足業務不斷升級變化的需求.
文章來自微信公眾號:HULK一線技術雜談
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4155.html