lvs集群學(xué)習(xí)筆記之原理
lvs集群學(xué)習(xí)筆記之原理
集群
負(fù)載均衡
lvs
原理
什么是集群
集群(Cluster):計(jì)算機(jī)集合為解決某個(gè)特定問(wèn)題組合起來(lái)形成的單個(gè)系統(tǒng) 。
分為:
LB(Load Banlancing):負(fù)載均衡 HA(High Availability):高可用。提高服務(wù)可用性,避免出現(xiàn)單點(diǎn)故障 HP(High Performance):高性能 分布式存儲(chǔ)與運(yùn)算
什么是負(fù)載均衡
在現(xiàn)實(shí)情況中當(dāng)我們遇到了單臺(tái)服務(wù)器性能不足的時(shí)候,這時(shí)我們有兩種提升方案:
Scale Up:向上擴(kuò)展、垂直擴(kuò)展、縱向擴(kuò)展;用性能好的主機(jī)替代性能差的主機(jī),性價(jià)比差; Scale Out: 向外擴(kuò)展、水平擴(kuò)展,即以新增服務(wù)器和現(xiàn)有服務(wù)器組成集群來(lái)應(yīng)對(duì)性能不足的問(wèn)題
在以上兩種解決方案中我們一般選擇向外擴(kuò)展 因?yàn)椋?/p>
向上擴(kuò)展所付出的代價(jià)和得到性能的提升不成正比, 大多時(shí)候提升服務(wù)器一倍的性能需要花費(fèi)三倍的價(jià)格 向外擴(kuò)展也有很多問(wèn)題, 例如:如何協(xié)調(diào)兩臺(tái)服務(wù)器提供一服務(wù),用戶在兩臺(tái)服務(wù)器進(jìn)行輪調(diào)時(shí)如何保存其的session信息
負(fù)載均衡或者負(fù)載均衡集群的作用就是將:
**向外擴(kuò)張的服務(wù)器群組組成一個(gè)負(fù)載均衡集群,前端通過(guò)負(fù)載均衡調(diào)度器來(lái)對(duì)用戶請(qǐng)求通過(guò)調(diào)度算法合理分發(fā)到后端服務(wù)器中, 來(lái)達(dá)到負(fù)載均衡的目的.**
負(fù)載均衡解決方案
硬件解決方案: F5公司: BIG-IP Citrix公司: Netscaler A10公司: A10 Array Redware 軟件解決方案: 四層: LVS 七層: HAproxy, Nginx, Varnish....
lvs簡(jiǎn)介
LVS(Linux Virtual Server)是目前阿里巴巴首席科學(xué)家章文嵩博士在大學(xué)期間的一款開(kāi)源的負(fù)載均衡軟件, 可實(shí)現(xiàn)四層的負(fù)載均衡。 首先解釋下下文中出現(xiàn)的各種術(shù)語(yǔ): Director: 負(fù)載均衡調(diào)度器, 負(fù)責(zé)在前端接受用戶請(qǐng)求根據(jù)特定的算法轉(zhuǎn)發(fā)到后端Real Server Real Server: 后端提供服務(wù)的服務(wù)器 VIP: Director接受用戶請(qǐng)求的IP地址 DIP: Director和Real Server聯(lián)系的IP地址 RIP: Real Server的IP地址 CIP: Client IP, 客戶端的IP地址
lvs內(nèi)核空間模型

