一、負載均衡的方式
我們知道服務器集群的重要性以及必要性,而實現(xiàn)服務器集群主要就是為了負載均衡(L
OAd Balance),負載均衡就是有兩臺或者以上的服務器或者站點為我們提供服務,我們將來自客戶端的請求靠某種算法盡量平均分攤到這些集群中,從而避免一臺服務器因為負載太高而出現(xiàn)故障。
簡而言之便是將所有的負載均分到多臺服務器中,即使其中某個出現(xiàn)故障,用戶也能正常訪問,得到服務。
而從早期到現(xiàn)在出現(xiàn)的負載均衡方式有這樣的兩種:
•硬件負載均衡
•軟件負載均衡
其中硬件負載均衡解決方案是直接在服務器和外部網(wǎng)絡間安裝負載均衡設備,由專門的設備完成專門的任務,獨立于操作系統(tǒng),整體性能得到大量提高,加上多樣化的負載均衡策略,智能化的流量管理,但是相對來說成本較高。
而常用的負載均衡器有這樣一些:
•F5 BIG-IP
•Citrix Netscaler
•Alteon ACEDirector
•Cisco LocalDirector
•A10 負載均衡器
•梭子魚負載均衡器
F5-Big-IP受到了用戶的廣泛認可,基于簡單的Web管理界面,實現(xiàn)4-7層負載均衡、通用持續(xù)性、響應錯誤處理、SSL加速、智能HTTP壓縮、TCP優(yōu)化、第7層速率整形、內容緩沖、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護等等強大的功能
而更加廣泛的則是使用軟件的方式來實現(xiàn)負載均衡,實現(xiàn)效果不錯,并且不需要成本是很多企業(yè)選擇的方式。其中常用的方式有:
•LVS
•Nginx
•HAProxy
其中 LVS 主要工作與網(wǎng)絡模型中的第四層,而 Nginx 主要工作于第七層,而 HAProxy 是一款提供高可用性、負載均衡以及基于TCP(第四層)和HTTP(第七層)應用的代理軟件,支持虛擬主機。
其中 LVS 抗負載能力強只是工作在網(wǎng)絡4層之上僅作分發(fā)之用,沒有流量的產(chǎn)生,并且工作穩(wěn)定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat,在項目實施中用得最多的還是LVS/DR+Keepalived。
二、LVS 的集群特點
LVS 集群有這樣的一些特點:
1、在功能上:
•有實現(xiàn)三種IP負載均衡技術和八種連接調度算法的IPVS軟件。在IPVS內部實現(xiàn)上,采用了高效的Hash函數(shù)和垃圾回收機制,能正確處理所調度報文相 關的ICMP消息(有些商品化的系統(tǒng)反而不能)。虛擬服務的設置數(shù)目沒有限制,每個虛擬服務有自己的服務器集。它支持持久的虛擬服務(如HTTP Cookie和HTTPS等需要該功能的支持),并提供詳盡的統(tǒng)計數(shù)據(jù),如連接的處理速率和報文的流量等。針對大規(guī)模拒絕服務(Deny of Service)攻擊,實現(xiàn)了三種防衛(wèi)策略。
•有基于內容請求分發(fā)的應用層交換軟件KTCPVS,它也是在Linux內核中實現(xiàn)。有相關的集群管理軟件對資源進行監(jiān)測,能及時將故障屏蔽,實現(xiàn)系統(tǒng)的高可用性。主、從調度器能周期性地進行狀態(tài)同步,從而實現(xiàn)更高的可用性。
2、在適用性上:
•后端服務器可運行任何支持TCP/IP的操作系統(tǒng),包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。
•負載調度器能夠支持絕大多數(shù)的TCP和UDP協(xié)議: | 協(xié) 議 | 內 容 | |--------|--------| | TCP | HTTP,F(xiàn)TP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等| UDP | DNS,NTP,ICP,視頻、音頻流播放協(xié)議等 |無需對客戶機和服務器作任何修改,可適用大多數(shù)Internet服務。
3、在性能上:
LVS服務器集群系統(tǒng)具有良好的伸縮性,可支持幾百萬個并發(fā)連接。配置100M網(wǎng)卡,采用VS/TUN或VS/DR調度技術,集群系統(tǒng)的吞吐量可高達1Gbits/s;如配置千兆網(wǎng)卡,則系統(tǒng)的最大吞吐量可接近10Gbits/s。
三、LVS 的工作框架
Linux Virtual Server 項目的目標:使用集群技術和 Linux 操作系統(tǒng)實現(xiàn)一個高性能、高可用的服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
LVS項目已提供了一個實現(xiàn)可伸縮網(wǎng)絡服務的Linux Virtual Server框架:
LVS_framework在LVS框架中,提供了含有三種IP負載均衡技術的IP虛擬服務器軟件:
•IPVS:實現(xiàn)IP負載均衡。在調度器的實現(xiàn)技術中,IP負載均衡技術是效率最高的,只需做到對數(shù)據(jù)包的分發(fā)。
•基于內容請求分發(fā)的內核 Layer-7 交換機 KTCPVS(Kernel TCP Virtual Server)
•集群管理軟件
四、LVS 的組成部分
LVS集群采用三層結構,三層主要組成部分為:
•負載調度器(load balancer),它是整個集群對外面的前端機,負責將客戶的請求發(fā)送到一組服務器上執(zhí)行,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的。
•服務器池(server pool),是一組真正執(zhí)行客戶請求的服務器,執(zhí)行的服務有 WEB、MAIL、FTP 和 DNS 等。
•共享存儲(shared storage),它為服務器池提供一個共享的存儲區(qū),這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
五、以軟件實現(xiàn)的負載均衡的方式:
有兩種方式:
•基于應用層負載均衡
•基于IP層負載均衡
基于應用層負載均衡:多臺服務器通過高速的互聯(lián)網(wǎng)絡連接成一個集群系統(tǒng),在前端有一個基于應用層的負載調度器。當用戶訪問請求到達調度器時,請求會提交給作負載均衡調度的應用程序,分析請求,根據(jù)各個服務器的負載情況,選出一臺服務器,重寫請求并向選出的服務器訪問,取得結果后,再返回給用戶。
典型的代表有 Nginx 以及 Apache 的 Rewrite 模塊。
應用層的負載均衡實現(xiàn)這樣強大的功能也會付出一定的代價:
•系統(tǒng)處理開銷較大,致使系統(tǒng)的伸縮性有限。
•基于應用層的負載均衡調度器對于不同的應用,需要寫不同的調度器。
基于 IP 層負載均衡:用戶通過虛擬 IP 地址(Virtual IP Address)訪問服務時,訪問請求的報文會到達負載調度器,由它進行負載均衡調度,從一組真實服務器選出一個,將報文處理并轉發(fā)給選定服務器的地址。實服務器的回應報文經(jīng)過負載調度器時,將報文的源地址和源端口改為 Virtual IP Address 和相應的端口,再把報文發(fā)給用戶。
而 IP 的負載技術有以下三種模式:
•通過NAT實現(xiàn)虛擬服務器(VS/NAT)
•通過IP隧道實現(xiàn)虛擬服務器(VS/TUN)
•通過直接路由實現(xiàn)虛擬服務器(VS/DR)
并且在調度器上配置了 8 種調度算法:
•輪叫(Round Robin):調度器通過"輪叫"調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數(shù)和系統(tǒng)負載。
•加權輪叫(Weighted Round Robin):調度器通過"加權輪叫"調度算法根據(jù)真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,并動態(tài)地調整其權值。
•最少鏈接(Least Connections):調度器通過"最少連接"調度算法動態(tài)地將網(wǎng)絡請求調度到已建立的鏈接數(shù)最少的服務器上。如果集群系統(tǒng)的真實服務器具有相近的系統(tǒng)性能,采用"最小連接"調度算法可以較好地均衡負載。
•加權最少鏈接(Weighted Least Connections):在集群系統(tǒng)中的服務器性能差異較大的情況下,調度器采用"加權最少鏈接"調度算法優(yōu)化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,并動態(tài)地調整其權值。
•基于局部性的最少鏈接(Locality-Based Least Connections):"基于局部性的最少鏈接" 調度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據(jù)請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發(fā)送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用"最少鏈接"的原則選出一個可用的服務 器,將請求發(fā)送到該服務器。
•帶復制的基于局部性最少鏈接(Locality-Based Least Connections with Replication):"帶復制的基于局部性最少鏈接"調度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法的不同之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據(jù)請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小連接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發(fā)送到該服務器,若服務器超載;則按"最小連接"原則從這個集群中選出一 臺服務器,將該服務器加入到服務器組中,將請求發(fā)送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的 程度。
•目標地址散列(Destination Hashing):"目標地址散列"調度算法根據(jù)請求的目標IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空。
•源地址散列(Source Hashing):"源地址散列"調度算法根據(jù)請求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空。
六、LVS 所提供的 IP 負載均衡的三種技術
1、VS/NAT 實現(xiàn)虛擬服務器
由于 IPv4 中 IP 地址空間的日益緊張和安全方面的原因,很多網(wǎng)絡使用保留 IP 地址(10.0.0.0/255.0.0.0、 172.16.0.0/255.128.0.0和192.168.0.0/255.255.0.0)。這些地址不在 Internet 上使用,而是專門為內部網(wǎng)絡預留的。
當內部網(wǎng)絡中的主機要訪問 Internet 或被 Internet 訪問時,就需要采用網(wǎng)絡地址轉換(Network Address Translation, 以下簡稱NAT),將內部地址轉化為 Internet 上可用的外部地址。
NAT 的工作原理是報文頭(目標地址、源地址和端口等)被正確改寫后,客戶相信 它們連接一個 IP 地址,而不同 IP 地址的服務器組也認為它們是與客戶直接相連的。由此,可以用 NAT 方法將不同 IP 地址的并行網(wǎng)絡服務變成在一個IP地址上的一個虛擬服務。
VS/NAT(Virtual Server via Network Address Translation)實現(xiàn)的虛擬服務器是這樣的一個結構,主要經(jīng)過這樣的一些步驟:
LVS-NAT•客戶端通過 Internet 向服務器發(fā)起請求,而請求的 IP 地址指向的是調度器上對外公布的 IP 地址;(因為它并不是真正處理請求的服務器 IP 地址,所以稱之為 虛擬 IP 地址,簡稱為 VIP,Virtual IP Address)
•請求報文到達調度器(Load Balancer),調度器根據(jù)調度算法從一組真實的服務器(因為他們是真正處理用戶請求的服務器,所以稱為真實服務器,Real server。其 IP 地址也被稱為真實 IP,簡稱為 RIP)中選出一臺當前負載不高的服務器。然后將客戶端的請求報文中的目標地址(Load Balancer 的 VIP)和端口通過 iptables 的 NAT 改寫為選定服務器的 IP 地址和服務的端口。最后將修改后的報文發(fā)送給選出的服務器。同時,調度器在連接Hash 表中記錄這個連接;當這個連接的下一個報文到達時,從連接Hash表中可以得到原選定服務器的地址和端口,進行同樣的改寫操作,并將報文傳給原選定的服務器。
•Real Server 接收到報文之后,做出了響應的處理,然后將響應的報文發(fā)送給 Load Balancer;
•Load Balancer 接收到響應的報文時,將報文的源地址和源端口改為Virtual IP Address和相應的端口,再把報文發(fā)給用戶。
這樣,客戶所看到的只是在 Virtual IP Address 上提供的服務,而服務器集群的結構對用戶是透明的。
下面,舉個例子來進一步說明VS/NAT,如圖所示:
NAT-egVS/NAT 的配置如下表所示,所有到IP地址為205.100.106.2和端口為80的流量都被負載均衡地調度的真實服務器172.16.1.3:80和 172.16.1.4:8080上。目標地址為205.100.106.2:21的報文被轉移到172.16.1.3:21上。而到其他端口的報文將被拒絕。
當客戶端訪問Web服務的時候,報文中可能有以下的源地址和目標地址:
報文到達調度器之后,調度器從調度列表中選出一臺服務器,例如是172.16.1.4:8080。該報文會被改寫為如下地址,并將它發(fā)送給選出的服務器。
Real Server 收到修改后的報文之后,做出響應,然后將響應報文返回到調度器,報文如下:
響應報文的源地址會被 Load Balacer 改寫為虛擬服務的地址,再將報文發(fā)送給客戶:
這樣,客戶認為是從202.103.106.5:80服務得到正確的響應,而不會知道該請求是 Real Server1 還是 Real Server2 處理的。
這便是 VS/NAT 的處理數(shù)據(jù)包的整個過程,它有這樣的一些特點:
•集群節(jié)點,也就是 Real Server 與 Load Balacer 必須在同一個 IP 網(wǎng)絡中
•Load Balancer 位于 Real Server 與客戶端之間,處理進出的所有通信
•RIP 通常是私有地址,僅用于各個集群節(jié)點之間的通信。
•Real Server 的網(wǎng)關必須指向 Load Balancer
•支持端口映射:也就是Real Server 的端口可以自己設定,沒有必須是與 Load Balancer 一樣
VS/NAT 的優(yōu)勢在于可以做到端口映射,但是 Load Balancer 將可能成為集群的瓶頸。因為所有的出入報文都需要 Load Balancer 處理,請求報文較小不是問題,但是響應報文往往較大,都需要 NAT 轉換的話,大流量的時候,Load Balancer 將會處理不過來。一般使用 VS/NAT 的話,處理 Real Server 數(shù)量達到 10~20 臺左右將是極限,并且效率往往不高。
2、VS/DR 實現(xiàn)虛擬服務器
在VS/NAT 的集群系統(tǒng)中,請求和響應的數(shù)據(jù)報文都需要通過負載調度器,當真實服務器的數(shù)目在10臺和20臺之間時,負載調度器將成為整個集群系統(tǒng)的新瓶頸。大多數(shù) Internet服務都有這樣的特點:請求報文較短而響應報文往往包含大量的數(shù)據(jù)。
既然同時處理進出報文會大大的影響效率,增加機器的負載,那么若是僅僅處理進來的報文,即在負載調度器中只負責調度請求,而出去的報文由 Real Server 直接發(fā)給客戶端這樣豈不是高效許多。
VS/DR(Virtual Server via Direct Routing)利用大多數(shù)Internet服務的非對稱特點,負載調度器中只負責調度請求,而服務器直接將響應返回給客戶,可以極大地提高整個集群 系統(tǒng)的吞吐量。
VS/DR 實現(xiàn)的虛擬服務器是這樣的一個結構,主要經(jīng)過這樣的一些步驟:
DR-sturct•客戶端通過 Internet 向服務器發(fā)起請求,而請求的 IP 地址指向的是調度器上對外公布的 IP 地址;
•請求報文到達調度器(Load Balancer),調度器根據(jù)各個服務器的負載情況,動態(tài)地選擇一臺服務器,不修改也不封裝IP報文,而是將數(shù)據(jù)幀的MAC地址改為選出服務器的MAC地址,再將修改后 的數(shù)據(jù)幀在與服務器組的局域網(wǎng)上發(fā)送。因為數(shù)據(jù)幀的MAC地址是選出的服務器,所以服務器肯定可以收到這個數(shù)據(jù)幀;
•Real Server 接收到報文之后,發(fā)現(xiàn)報文的目標地址 VIP 是在本地的網(wǎng)絡設備上,服務器處理這個報文,然后根據(jù)路由表將響應報文直接返回給客戶。
change-MAC在VS/DR中,根據(jù)缺省的TCP/IP協(xié)議棧處理,請求報文的目標地址為VIP,響應報文的源地址肯定也為VIP,所以響應報文不需要作任何修改,可以直接返回給客戶,客戶認為得到正常的服務,而不會知道是哪一臺服務器處理的。
這便是 VS/DR 的處理數(shù)據(jù)包的整個過程,它有這樣的一些特點:
•集群節(jié)點,也就是 Real Server 與 Load Balacer 必須在同一個物理網(wǎng)絡中(若是不同網(wǎng)段的話結構將變得復雜)
•RIP 通常是私有地址,也可以是公網(wǎng)地址,以便于遠程管理與監(jiān)控。
•Load Balancer 僅僅負責處理入站的請求,Real Server 將直接響應客戶端
•Real Server 的網(wǎng)關不能指向 Load Balancer
•不支持端口映射:也就是Real Server 的端口必須是與 Load Balancer 對外服務的一樣
3、VS/TUN 實現(xiàn)虛擬服務器
VS/DR 限制 Real Server 與 Load Balancer 必須在同一個物理網(wǎng)絡中,那若是分散在各地豈不是無法使用?所以有了 VS/TUN(Virtual Server via IP Tunneling)的誕生。
IP隧道(IP tunneling)是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的數(shù)據(jù)報文能被封裝和轉發(fā)到另一個IP地址。IP隧道技術亦稱為IP封裝技術(IP encapsulation)。IP隧道主要用于移動主機和虛擬私有網(wǎng)絡(Virtual Private Network),在其中隧道都是靜態(tài)建立的,隧道一端有一個IP地址,另一端也有唯一的IP地址。
我們利用IP隧道技術將請求報文封裝轉發(fā)給后端服務器,響應報文能從后端服務器直接返回給客戶。但在這里,后端服務器有一組而非一個,所以我們不可能靜態(tài)地建立一一對應的隧道,而是動態(tài)地選擇 一臺服務器,將請求報文封裝和轉發(fā)給選出的服務器。這樣,我們可以利用IP隧道的原理將一組服務器上的網(wǎng)絡服務組成在一個IP地址上的虛擬網(wǎng)絡服務。 VS/TUN的體系結構如圖所示,各個服務器將VIP地址配置在自己的IP隧道設備上。
Tunnel-sturct它的連接調度和管理與VS/NAT中的一樣,只是它的報文轉發(fā)方法不同。調度器根據(jù)各個服務器的負載情況,動態(tài)地選擇一臺服務器, 將請求報文封裝在另一個 IP 報文中,再將封裝后的 IP 報文轉發(fā)給選出的服務器;服務器收到報文后,先將報文解封獲得原來目標地址為 VI P的報文,服務器發(fā)現(xiàn)VIP地址被配置在本地的 IP隧道設備上,所以就處理這個請求,然后根據(jù)路由表將響應報文直接返回給客戶。
這便是 VS/TUN 的處理數(shù)據(jù)包的整個過程,它有這樣的一些特點:
•集群節(jié)點,也就是 Real Server 與 Load Balacer 可以跨越公網(wǎng)
•RIP 必須是公網(wǎng)地址。
•Load Balancer 僅僅負責處理入站的請求,Real Server 將直接響應客戶端
•Real Server 的網(wǎng)關不能指向 Load Balancer
•不支持端口映射:也就是Real Server 的端口必須是與 Load Balancer 對外服務的一樣
這便是 LVS 所提供的 IP 負載均衡的三種技術,我們可以根據(jù)自己的情況做出不同的選擇。
核心關注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務領域、行業(yè)應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業(yè)務領域的管理,全面涵蓋了企業(yè)關注ERP管理系統(tǒng)的核心領域,是眾多中小企業(yè)信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標題:漫談 LVS (Linux虛擬服務器)
本文網(wǎng)址:http://www.ezxoed.cn/html/support/11121521060.html