天天看點

lvs

lvs詳細介紹

LVS是Linux Virtual Server的簡寫,意即Linux虛拟伺服器,是一個虛拟的伺服器叢集系統。本項目在1998年5月成立,是中國國内最早出現的自由軟體項目之一。LVS采用IP負載均衡技術和基于内容請求分發技術。排程器具有很好的吞吐率,将請求均衡地轉移到不同的伺服器上執行,且排程器自動屏蔽掉伺服器的故障,進而将一組伺服器構成一個高性能的、高可用的虛拟伺服器。整個伺服器叢集的結構對客戶是透明的,而且無需修改用戶端和伺服器端的程式。

一、幾種叢集環境介紹

說lvs前先來說說叢集,根據所适用場景的不同,最常見的叢集有以下三種類型:負載均衡叢集(LB:Load Balance),高可用叢集(HA:High Availability),高性能叢集(HP:High Performance)。

1)LB叢集主要有應用層和傳輸層兩個層次上的實作,有硬體的實作,也有開源軟體的實作,硬體類型的LB裝置主要有美國的F5的BIG/IP、思傑的NetScaler、A10、Array、RadWare,開源軟體的實作主要有LVS(工作在四層)、Haproxy(四層、七層都可實作,但主要是七層的實作)、nginx(應用層的實作)。

2)HA叢集中開源的解決方案主要有heartbeat、keepalived、corosync+pacemaker、cman+rgmanager、cman+pacemaker。

3)HP叢集使用在一些特殊的場景,為高性能叢集。

4)DS:Distributed System,分布式系統;hadoop,HDFS,GlusterFS,mogilefs

二、LVS各種類型介紹

常見的術語

LVS

LVS工作在OSI七層模型中的第四層,是四層交換技術,它是工作在核心中的一段代碼,根據目标位址和目标端口實作資料轉發,它并且是工作在netfiler架構上。LVS分為兩個部份,一部份工作在核心,叫ipvs,另一部份工作在使用者空間,叫ipvsadmin,用此使用者空間工具編寫排程規則。

LVS的架構類型大體上分為三種類型,一是VS/NAT,二是VS/DR,三是VS/TUN,四是lvs/fullnat。下邊分别對這幾種類型進行闡述。

1)lvs-nat

多目标IP位址的DNAT,通過将請求封包中的目标位址和目标端口修改為某個利用排程算法挑選出來的後端RS的RIP和PORT的過程實作的轉發;

wKiom1nkqd3Tu8VzAAGp0krY9Mc499.png

排程的大緻過程:

首先用戶端向director的vip發起服務請求,在netfiler架構上的INPUT鍊上ipvs發現用戶端請求的是自己定義好的叢集服務,那director采用靜态或動态算法從自己的規則中挑選出一個real server出來,再把用戶端請求封包做DNAT轉換,把請求封包的目的位址修改成已挑選出real server的ip位址,然後重新封裝封包發送給real server;而當real server收到director的請求封包後,就會分析此封包看對方請求的是什麼資源,再把資源準備好封裝成響應封包發送給director,director再做SNAT,把源位址修改成自己的vip位址後把封包發送給用戶端;在用戶端看來他是直接通路的是director,而作出響應的也是director,其後端的real server對用戶端是不可見的,對使用者是透明的。

注意下列幾個問題:

1.RIP和DIP必須在同一網段,并且應該是私有IP位址;RS的網關應該指向DIP;

2.請求封包和響應封包都必須經過Director轉發,Director易于成為系統性能瓶頸并引發單點故障;

3.可以實作端口重定向;CIP向VIP發送請求的端口号可以與後端的RIP所提供服務的服務端口不同;

4.VS必須是Linux系統,RS可以是任意作業系統;

2)lvs-dr:預設類型

dr:Direct Routing,直接路由;

通過為請求封包重新封裝一個資料鍊路層首部(MAC位址)進行封包轉發;重新封裝之後的封包的源MAC位址是DIP所在網絡接口的MAC位址;目的MAC位址是某個利用排程算法挑選出來的後端RS的RIP所在接口的MAC位址;源IP位址和源PORT,以及目的IP位址和目的PORT,在整個封包轉發過程中保持不變;

wKioL1nkp4Dg8OowAAKu8Saz1dY125.png

排程大緻過程:

