1.LVS:(LB叢集的一個實作)
Internet的快速增長使多媒體網絡伺服器面對的通路數量快速增加,伺服器需要具備提供大量并法通路的能力,是以對于大負載的伺服器來講,CPU,I/O處理能力很快就會成為瓶頸。由于單台伺服器的性能總是有限的,簡單的提高硬體性能并不能真正解決這個問題。為此,必須采用多伺服器和負載均衡技術才能滿足大量通路的需要。Linux虛拟伺服器(Linux Virtual Servers,LVS)使用負載均衡技術将多台伺服器組成一個虛拟伺服器。它為适應快速增長的網絡通路需求提供了一個負載能力易于擴充,而且價格低廉的解決方案。
2.LVS結構架構
LVS由前端的負載均衡器(Load Balancer,LB)和後端的真實伺服器(Real Server,RS)群組成。RS間可以通過區域網路或廣域網連接配接。LVS的這種結構對用是透明的,使用者隻能看見一台作為LB的虛拟伺服器(Virtal Server),而看不到提供服務的RS群。當使用者的請求發往虛拟伺服器,LB根據設定的包轉發政策和負載均衡排程算法将使用者的請求轉發給RS。RS再将使用者請求結果傳回給使用者。同請求包一樣,應答包的傳回方式也與包轉發政策有關。
3.LVS工作原理:
(1)lvs的控制是由兩部份組成的
ipvs(ip virrual server):一段代碼(工作在核心中的netfilter input鈎子函數上)是真正生效實作排程的代碼
ipvsadm(工作在使用者空間的指令行工具,負責為ipvs核心架構編寫規則,用于管理叢集服務)
(2)lvs附着于netfiler五個内置的鈎子函數
PREROUTING —> INPUT(流向内部)
PREROUTING----> FORWARD —> POSTROUTING(轉發)‘
OUTPUT—> POSTROUTING(流向外部)
(3)lvs工作于INPUT
PREROUTING ---> INPUT(lvs在此強行改變資料流向)--->POSTROUTING
1.當使用者向負載均衡排程器(Director Server)發起請求,排程器将請求發往至核心空間
2.PREROUTING鍊首先會接收到使用者請求,判斷目标IP确定是本機IP,将資料包發往INPUT鍊
3.IPVS是工作在INPUT鍊上的,當使用者請求到達INPUT時,IPVS會将使用者請求和自己已定義好的叢集服務進行比對,如果使用者請求的就是定義的叢集服務,那麼此時IPVS會強行修改資料包裡的目标IP位址及端口,并将新的資料包發往POSTROUTING鍊
4.POSTROUTING連結收資料包後發現目标IP位址剛好是自己的後端伺服器,那麼此時通過選路,将資料包最終發送給後端的伺服器
4.LVS的包轉發政策:
1.NAT (Network Address Translation)模式。LB收到使用者請求包後,LB将請求包中虛拟伺服器的IP位址轉換為某個標明RS的IP位址,轉發給RS;RS将應答包發給LB,LB将應答包中RS的IP轉為虛拟伺服器的IP位址,回送給使用者。
2.IP隧道 (IP Tunneling)模式。LB收到使用者請求包後,根據IP隧道協定封裝該包,然後傳給某個標明的RS;RS解出請求資訊,直接将應答内容傳給使用者。此時要求RS和LB都要支援IP隧道協定。
3.DR(Direct Routing)模式。LB收到請求包後,将請求包中目标MAC位址轉換為某個標明RS的MAC位址後将包轉發出去,RS收到請求包後,可直接将應答内容傳給使用者。此時要求LB和所有RS都必須在一個實體段内,且LB與RS群共享一個虛拟IP。
三種負載平衡對比
網絡位址轉換(NAT) | 直接路由(DR) | IP隧道(IP TUN) | |
---|---|---|---|
建立難度 | 易 | 有一定難度 | 有一定難度 |
可擴充性 | 差 | 好 | 很好 |
帶寬 | 小 | 大 | 大 |
延遲 | 最大 | 小 | 大 |
支援的伺服器數量 | 少(10~20) | 多(>100) | 多(>100) |
IP包修改 | 修改IP位址和端口 | 修改IP包的MAD位址 | 對請求包進行IP包裝 |
背景伺服器OS | 任何支援NAT的OS | 多數 | 支援IP Tunnel |
網絡連接配接 | 區域網路 | 區域網路 | 本地或遠端 |
預設路由 | 負載均衡伺服器 | 不限 | |
實際伺服器限制 | 無 | Lo不響應ARP | Tunl裝置不響應ARP |
服務端口映射 | 可以 | 不可以 | 不可以 |
5.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位址。
6.LVS 的負載排程算法
在核心中的連接配接排程算法上,IPVS 已實作了以下八種排程算法:
一.
輪叫排程(RoundRobin Scheduling )
輪叫排程(Round Robin Scheduling)算法就是以輪叫的方式依次将請求排程不同的伺服器,即每次排程執行 i = (i + 1) mod n,并選出第 i 台伺服器。算法的優點是其簡潔性,它無需記錄目前所有連接配接的狀态,是以它是一種無狀态排程。
二.
權重輪叫排程(Weighted RoundRobin Scheduling )
權重輪叫排程 (Weighted RoundRobin Scheduling)算法可以解決伺服器間性能不一的情況,它用相應的權值表示伺服器的處理性能,伺服器的預設權值為 1。假設伺服器 A 的權值為1,B 的 權值為 2,則表示伺服器 B 的處理性能是 A 的兩倍。權重輪叫排程算法是按權值的高低和輪叫方式配置設定請求到各伺服器。權值高的伺服器先收到的連接配接,權值高的服 務器比權值低的伺服器處理更多的連接配接,相同權值的伺服器處理相同數目的連接配接數。
三
最小連接配接排程(LeastConnection Scheduling )
最小連接配接排程(Least Connection Scheduling)算法是把新的連接配接請求配置設定到目前連接配接數最小的伺服器。最小連接配接排程是一種動态排程算法,它通過伺服器目前所活躍的連接配接數來估計伺服器的負載情況。排程器需要記錄各個伺服器已建立連接配接的數目,當一個請求被排程到某台伺服器,其連接配接數加 1;當連接配接中止或逾時,其連接配接數減一。
四
權重最小連接配接排程(Weighted LeastConnection Scheduling)
權重最小連接配接調 度(Weighted LeastConnection Scheduling)算法是最小連接配接排程的超集,各個伺服器用相應的權值表示其處理性能。伺服器的預設權值為 1,系統管理者可以動态地設定伺服器的權值。權重最小連接配接排程在排程新連接配接時盡可能使伺服器的已立連接配接數和其權
值成比例。
五
基于局部性的最少連結(LocalityBased Least Connections Scheduling )
基 于局部性的最少連結排程(LocalityBased Least Connections Scheduling,以下簡稱為LBLC)算法是針對請求封包的目标 IP 位址的負載均衡排程,目前主要用于 Cache 叢集系統,因為在 Cache 叢集中 客戶請求封包的目标 IP 位址是變化的。這裡假設任何後端伺服器都可以處理任一請求,算法的設計目标是在伺服器的負載基本平衡情況下,将相同目标 IP 位址的 請求排程到同一台伺服器,來提高各台伺服器的通路局部性和主存 Cache 命中率,進而整個集
群系統的處理能力。LBLC 排程算法先根據請求的目标 IP 位址 找出該目标 IP 位址最近使用的伺服器,若該伺服器是可用的且沒有超載,将請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處于其一半的工 作負載,則用 “ 最少連結 ” 的原則選出一個可用的伺服器,将請求發送到該伺服器。
六
帶複制的基于局部性最少連結(LocalityBased Least Connections with Replication
Scheduling)
帶複制的基于局部性最少連結排程(LocalityBased Least Connections with Replication
Scheduling,以下簡稱為 LBLCR)算法也是針對目标 IP 位址的負載均衡,目前主要用于 Cache叢集系統。它與 LBLC 算法的不同之處是它要 維護從一個目标 IP 位址到一組伺服器的映射,而 LBLC 算法維護從一個目标 IP 位址到一台伺服器的映射。對于一個 “ 熱門 ” 站點的服務請求,一台 Cache 伺服器可能會忙不過來處理這些請求。這時,LBLC 排程算法會從所有的Cache 伺服器中按 “ 最小連接配接 ” 原則選出一台 Cache 伺服器,映射該 “ 熱門 ” 站 點到這台Cache 伺服器,很快這台 Cache 伺服器也會超載,就會重複上述過程選出新的 Cache 伺服器。這樣,可能會導緻該 “ 熱門 ” 站點的映像會出現 在所有的 Cache 伺服器上,降低了 Cache 伺服器的使用
效率。LBLCR 排程算法将 “ 熱門 ” 站點映射到一組 Cache 伺服器(伺服器集合),當該 “ 熱門 ” 站點的請求負載增加時,會增加集合裡的 Cache 伺服器,來處理不斷增長的負載;當該 “ 熱門 ” 站點的請求負載降低時,會減少集合裡的 Cache 伺服器 數目。這樣,該 “ 熱門 ” 站點的映像不太可能出現在所有的 Cache 伺服器上,進而提供 Cache 叢集系統的使用效率。
LBLCR 算法先根據請求的目标 IP 位址找出該目标 IP 位址對應的伺服器組;按 “ 最小連接配接 ” 原則從該伺服器組中選出一台伺服器,若伺服器沒有超載,将請求發送到該伺服器;若伺服器超載;則按 “ 最小連接配接 ” 原則從整個叢集中選出一台伺服器,将該伺服器加入到伺服器組中,将請求發送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,将最忙的服 務器從伺服器組中删除,以降低複制的程度。
七
目标位址散列排程(Destination Hashing Scheduling )
目标位址散列排程 (Destination Hashing Scheduling)算法也是針對目标 IP 位址的負載均衡,但它是一種靜态映射算法,通過一個散列(Hash)函數将一個目标 IP 位址映射到一台服務
器。目标位址散列排程算法先根據請求的目标 IP 位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則
傳回空。
八
源位址散列排程(Source Hashing Scheduling)
源位址散列排程(Source Hashing Scheduling)算法正好與目标位址散列排程算法相反,它根據請求的源 IP 位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。它采用的散列函數與目标位址散列排程算法 的相同。它的算法流程與目标位址散列排程算法的基本相似,除了将請求的目标 IP 位址換成請求的源 IP 位址,是以這裡不一一叙述。在實際應用中,源位址散列 排程和目标位址散列排程可以結合使用在防火牆叢集中,它們可以保證整個系統的唯一出入口。