LVS其實(shí)由兩個(gè)組件組成, 在用戶空間的ipvsadm和內(nèi)核空間的ipvs, ipvs工作在INPUT鏈上, 如果有請(qǐng)求報(bào)文被ipvs事先定義,就會(huì)將請(qǐng)求報(bào)文直接截取下根據(jù)其特定的模型修改請(qǐng)求報(bào)文, 再轉(zhuǎn)發(fā)到POSTROUTING鏈上送出TCP/IP協(xié)議棧
其報(bào)文流經(jīng)過(guò)程如下:
1.當(dāng)客戶端的請(qǐng)求到達(dá)負(fù)載均衡器的內(nèi)核空間時(shí),首先會(huì)到達(dá)PREROUTING鏈。 2.當(dāng)內(nèi)核發(fā)現(xiàn)請(qǐng)求數(shù)據(jù)包的目的地址是本機(jī)時(shí),將數(shù)據(jù)包送往INPUT鏈。 3.LVS由用戶空間的ipvsadm和內(nèi)核空間的IPVS組成,ipvsadm用來(lái)定義規(guī)則,IPVS利用ipvsadm定義 的規(guī)則工作,IPVS工作在INPUT鏈上,當(dāng)數(shù)據(jù)包到達(dá)INPUT鏈時(shí),首先會(huì)被IPVS檢查,如果數(shù)據(jù)包里 面的目的地址及端口沒(méi)有在規(guī)則里面,那么這條數(shù)據(jù)包將被放行至用戶空間。 4.如果數(shù)據(jù)包里面的目的地址及端口在規(guī)則里面,那么這條數(shù)據(jù)報(bào)文將被修改目的地址為事先定義 好的后端服務(wù)器,并送往POSTROUTING鏈。 5.最后經(jīng)由POSTROUTING鏈發(fā)往后端服務(wù)器。
lvs特點(diǎn)
lvs具有以下特點(diǎn): 1、ipvs工作于netfilter框架上。 2、 規(guī)則: 簡(jiǎn)單來(lái)說(shuō)就是把ip加端口定義為ipvs集群服務(wù),ipvs會(huì)為此請(qǐng)求定義一個(gè)或多個(gè)后端服務(wù) 目標(biāo)地址未必會(huì)改,但是報(bào)文會(huì)被強(qiáng)行轉(zhuǎn)發(fā)給后端的服務(wù)器。 3、ipvs組件: ipvsadm(用戶空間,用來(lái)編寫(xiě)規(guī)則) + ipvs(內(nèi)核空間) 4、ipvs工作在第四層: (1)四層交換、四層路由。 做第四層轉(zhuǎn)發(fā)。(osi模型中的網(wǎng)絡(luò)層) (2)只能基于ip和port轉(zhuǎn)發(fā),無(wú)法在應(yīng)用層,session級(jí)別轉(zhuǎn)發(fā) (3) 不用到達(dá)應(yīng)用層空間,就能轉(zhuǎn)發(fā) 即工作在第四層不能進(jìn)行7層負(fù)載均衡,但基于4層可以不要管上層協(xié)議進(jìn)行負(fù)載均衡,只要支持 tcp或udp就行。 5、 lvs 性能很好,但是由于只第四層,不能到用戶空間,因此不能進(jìn)行更加精細(xì)的控制。 在精細(xì)控制方面,haproxy和Ngnix可以更好的實(shí)現(xiàn)。 6、lvs通常作為總?cè)肟?,更精?xì)化的切割可能使用,haproxy或者Nginx實(shí)現(xiàn)
lvs實(shí)現(xiàn)方式
lvs的實(shí)現(xiàn)方法為實(shí)現(xiàn)模型和負(fù)載均衡調(diào)度算法 實(shí)現(xiàn)模型為: 1、NAT 2、DR 3、TUN 4、FULLNAT 負(fù)載均衡調(diào)度算法分為兩種:靜態(tài)和動(dòng)態(tài) 靜態(tài): RR WRR SH DH 動(dòng)態(tài): LC WLC SED NQ LBLC LBLCR 這些后文會(huì)一一介紹。
lvs實(shí)現(xiàn)方式之nat模型
如圖實(shí)現(xiàn)過(guò)程如下:
1、客戶端將請(qǐng)求發(fā)往前端的負(fù)載均衡器,請(qǐng)求報(bào)文源地址是CIP(客戶端IP),后面統(tǒng)稱為CIP),目標(biāo)地址為VIP(負(fù)載均衡器前端地址,后面統(tǒng)稱為VIP)。2、負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請(qǐng)求的是在規(guī)則里面存在的地址,那么它將客戶端請(qǐng)求報(bào)文的目標(biāo)地址改為了后端服務(wù)器的RIP地址并將報(bào)文根據(jù)算法發(fā)送出去。 3、報(bào)文送到Real Server后,由于報(bào)文的目標(biāo)地址是自己,所以會(huì)響應(yīng)該請(qǐng)求,并將響應(yīng)報(bào)文返還給LVS。 4、然后lvs將此報(bào)文的源地址修改為本機(jī)并發(fā)送給客戶端。注意:在NAT模式中,Real Server的網(wǎng)關(guān)必須指向LVS,否則報(bào)文無(wú)法送達(dá)客戶端。 5、 NAT模型其實(shí)就是一個(gè)多路的DNAT,客戶端對(duì)VIP進(jìn)行請(qǐng)求,Director通過(guò)事先指定好的調(diào)度算法計(jì)算出應(yīng)該轉(zhuǎn)發(fā)到哪臺(tái)RS上, 并修改請(qǐng)求報(bào)文的目標(biāo)地址為RIP,通過(guò)DIP送往RS. 當(dāng)RS響應(yīng)客戶端報(bào)文給CIP,經(jīng)過(guò)Director時(shí),Director又會(huì)修改源地址為VIP并將響應(yīng)報(bào)文發(fā)給客戶端. 這段過(guò)程對(duì)于用戶來(lái)說(shuō)是透明的.
關(guān)于nat模型有幾點(diǎn)需要注意: 1、RS和Director必須要在同一個(gè)IP網(wǎng)段中 2、RS的網(wǎng)關(guān)必須指向DIP 3、可以實(shí)現(xiàn)端口映射 4、請(qǐng)求報(bào)文和響應(yīng)報(bào)文都會(huì)經(jīng)過(guò)Director 5、RS可以是任意操作系統(tǒng) 6、DIP和RIP只能是內(nèi)網(wǎng)IP
lvs實(shí)現(xiàn)方式之dr

