生活随笔
收集整理的這篇文章主要介紹了
LVS原理图解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、LVS是什么
LVS(Linux Virtual Server),是一個極好的負載均衡解決方案,它將一個真實服務器集群虛擬成一臺服務器來對外提供服務,同時在真實服務器集群中實現了負載均衡。該技術由章文嵩博客發起,從linux2.4開始已經被收錄到linux核心中。
二、LVS有什么用
隨著互聯網在人們生活中的普及,企業級應用迎來了海量數據的沖擊,如微信、美團外賣、微信支付等應用每天的使用人數都在千萬以上,僅靠單臺機器提供服務已經行不通了。
我們可以使用多臺服務器分攤這些壓力,當一定數量的服務器作為一個整體對外提供服務,并且分攤壓力時,我們可以稱這些服務器為“負載均衡集群”。LVS就是一個優秀的負載均衡集群方案,它理論上能夠無限水平擴展,使得服務能夠應對海量數據的沖擊。
三、LVS的原理是什么
首先描述一下LVS中的一些術語:
VS:Virtual Server 虛擬服務器,通常是分發器RS:Real Server 實際提供服務器的真實服務器CIP:Client IP 客戶的客戶端IPVIP:Virtual Server IP 虛擬服務器的IPRIP:Real Server IP 真實服務器的IPDIP:Director IP 分發器的IPCIP <–> VIP == DIP <–> RIP 客戶端訪問VIP,DIP將請求轉發到RIP
LVS的原理如下圖所示:
分發服務器以VIP對外提供服務器,當接收到客戶端服務請求時,便根據預定的分發策略(例如輪詢)將請求分發到Real Server中,由Real Server做實際的業務處理。當Real Server處理完成后,根據不同的模式,會使用不同的方式返回請求結果。
四、 LVS的3種工作模式
根據服務返回方式和集群分布的不同,LVS有3中不同的工作模式,他們分別是:NAT(地址轉換)模式、DR(直接路由)模式和TUN(隧道)模式。
NAT地址轉換模式
NAT地址轉換模式是最為簡單的一種模式,它的原理如下圖所示(為了簡潔,用戶只畫了一個):
NAT其實就是通過網絡地址轉換來實現負載均衡的,下面是它的請求流程:
分發服務器Director Server(后面簡稱DS)接受到請求后,通過分發策略得出要將此請求分發到Real Server1。于是將請求報文的目的地址改為RIP1,發送出去。Real Server1收到一個目標地址為自己的數據包,于是接受并進行處理。處理完成后,Real Server1將RIP1——>CIP的數據包發送出去。DS接收到RIP1——>CIP的數據包后,將源地址改為VIP,然后發送出去:VIP——>CIP。 這個過程中,DS僅僅起到一個地址轉換和分發的作用。在NAT模式中,請求和響應報文都要通過DS,當真實服務器的數量越來越多時,分發器DS將會成為整個集群系統的性能瓶頸。下面的DR模式解決這個問題。
DR直接路由模式
互聯網應用中存在一個規律:請求報文較短而響應報文往往包含大量的數據。如果能將請求和響應分開處理,即在負載調度器(Director)中只負責調度請求而響應直接由RealServer返回給客戶,將極大地提高整個集群系統的吞吐量。這就是DR的實現原理,原理圖如下所示:
在DR模型中,只有在請求的時候會經過DR,響應的數據包由Real Server直接返回給用戶,該模式是3中模式中最常用的。它的請求過程如下所示:
DR接受到請求后,通過分發策略得出要將此請求分發到Real Server2。DS就將數據幀中的目標MAC地址修改為Real Server2的MAC地址,然后再將數據幀發送出去。(為什么要用MAC地址?因為此時Real Server也有配置有VIP)當Real Server2 收到一個源地址為CIP目標地址為VIP的數據包時,Real Server2發現目標地址為VIP,而VIP是自己,于是接受數據包并給予處理。Real Server2處理完成后,會將一個源地址為VIP而目標地址為CIP的數據包發送出去,此時的響應請求就不會再經過DS,而是直接響應給用戶了。在這個過程中存在一個問題,由于RealServer也配置了VIP,那么當CIP——>VIP的數據包到達服務局域網,進行廣播時,所有的服務器都會進行應答,此時先應答的服務器就會收到數據包,這樣就失去了負載均衡的能力。因此在使用DR模式時,通常會采用一些方式來確保請求數據包只會由DS接收,例如抑制Real Server對廣播的應答,或者直接在路由器中對DS進行綁定等。
TNU隧道模式
TNU模式與DR模式非常相似,它同樣是只有請求信息會經過DS,應答信息由Real Server直接返回給用戶。不過DR模式中,要求DS和所有的Real Server必須在一個局域網中,而TNU模式去掉了這個限制。
TNU模式原理圖如下所示:
在TNU模式中,DS與Real Server不必在一個網絡中。DS在接到請求報文之后,在報文的上面再加一層源地址為DIP,目的地址為RIP2的IP首部,然后通過廣域網發送到Real Server2。Real Server2收到報文,拆掉報文以后發現了里面還有一個封裝,它就知道了,這就是隧道。后續的過程就與DR一樣了。
五、 LVS的調度算法
LVS的調度算法是指LVS對于請求的分發方式。DS在向Real Server分發請求實現負載均衡時,有10種不同的算法:
輪詢(Round Robin,rr):在Real Server之間輪流分配請求。加權輪詢(Weighted Round Robin,wrr):有權重地進行輪詢。最少鏈接(Least Connnections,lc):將請求發送給連接數最少的RS。加權最少鏈接(Weighted Least Connnections,wlc):分發給基于權重的最少鏈接。基于局部性的最少鏈接(Locality-Based Least Connections,lblc):首先根據目標IP地址找出最近使用的服務器,如果該服務器可用且沒有超載(一半的工作負荷),則將請求發送到該服務器。否則,使用“最少鏈接”原則。帶復制的基于局部性最少鏈接(Locality-Based Least Connections with
Replication,lblcr):它與lblc的不同之處是它要維護從一個目標IP到一組服務器的映射,而lblc值維護從一個目標IP到一臺服務器的映射。目標地址散列(Destination Hashing,dh):使用請求的目標IP地址作為散列鍵,從靜態分配的散列表找出對應的服務器,若該服務器可用且未超載,則轉發請求,否則返回空。源地址散列(Source Hashing,sh):使用請求的源IP地址作為散列鍵,從靜態分配的散列表找出對應的服務器,若該服務器可用且未超載,則轉發請求,否則返回空。最短期望延遲(Shortest Expecte Delay,sed):“最短的期望的延遲”是基于WLC算法的,只是其計算方法不同。具體算法如下:(active+1)*256/weight最少隊列調度(Never Queue Scheduling):無需隊列。如果有臺
realserver的連接數=0就直接分配過去,不需要在進行SED運算。如果沒有服務器連接數為空閑,則使用SED算法。
六、LVS的優缺點是什么
LVS的優點有:
工作在網絡層,可以實現高性能、高可用的服務器集群技術。廉價,可把許多低性能的服務器組合在一起形成一個水平擴展的集群服務器。易用,配置非常簡單,且有多重負載均衡的方法穩定可靠,即使集群中的一臺服務器掛掉,也不影響整體服務效果。可擴展性好,可以用戶透明地進行水平擴展,加減機器非常方便。
LVS的缺點:
由于是通用組件,因此不能對特定業務進行針對優化。對于長連接無法進行負載均衡。自身沒有健康狀態檢查,需要結合腳本或者Keepalived等軟件實現。
LVS (Linux Virtual Server)跟SLB(Server Load Balancing)最大的區別就是,LVS是在網絡層起作用的,而SLB是在應用層起作用的
參考文章
參考文章
參考文章
總結
以上是生活随笔為你收集整理的LVS原理图解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。