Linux中 LVS 的介紹
一、LVS簡介
LVS(Linux Virtual Server)即Linux虛擬伺服器,是一個虛擬的伺服器集群系統。本專案在1998年5月由章文嵩博士成立,目前 LVS 是 Linux 核心標準的一部分。
使用 LVS 可以達到的技術目標是:通過 LVS 達到的負載均衡技術和 Linux 作業系統實現一個高效能高可用的 Linux 伺服器叢集,它具有良好的可靠性、可擴充套件性和可操作性。從而以低廉的成本實現最優的效能。
LVS 是一個實現負載均衡叢集的開源軟體專案,LVS架構從邏輯上可分為排程層、Server叢集層和共享儲存。
二、LVS詳細介紹
1、宗旨
使用叢集技術和Linux作業系統實現一個高效能、高可用的伺服器。
很好的可伸縮性(Scalability);
很好的可靠性(Reliability);
很好的可管理性(Manageability)。
2、LVS的組成
LVS 由2部分程式組成,包括 ipvs 和 ipvsadm。
1)ipvs(ip virtual server):一段程式碼工作在核心空間,叫ipvs,是真正生效實現排程的程式碼。
2)ipvsadm:另外一段是工作在使用者空間,叫ipvsadm,負責為ipvs核心框架編寫規則,定義誰是叢集服務,而誰是後端真實的伺服器(Real Server)。
3、LVS相關術語
1) DS:(Director Server)指的是前端負載均衡器節點。
2) RS:(Real Server)後端真實的工作伺服器。
3) VIP:向外部直接面向用戶請求,作為使用者請求的目標的IP地址。
4) DIP:(Director Server IP)主要用於和內部主機通訊的IP地址。
5) RIP:(Real Server IP)後端伺服器的IP地址。
6) CIP:(Client IP)訪問客戶端的IP地址。
4、LVS的優點
LVS主要用於多伺服器的負載均衡。它工作在網路層,可以實現高效能,高可用的伺服器叢集技術。
1)開源,免費,可把許多低效能的伺服器組合在一起形成一個超級伺服器。
2)在網上能找到一些相關技術資源。
3)易用,配置非常簡單,且有多種負載均衡的方法。
4)穩定可靠,即使在叢集的伺服器中某臺伺服器無法正常工作,也不影響整體效果。另外可擴充套件性也非常好。
5、LVS的缺點
1)最核心的就是沒有可靠的支援服務,沒有人對其結果負責;
2)功能比較簡單,支援複雜應用的負載均衡能力較差,如演算法較少等;
3)開啟隧道方式需重編譯核心;
4)配置複雜;
5)主要應用於LINUX,目前沒有專門用於WINDOWS的版本,不過可以通過配置,使windows成為LVS叢集中的real server。
6、LVS的工作原理
LVS可分為三部分:
1)Load Balancer:是LVS的核心部分。它負責將客戶的請求按照一定的演算法分發到下一層不同的伺服器進行處理,自己本身不做具體業務的處理。
另外該層還可用監控下一層的狀態,如果下一層的某臺伺服器不能正常工作了,它會自動把其剔除,恢復後又可用加上。該層由一臺或者幾臺Director Server組成。
2)Server Array:該層負責具體業務。可有WEB Server、mail Server、FTP Server、DNS Server等組成。
注意,其實上層的Director Server也可以當Real server用的。
3)Shared Storage:主要是提高上一層資料和為上一層保持資料一致。
7、LVS的十種排程演算法
靜態排程方法:
1) rr(輪詢排程):最簡單
按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是簡單。輪詢演算法假設所有的伺服器處理請求的能力都是一樣的,調度器會將所有的請求平均分配給每個真實伺服器,不管後端 RS 配置和處理能力,非常均衡地分發下去。
2)wrr (加權輪詢 )
比 rr 的演算法多了一個權重的概念,可以給 RS 設定權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr演算法的一種優化和補充。
LVS 會考慮每臺伺服器的效能,並給每臺伺服器新增要給權值,如果伺服器A的權值為1,伺服器B的權值為2,則排程到伺服器B的請求會是伺服器A的2倍。權值越高的伺服器,處理的請求越多。
3)sh (源地址雜湊排程演算法)
與目標地址雜湊排程演算法類似,但它是根據源地址雜湊演算法進行靜態分配固定的伺服器資源。
4)dh (目標地址雜湊排程演算法)
根據目標 IP 地址通過雜湊函式將目標 IP 與伺服器建立對映關係,出現伺服器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該伺服器。
動態排程方法:
1) lc (最少連結)
這個演算法會根據後端 RS 的連線數來決定把請求分發給誰,比如 RS1 連線數比 RS2 連線數少,那麼請求就優先發給 RS1.
2) wlc (加權最少連結)
這個演算法比 lc 多了一個權重的概念。
3) sed (最短預期延時排程)
4) nq(不排隊排程)
3) lblc (基於區域性性的最少連線排程演算法)
這個演算法是請求資料包的目標 IP 地址的一種排程演算法,該演算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的伺服器,如果這臺伺服器依然可用,並且有能力處理該請求,排程器會盡量選擇相同的伺服器,否則會繼續選擇其它可行的伺服器.
4) lblcr (複雜的基於區域性性最少的連線演算法)
記錄的不是要給目標 IP 與一臺伺服器之間的連線記錄,它會維護一個目標 IP 到一組伺服器之間的對映關係,防止單點伺服器負載過高。
三、負載均衡機制
LVS工作在網路層,通過控制IP來實現負載均衡。
IPVS是其具體的實現模組。IPVS的主要作用:安裝在DS(前端負載均衡器節點)上面,在DS虛擬一個對外訪問的IP(VIP)。使用者訪問VIP,到達DS,DS根據一定的規則選擇一個RS(後端真實的工作伺服器),處理完成後然後返回給客戶端資料。這些步驟產生了一些具體的問題,比如如何選擇具體的Real Server,Real Server如果返回給客戶端資料等等。IPVS為此有三種機制:
1、VS/NAT(Virtual Server via Network Address Translation),即網路地址翻轉技術實現虛擬伺服器
當請求來到時,Diretor server上處理的程式將資料報文中的目標地址(即虛擬IP地址)改成具體的某臺Real Server,埠也改成Real Server的埠,然後把報文發給Real Server。Real Server處理完資料後,需要返回給Diretor Server,然後Diretor server將資料包中的源地址和源埠改成VIP的地址和埠,最後把資料傳送出去。由此可以看出,使用者的請求和返回都要經過Diretor Server,如果資料過多,Diretor Server肯定會不堪重負。
注:
1)RIP和DIP應在同一個IP網路,且應使用私網地址;RS的閘道器要指向DIP;
2)請求報文和響應報文都必須經由Director轉發,Director易於成為系統瓶頸;
3)支援埠對映,可修改請求報文的目標PORT;
4)VS必須是Linux系統,RS可以是任意OS系統。
2、VS/DR(Virtual Server via Direct Routing),即用直接路由技術實現虛擬伺服器
Direct Routing,直接路由,LVS預設模式,應用最廣泛,通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的介面的MAC,目標MAC是某挑選出的RS的RIP所在介面的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變。
注:
1 ) Director和各RS都配置有VIP。
2 ) 確保前端路由器將目標IP為VIP的請求報文發往Director。
在前端閘道器做靜態繫結VIP和Director的MAC地址;
在RS上使用arptables工具;
arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改核心引數以限制arp通告及應答級別;
/proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce
3 )RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網路;RIP的閘道器不能指向DIP,以確保響應報文不會經由Director。
4 )RS和Director要在同一個物理網路。
5 )請求報文要經由Director,但響應報文不經由Director,而由RS直接發往Client。
6 )不支援埠對映(埠不能修敗)。
7 )RS可使用大多數OS系統。
3、VS/TUN(Virtual Server via IP Tunneling),即IP隧道技術實現虛擬伺服器
和VS/NAT基本一樣,但是Real server是直接返回資料給客戶端,不需要經過Diretor server,這大大降低了Diretor server的壓力。
轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP)。
注:
1 ) DIP, VIP, RIP都應該是公網地址;
2 ) RS的閘道器一般不能指向DIP;
3 ) 請求報文要經由Director,但響應不經由Director;
4 ) 不支援埠對映;
5 ) RS的OS須支援隧道功能。
擴充套件:
LVS-FULLNAT:通過同時修改請求報文的源IP地址和目標IP地址進行轉發。(此型別kernel預設不支援)
CIP --> DIP
VIP --> RIP
注:
1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網路;因此,RIP的閘道器一般不會指向DIP。
2) RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client。
3) 請求和響應報文都經由Director。
4)支援埠對映。
四、小總結
1、LVS 工作模式總結
2、相似與差別
LVS-NAT與LVS-FULLNAT:請求和響應報文都經由Director。
LVS-NAT:RIP的閘道器要指向DIP。
LVS-FULLNAT:RIP和DIP未必在同一IP網路,但要能通訊。
LVS-DR與LVS-TUN:請求報文要經由Director,但響應報文由RS直接發往Client。
LVS-DR:通過封裝新的MAC首部實現,通過MAC網路轉發。
LVS-TUN:通過在原IP報文外封裝新IP頭實現轉發,支援遠距離通訊。
3、三大流向
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
轉發:PREROUTING --> FORWARD --> POSTROUTING