如圖過(guò)程如下: 1、客戶端將請(qǐng)求發(fā)往前端的負(fù)載均衡器,請(qǐng)求報(bào)文源地址是CIP,目標(biāo)地址為VIP。 2、負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請(qǐng)求的是在規(guī)則里面存在的地址,那么它將客戶端請(qǐng)求報(bào)文的源MAC地址改為自己DIP的MAC地址,目標(biāo)MAC改為了RIP的MAC地址,并將此包發(fā)送給RS。 3、RS發(fā)現(xiàn)請(qǐng)求報(bào)文中的目的MAC是自己,就會(huì)將次報(bào)文接收下來(lái),處理完請(qǐng)求報(bào)文后,將響應(yīng)報(bào)文通過(guò)lo接口送給eth0網(wǎng)卡直接發(fā)送給客戶端。注意:需要設(shè)置lo接口的VIP不能響應(yīng)本地網(wǎng)絡(luò)內(nèi)的arp請(qǐng)求。 DR模型是一個(gè)較為復(fù)雜的模型. DR模型比較詭異, 因?yàn)閂IP在Director和每一個(gè)RS上都存在, 客戶端對(duì)VIP(Director)請(qǐng)求時(shí),Director接收到請(qǐng)求會(huì)將請(qǐng)求報(bào)文的源MAC地址和目標(biāo)MAC地址修改為本機(jī)DIP所在網(wǎng)卡的MAC地址和指定的RS的RIP所在網(wǎng)卡的MAC地址, RS接收到請(qǐng)求報(bào)文后直接對(duì)CIP發(fā)出響應(yīng)報(bào)文, 而不需要通過(guò)Director
實(shí)現(xiàn)DR模型有一個(gè)最為關(guān)鍵的問(wèn)題,大家都知道Linux主機(jī)配置一個(gè)IP地址會(huì)向本網(wǎng)絡(luò)進(jìn)行廣播來(lái)通告其他主機(jī)或網(wǎng)絡(luò)設(shè)備IP地址對(duì)應(yīng)的MAC地址,那么VIP分別存在于Director和RS,IP不就沖突了么,我們?cè)撊绾谓鉀Q這個(gè)問(wèn)題?
事實(shí)上LVS并不能幫助我們解決這個(gè)麻煩的問(wèn)題:
我們有很多種方法可以解決上面的問(wèn)題:
1、網(wǎng)絡(luò)設(shè)備中設(shè)置VIP地址和DIrector的MAC地址進(jìn)行綁定
2、Linux系統(tǒng)中有一個(gè)軟件可以實(shí)現(xiàn)對(duì)ARP廣播進(jìn)行過(guò)濾, arptables
3、可以修改內(nèi)核參數(shù)來(lái)實(shí)現(xiàn), arp_ignore, arp_announce
實(shí)現(xiàn)DR模型需要注意的:
1、RS和Director可以不在同一IP網(wǎng)段中, 但是一定要在同一物理網(wǎng)絡(luò)中
2、請(qǐng)求報(bào)文必須經(jīng)過(guò)Director, 但是響應(yīng)報(bào)文一定不能通過(guò)Director
3、RS的網(wǎng)關(guān)不能是Director
4、不能實(shí)現(xiàn)端口映射
5、RS可以是大部分操作系統(tǒng)
6、DIP和RIP可以是公網(wǎng)地址
lvs實(shí)現(xiàn)方式之tun