用戶端請求封包到達director的vip後,director發現是請求是一個叢集服務,director采用靜态或動态算法挑選出一個real server,這時director不再像VS/NAT中會修改封包中ip首部的目标ip,而是把目标MAC修改成已挑選real server的rip的MAC位址,因dip與rip是在同一個二層網絡中,隻需要MAC位址即可完成尋址,是以被修改了目的MAC的封包能成功送到real server,real server把封包拆開後發現目的MAC的确是rip上的MAC,是以它會處理這個封包,real server把用戶端要請求的資源準備好後,強行讓封包從“lo:0”這樣的子接口上送出去,這個接口配置了vip的位址,每個real server都會配置rip與vip的位址,是以為了讓vip位址不會導緻沖突,是以各real server都要采取一定的機制讓配置在"lo:0"上的vip位址不被網絡上的其他裝置得知,這個位址隻是用在響應封包中把響應封包的源位址封裝成vip的,這樣響應封包就可通過real server直接到達用戶端,而不必再通過director的再次轉發,這樣,接入的封包通過director,而響應封包則直接送到用戶端,而用戶端看到的封包也是從vip送回來的(其實是從real server來的),這種VS/DR模型讓director得到的解放,隻處理接入封包,壓力也變得更小,能帶動的real server也更多,處理并發能力更強,但後端real server配置比較麻煩。

注意以下幾個問題:

1.確定前端路由器能夠将目标IP位址為VIP的封包發往VS(Director);

2.RS的RIP可以是私有位址也可以是公有位址,RIP和DIP應該在同一邏輯網絡;

3.請求封包必須要經過Director,但是所有的響應封包不需要經過Director直接通過路由轉發給用戶端即可;

4.不支援端口重定向;

5.RS必須是Linux作業系統;

6.RS上必須配置RIP和VIP,并且VIP應該配置在lo接口的lable上;

3)lvs-tun:tunnel,隧道

不修改請求封包的IP首部(源IP為CIP,目的IP為VIP),而是在原有的IP封包的封裝格式之外再次封裝一個IP首部(源IP為DIP,目的IP為RIP),将重新封裝的封包發往使用排程算法挑選出的後端RS上;

wKiom1nkqn6DxPSjAAJ6cn9TrMQ891.png

VS/TUN類型利用了IP隧道技術,把一個IP封包封裝了另一個IP封包,這可以使把目标為一個IP的封包能封裝轉發到另一個IP位址。請求封包到達director後,director采用靜态或動态算法挑選一個在隧道上的real server位址,把原來的源位址為cip,目标位址為vip的ip封包又封裝在另一個IP封包上,把此IP封包送到隧道上轉以給real server,real server拆開封包看到目标位址是vip,而自己的“lo:0”接口上又配置了vip,是以能正常的處理此封包,将響應封包準備好後,又可直接送達到cip。

4)lvs-fullnat

三、LVS各種排程算法介紹

根據lvs在排程時是否考慮各RS目前的負載狀态,可以将排程算法分為兩類:

靜态排程算法:

僅根據排程算法本身進行排程。

1)rr:round robin(輪流,輪詢,輪叫),這種算法是起點公平,但根據時間推移,各real server會産生負載不均衡的情況;

2)wrr:weighted round robin(權重的輪詢),用于real server伺服器硬體性能不同時的場景;

3)sh:source hashing(源位址hash),表示來源于同一個cip的請求将始終被定向到同一個rs,使用在需要session保持的場景,但這種算法又打破了負載均衡的初衷;

4)dh:destination hashing(目标位址hash),表示通路同一位址的資源始終被定向到同一個real server,用在内部通路外部網絡時有兩個出口(防火牆)時的特殊場景;

動态排程算法:

根據算法及各real server目前的負載狀況進行衡量計算後再進行排程。

1)lc:least connection(最少連接配接),lc算法是把新的連接配接排程給目前連接配接數最小的real server;

2)wlc:weighted least connection(帶權重的最少連接配接),此算法是lc算法的一個補充,各real server用一個權值來代表其處理能力,director盡可能使用其排程按照其權值的比例來排程,這是IPVS的預設算法;

3)sed:shoutest expection delay(最短期望延遲),表示讓在初始狀态時能讓director挑選到權重大的real server,即使是權重小的real server在director規則中的前邊,這種算法在各real server權重相差較大時會導緻權重小的real server在一段時間内不會配置設定連接配接請求;

4)nq:never queue(永不排隊),表示在初始狀态時director會依據weight的大小至上而下的為每一個RS配置設定一個連接配接,保證每一個real server都能在最短的時間内得到連接配接請求,解決了sed算法中real server有可能會在一段時間内不會配置設定到連接配接請求的問題;

5)lblc:Locality-Based Least Connection(基于局部性的最少連接配接),此算法是針對請求封包的目标IP位址的負載均衡排程,目前主要用于Cache叢集系統;

6)lblcr:Replication lblc(帶複制功能的lblc),此算法是針對請求封包的目标IP位址的負載均衡排程,目前主要用于Cache叢集系統。

      本文轉自Vincent一馬 51CTO部落格,原文連結:http://blog.51cto.com/mazhenbo/2043820,如需轉載請自行聯系原作者

繼續閱讀