《360網(wǎng)絡(luò)負載平衡系統(tǒng)》要點:
本文介紹了360網(wǎng)絡(luò)負載平衡系統(tǒng),希望對您有用。如果有疑問,可以聯(lián)系我們。
LVS(linux virtual server)作用一種通用的,性能強大的負載均衡技術(shù),承接著奇虎360絕大多數(shù)的業(yè)務(wù)流量,今天我們邀請到了360公司系統(tǒng)部的張志強鍋鍋,為我們介紹介紹一下lvs在360的部署和新功能特性.
Lvs(linux virtual server)作用一種通用的,性能強大的負載均衡技術(shù),承接著奇虎360絕大多數(shù)的業(yè)務(wù)流量,其中包括360搜索、網(wǎng)站衛(wèi)士、花椒直播等核心業(yè)務(wù).隨著接入業(yè)務(wù)增多,對這一基礎(chǔ)設(shè)施的性能、穩(wěn)定性以及擴展性也提出了越來越多的要求,為適應(yīng)公司逐步發(fā)展壯大的業(yè)務(wù)需求,經(jīng)過6年多的發(fā)展360 lvs平臺在部署和新功能特性方面也有了日新月異的發(fā)展.
Linux開源的lvs系統(tǒng)目前主要有NAT、TUNNEL、DR三種模式,各有其優(yōu)缺點.
比如說DR和NAT模式要求realserver和LVS在同一個vlan中,導(dǎo)致部署成本過高,不可跨網(wǎng)段部署,且realserver端需要配置VIP等信息在大批量配置是較為繁瑣.
TUNNEL模式雖然可以跨VLAN,但realserver需要部署ipip模塊、綁定VIP以及配置arp_filter等操作,網(wǎng)絡(luò)拓撲上需要聯(lián)通外網(wǎng),較復(fù)雜不易維護.
為了解決解決上述問題,我們在LVS上研發(fā)了一種新的轉(zhuǎn)發(fā)模式:FUULNAT.
該模式與NAT模式的主要的區(qū)別是:
在packet IN 時,除了做DNAT還做SNAT ,將目標(biāo)ip變?yōu)閞ealserver ip,源ip變?yōu)閮?nèi)網(wǎng)bip(內(nèi)部轉(zhuǎn)發(fā)池地址),并保存對應(yīng)的session信息;
在packet OUT時,通過查找之前創(chuàng)建的session表,重新將出方向的源ip轉(zhuǎn)換為vip,目的ip 轉(zhuǎn)換位客戶端ip;
由于是三層通信,從而實現(xiàn)lvs–>realserver間可以跨網(wǎng)絡(luò)vlan通信.為提供較好的網(wǎng)絡(luò)負載能力,并充分利用網(wǎng)卡多隊列特性,lvs服務(wù)器專門提供一個C的內(nèi)部bip地址用于和后端realserver的通訊.
但這種模式的缺點是屏蔽了真實的客戶端地址信息,使得realserver端無法獲取真實的客戶端IP信息,為此我們在地址轉(zhuǎn)換時會將真實客戶端ip保存到tcp協(xié)議的option字段中,并提供了ttm模塊用于用戶在realserver端獲取到真實的客戶端ip信息.
該模式在滿足用戶需求的基礎(chǔ)上,實現(xiàn)了跨網(wǎng)段部署,并簡化了realserver端的配置,作為公司目前主流的部署方式,經(jīng)過公司6年多的實踐證明該模式在性能和可靠性方面都是值得信賴的.
FULLNAT網(wǎng)絡(luò)轉(zhuǎn)發(fā)模型如下:
圖.Fullnat轉(zhuǎn)發(fā)模型
圖.Fullnat地址轉(zhuǎn)換模型
鑒于LVS當(dāng)前的主要功能是負載均衡和失敗冗余,不能對flood類型的包攻擊進行防護,導(dǎo)致攻擊流量會被轉(zhuǎn)發(fā)到后端RS上,而RS對此類攻擊的防護工作TCP層,防護效率不高,同時大流量的包轉(zhuǎn)發(fā)也會大大消耗LVS機器的CPU,影響LVS的正常工作.
為了解決上述問題, 我們采取了以下兩個措施:
增加攻擊防護功能
在LVS上增加一種攻擊防護功能:Syn-Proxy,該功能借鑒TCP的syn-cookie機制,代理Client和RS之間的TCP連接握手過程,在與Clinet三次握手完成后,才去和RS建立連接,從而實現(xiàn)對synflood攻擊的防御;
采用“session不存在直接丟棄”的策略
采用“session不存在直接丟棄”的策略,實現(xiàn)了對ack/fin/rst 其它TCP標(biāo)志位攻擊的防御;
經(jīng)過上述兩種策略使得上述情況的異常數(shù)據(jù)包不會達到realserver那一層就被丟棄了,而lvs服務(wù)器各方面性能是要強于realserver的,并且synproxy在syn flood攻擊的情況下可以有效的減少新建session的開銷,所以可以有效的保證業(yè)務(wù)的正常運行.
作為信息統(tǒng)計和分析的重要信息來源之一,源地址透傳一直是業(yè)務(wù)方強烈要求的一項功能.利用TCP協(xié)議的option字段存放真實源地址信息,并在rs端提供對應(yīng)的模塊用于解析到真實的客戶端地址,因此FULLNAT模式對TCP協(xié)議的源地址透傳功能提供了很好的支持.
不過,UDP作為一種不可靠傳輸協(xié)議,是沒有提供對應(yīng)的字段用于保存私有信息的,所以TCP的那套方式在UDP是無法工作的.為解決該問題,我們提出了一種新的lvs tunnel模式,與傳統(tǒng)tunnel模式的不同之處在于,出入方向的數(shù)據(jù)包都會經(jīng)過lvs服務(wù)器,realserver端只需加載定制的ipip模塊即可,不需要在其上綁定vip,設(shè)置對應(yīng)設(shè)備的arp_filter等操作,簡化了大批量部署的復(fù)雜性,且通過ipip tunnel天然的解決了真實客戶端透傳功能.
數(shù)據(jù)包轉(zhuǎn)發(fā)模型如下:
? ? 圖.新型lvs tunnel模型
當(dāng)數(shù)據(jù)包到達lvs服務(wù)器是創(chuàng)建session保留連接信息,內(nèi)層數(shù)據(jù)包做DNAT將目的地址轉(zhuǎn)換成rs地址,外層添加ipip頭,源目的地址分別為bip和realserver地址.realserver收到數(shù)據(jù)包后解封外層ipip頭并創(chuàng)建session保留連接信息,回包時再根據(jù)之前的session信息添加外層ipip頭,使得目的地址指向lvs服務(wù)器;Lvs服務(wù)器收到數(shù)據(jù)包之后去除外層頭,并將源地址NAT為vip地址轉(zhuǎn)發(fā)給客戶端.
目前大多數(shù)機房lvs服務(wù)器的部署方式如下,一個集群中多臺lvs服務(wù)器,每臺服務(wù)器上行通過ospf協(xié)議連接到外網(wǎng)核心,向其通告vip信息.下行直連內(nèi)網(wǎng)核心,用于與后端rs之間通信.這種方式保證了lvs服務(wù)器之間已經(jīng)realserver之間服務(wù)的冗余性.
? ? ?圖. lvs?部署架構(gòu)
圖.lvs 部署新架構(gòu)
該方式在負載均衡和冗余性方面都得到了有效的提升.
lvs作為公司的重要基礎(chǔ)設(shè)施,360 LVS團隊經(jīng)過多年的摸索,在功能特性、安全、穩(wěn)定性以及環(huán)境部署、運維、問題定位分析方面都積累了許多彌足珍貴的經(jīng)驗,滿足業(yè)務(wù)不斷升級變化的需求.
文章來自微信公眾號:HULK一線技術(shù)雜談
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4155.html