如圖tun工作流程如下: 1、客戶端將請(qǐng)求發(fā)往前端的負(fù)載均衡器,請(qǐng)求報(bào)文源地址是CIP,目標(biāo)地址為VIP。 2、負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請(qǐng)求的是在規(guī)則里面存在的地址,那么它將在客戶端請(qǐng)求報(bào)文的首部再封裝一層IP報(bào)文,將源地址改為DIP,目標(biāo)地址改為RIP,并將此包發(fā)送給RS。 3、RS收到請(qǐng)求報(bào)文后,會(huì)首先拆開(kāi)第一層封裝,然后發(fā)現(xiàn)里面還有一層IP首部的目標(biāo)地址是自己lo接口上的VIP,所以會(huì)處理次請(qǐng)求報(bào)文,并將響應(yīng)報(bào)文通過(guò)lo接口送給eth0網(wǎng)卡直接發(fā)送給客戶端。注意:需要設(shè)置lo接口的VIP不能在共網(wǎng)上出現(xiàn)。 tun模型原理如下: TUN模型通過(guò)隧道的方式在公網(wǎng)中實(shí)現(xiàn)請(qǐng)求報(bào)文的轉(zhuǎn)發(fā),客戶端請(qǐng)求VIP(Director),Director不修改 請(qǐng)求報(bào)文的源IP和目標(biāo)IP,而是在IP首部前附加DIP和對(duì)應(yīng)RIP的地址并轉(zhuǎn)發(fā)到RIP上,RS收到請(qǐng)求報(bào) 文, 本地的接口上也有VIP, 遂直接響應(yīng)報(bào)文給CIP。
需要注意的要點(diǎn)是: 1、RIP,DIP,VIP都是公網(wǎng)地址 2、RS的網(wǎng)關(guān)不能指向DIP 3、請(qǐng)求報(bào)文必須通過(guò)Director, 響應(yīng)報(bào)文一定不能經(jīng)過(guò)Director 4、不支持端口映射 5、RS的操作系統(tǒng)必須支持隧道功能
lvs實(shí)現(xiàn)方式之FULLNAT

