LVS的三种负载均衡以及高可用原理(VS/NAT、VS/TUN、VS/DR)
LVS
LVS(Linux Virtual Server)是一個虛擬的服務器集群(Cluster)系統,采用IP負載均衡技術和基于內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。
- 使用集群技術和Linux操作系統實現一個高性能、高可用的服務器
- 很好的可伸縮性(Scalability)
- 很好的可靠性(Reliability)
- 很好的可管理性(Manageability)
一、LVS的主要組成部分
- 負載調度器(load balancer/ Director),它是整個集群對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的。
- 服務器池(server pool/ Realserver),是一組真正執行客戶請求的服務器,執行的服務一般有WEB、MAIL、FTP和DNS等。
- 共享存儲(shared storage),它為服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
二、LVS負載均衡方式
- Virtual Server via Network Address Translation NAT(VS/NAT)
祥見LVS的NAT中文站點
VS/NAT是一種最簡單的方式,所有的RealServer只需要將自己的網關指向Director即可。客戶端可以是任意操作系統,但此方式下,一個Director能夠帶動的RealServer比較有限。在VS/NAT的方式下,Director也可以兼為一臺RealServer。VS/NAT的體系結構如圖所示。
- Virtual Server via IP Tunneling(VS/TUN)
祥見LVS的TUN中文站點
IP隧道(IP tunneling)是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的數據報文能被封裝和轉發到另一個IP地址。IP隧道技術亦稱為IP封裝技術(IP encapsulation)。IP隧道主要用于移動主機和虛擬私有網絡(Virtual Private Network),在其中隧道都是靜態建立的,隧道一端有一個IP地址,另一端也有唯一的IP地址。它的連接調度和管理與VS/NAT中的一樣,只是它的報文轉發方法不同。調度器根據各個服務器的負載情況,動態地選擇一臺服務器,將請求報文封裝在另一個IP報文中,再將封裝后的IP報文轉發給選出的服務器;服務器收到報文后,先將報文解封獲得原來目標地址為 VIP 的報文,服務器發現VIP地址被配置在本地的IP隧道設備上,所以就處理這個請求,然后根據路由表將響應報文直接返回給客戶。
VS/TUN的工作流程:
- Virtual Server via Direct Routing(VS/DR)
祥見LVS的DR中文站點
VS/DR方式是通過改寫請求報文中的MAC地址部分來實現的。Director和RealServer必需在物理上有一個網卡通過不間斷的局域網相連。 RealServer上綁定的VIP配置在各自Non-ARP的網絡設備上(如lo或tunl),Director的VIP地址對外可見,而RealServer的VIP對外是不可見的。RealServer的地址即可以是內部地址,也可以是真實地址。體系結構如下圖:
VS/DR的工作流程如圖所示:它的連接調度和管理與VS/NAT和VS/TUN中的一樣,它的報文轉發方法又有不同,將報文直接路由給目標服務器。在VS/DR中,調度器根據各個服務器的負載情況,動態地選擇一臺服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址改為選出服務器的MAC地址,再將修改后的數據幀在與服務器組的局域網上發送。因為數據幀的MAC地址是選出的服務器,所以服務器肯定可以收到這個數據幀,從中可以獲得該IP報文。當服務器發現報文的目標地址VIP是在本地的網絡設備上,服務器處理這個報文,然后根據路由表將響應報文直接返回給客戶。
三、三種LVS負載均衡技術的優缺點歸納表:
四、LVS的調度算法
在內核中的連接調度算法上,IPVS已實現了以下十種調度算法:
- 輪叫調度(Round-Robin Scheduling)
- 加權輪叫調度(Weighted Round-Robin Scheduling)
- 最小連接調度(Least-Connection Scheduling)
- 加權最小連接調度(Weighted Least-Connection Scheduling)
- 基于局部性的最少鏈接(Locality-Based Least Connections Scheduling)
- 帶復制的基于局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
- 目標地址散列調度(Destination Hashing Scheduling)
- 源地址散列調度(Source Hashing Scheduling)
- 最短預期延時調度(Shortest Expected Delay Scheduling)
- 不排隊調度(Never Queue Scheduling)
此處,我們先介紹前八種連接調度算法的工作原理。
- 輪叫調度(Round-Robin Scheduling)
輪叫調度(Round Robin Scheduling)算法就是以輪叫的方式依次將請求調度不同的服務器,即每次調度執行i=(i+1)mod n,并選出第i臺服務器。算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。
- 加權輪叫調度(Weighted Round-Robin Scheduling)
加權輪叫調度 (Weighted Round-Robin Scheduling)算法可以解決服務器間性能不一的情況,它用相應的權值表示服務器的處理性能,服務器的缺省權值為1。假設服務器A的權值為1,B的權值為2,則表示服務器B的處理性能是A的兩倍。加權輪叫調度算法是按權值的高 低和輪叫方式分配請求到各服務器。權值高的服務器先收到的連接,權值高的服 務器比權值低的服務器處理更多的連接,相同權值的服務器處理相同數目的連接數。
- 最小連接調度(Least-Connection Scheduling)
最小連接調度(Least- Connect ion Scheduling)算法是把新的連接請求分配到當前連接數最小的服務器。最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1;當連接中止或超時,其連接數減一。
- 加權最小連接調度(Weighted Least-Connection Scheduling)
加權最小連接調 度(Weighted Least-Connectio n Scheduling)算法是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權值。加權最小連接調度在調度新連接時盡可能使服務器的已建立連接數和其權值成比例。
- 基于局部性的最少鏈接(Locality-Based Least Connections Scheduling)
基于局部性的最少鏈接調度(Locality-Based Least Connections Scheduling,以下簡稱為LBLC)算法是針對請求報文的目標IP地址的負載均衡調度,目前主要用于Cache集群系統,因為在Cache集群中客戶請求報文的目標IP地址是變化的。這里假設任何后端服務器都可以處理任一請求,算法的設計目標是在服務器的負載基本平衡情況下,將相同目標IP地址的請求調度到同一臺服務器,來提高各臺服務器的訪問局部性和主存Cache命中率,從而整個集群系統的處理能力。LBLC調度算法先根據請求的目標IP 地址 找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于其一半的工 作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。
- 帶復制的基于局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
帶復制的基于局部性最少鏈接調度(Locality-Based Least Connectio ns 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)
目標地址散列調度 (Destinat ion Hashing Scheduling)算法也是針對目標IP地址的負載均衡,但它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。
- 源地址散列調度(Source Hashing Scheduling)
源地址散列調度(Source Hashing Scheduling)算法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。它采用的散列函數與目標地址散列調度算法 的相同。它的算法流程與目標地址散列調度算法的基本相似,除了將請求的目標IP地址換成請求的源IP 地址,所以這里不一一敘述。在實際應用中,源地址散列 調度和目標地址散列調度可以結合使用在防火墻集群中,它們可以保證整個系統的唯一出入口。
總結
以上是生活随笔為你收集整理的LVS的三种负载均衡以及高可用原理(VS/NAT、VS/TUN、VS/DR)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: varnish的服务配置(实验说明)
- 下一篇: RHCS套件实现高可用负载均衡集群(一)