FULLNAT實(shí)現(xiàn)原理: FULLNAT是近幾年才出現(xiàn)的,客戶端請(qǐng)求VIP(Director),Director修改請(qǐng)求報(bào)文的源地址(DIP)和目標(biāo)地址(RIP)并轉(zhuǎn)發(fā)給RS, FULLNAT模型一般是Director和RS處在復(fù)雜的內(nèi)網(wǎng)環(huán)境中的實(shí)現(xiàn)。 實(shí)現(xiàn)FULLNAT模型需要注意的: 1、VIP是公網(wǎng)地址, DIP和RIP是內(nèi)網(wǎng)地址, 但是無(wú)需在同一網(wǎng)絡(luò)中 2、請(qǐng)求報(bào)文需要經(jīng)過(guò)Director, 響應(yīng)報(bào)文也要通過(guò)Director 3、RIP接收到的請(qǐng)求報(bào)文的源地址為DIP,目標(biāo)地址為RIP 4、支持端口映射 5、RS可以是任意的操作系統(tǒng)
lvs之算法
lvs到底是根據(jù)什么來(lái)將請(qǐng)求負(fù)載均衡到real server上去的呢?
事實(shí)上lvs支持10中算法來(lái)決定如何將用戶請(qǐng)求調(diào)度到real server上去。
調(diào)度算法分為兩種:靜態(tài)算法和動(dòng)態(tài)算法。
靜態(tài)調(diào)度算法: 根據(jù)算法本身進(jìn)行調(diào)度, 不考慮RS的狀態(tài)
動(dòng)態(tài)調(diào)度算法: 根據(jù)算法和RS的實(shí)時(shí)負(fù)載進(jìn)行調(diào)度
靜態(tài)算法
①.RR:輪詢調(diào)度(Round Robin) 調(diào)度器通過(guò)”輪叫”調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載? ②.WRR:加權(quán)輪詢(Weight RR) 調(diào)度器通過(guò)“加權(quán)輪叫”調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問(wèn)流量。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。 ③.DH:目標(biāo)地址散列調(diào)度(Destination Hash ) 根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。 ④.SH:源地址 hash(Source Hash) 源地址散列”調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空?
動(dòng)態(tài)算法
①.LC:最少鏈接(Least Connections) 調(diào)度器通過(guò)”最少連接”調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用”最小連接”調(diào)度算法可以較好地均衡負(fù)載。 ②.WLC:加權(quán)最少連接(默認(rèn)采用的就是這種)(Weighted Least Connections) 在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用“加權(quán)最少鏈接”調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載?調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。 ③.SED:最短延遲調(diào)度(Shortest Expected Delay ) 在WLC基礎(chǔ)上改進(jìn),Overhead = (ACTIVE+1)*256/加權(quán),不再考慮非活動(dòng)狀態(tài),把當(dāng)前處于活動(dòng)狀態(tài)的數(shù)目+1來(lái)實(shí)現(xiàn),數(shù)目最小的,接受下次請(qǐng)求,+1的目的是為了考慮加權(quán)的時(shí)候,非活動(dòng)連接過(guò)多缺陷:當(dāng)權(quán)限過(guò)大的時(shí)候,會(huì)倒置空閑服務(wù)器一直處于無(wú)連接狀態(tài)。 ④.NQ永不排隊(duì)/最少隊(duì)列調(diào)度(Never Queue Scheduling NQ) 無(wú)需隊(duì)列。如果有臺(tái) realserver的連接數(shù)=0就直接分配過(guò)去,不需要再進(jìn)行sed運(yùn)算,保證不會(huì)有一個(gè)主機(jī)很空間。在SED基礎(chǔ)上無(wú)論+幾,第二次一定給下一個(gè),保證不會(huì)有一個(gè)主機(jī)不會(huì)很空閑著,不考慮非活動(dòng)連接,才用NQ,SED要考慮活動(dòng)狀態(tài)連接,對(duì)于DNS的UDP不需要考慮非活動(dòng)連接,而httpd的處于保持狀態(tài)的服務(wù)就需要考慮非活動(dòng)連接給服務(wù)器的壓力。 ⑤.LBLC:基于局部性的最少鏈接(locality-Based Least Connections) 基于局部性的最少鏈接”調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用“最少鏈接”的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器? ⑥. LBLCR:帶復(fù)制的基于局部性最少連接(Locality-Based Least Connections with Replication) 帶復(fù)制的基于局部性最少鏈接”調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?它與LBLC算法的不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射?該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組,按”最小連接”原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器超載,則按“最小連接”原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器?同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒(méi)有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。