1. 程式人生 > >叢集簡介

叢集簡介

什麼是叢集

計算機叢集簡稱叢集是一種計算機系統,它通過一組鬆散整合的計算機軟體和/或硬體連線起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺計算機。集群系統中的單個計算機通常稱為節點,通常通過區域網連線,但也有其它的可能連線方式。叢集計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下叢集計算機比單個計算機,比如工作站或超級計算機效能價格比要高得多。

叢集就是一組獨立的計算機,通過網路連線組合成一個組合來共同完一個任務

LVS在企業架構中的位置:

wKioL1LGoRfS_Tz5AAEh9JYXHms713.jpg

以上的架構只是眾多企業裡面的一種而已。綠色的線就是使用者訪問請求的資料流向。使用者-->LVS負載均衡伺服器--->apahce伺服器--->mysql伺服器&memcache伺服器&共享儲存伺服器。並且我們的mysql、共享儲存也能夠使用LVS再進行負載均衡。

---------------小結-------------------------

叢集:就是一組相互獨立的計算機,通過高速的網路組成一個計算機系統,每個叢集節點都是執行其自己程序的一個獨立伺服器。對網路使用者來講,網站後端就是一個單一的系統,協同起來向用戶提供系統資源,系統服務。

-------------------------------------------

為什麼要使用叢集

叢集的特點

1)高效能performance。一些需要很強的運算處理能力比如天氣預報,核試驗等。這就不是幾臺計算機能夠搞定的。這需要上千臺一起來完成這個工作的。

2)價格有效性

通常一套系統叢集架構,只需要幾臺或數十臺伺服器主機即可,與動則上百王的專用超級計算機具有更高的價效比。

3)可伸縮性

當伺服器負載壓力增長的時候,系統能夠擴充套件來滿足需求,且不降低服務質量。

4)高可用性

儘管部分硬體和軟體發生故障,整個系統的服務必須是7*24小時執行的。

叢集的優勢

1)透明性

如果一部分伺服器宕機了業務不受影響,一般耦合度沒有那麼高,依賴關係沒有那麼高。比如NFS伺服器宕機了其他就掛載不了了,這樣依賴性太強。

2)高效能

訪問量增加,能夠輕鬆擴充套件。

3)可管理性

整個系統可能在物理上很大,但很容易管理。

4)可程式設計性

在集群系統上,容易開發應用程式,入口網站會要求這個。

叢集分類及不同分類的特點

計算機叢集架構按照功能和結構一般分成以下幾類:

1)負載均衡叢集(Loadbalancingclusters)簡稱LBC

2)高可用性叢集(High-availabilityclusters)簡稱HAC

3)高效能運算叢集(High-perfomanceclusters)簡稱HPC

4)網格計算(Gridcomputing)

網路上面一般認為是有三個,負載均衡和高可用叢集式我們網際網路行業常用的叢集架構。

(1)負載均衡叢集

負載均衡叢集為企業提供了更為實用,價效比更高的系統架構解決方案。負載均衡叢集把很多客戶集中訪問的請求負載壓力可能儘可能平均的分攤到計算機叢集中處理。客戶請求負載通常包括應用程度處理負載和網路流量負載。這樣的系統非常適合向使用同一組應用程式為大量使用者提供服務。每個節點都可以承擔一定的訪問請求負載壓力,並且可以實現訪問請求在各節點之間動態分配,以實現負載均衡。

負載均衡執行時,一般通過一個或多個前端負載均衡器將客戶訪問請求分發到後端一組伺服器上,從而達到整個系統的高效能和高可用性。這樣計算機叢集有時也被稱為伺服器群。一般高可用性叢集和負載均衡叢集會使用類似的技術,或同時具有高可用性與負載均衡的特點。

負載均衡叢集的作用

1)分擔訪問流量(負載均衡)

2)保持業務的連續性(高可用)

(2)高可用性叢集

一般是指當叢集中的任意一個節點失效的情況下,節點上的所有任務自動轉移到其他正常的節點上,並且此過程不影響整個叢集的執行,不影響業務的提供。

類似是叢集中執行著兩個或兩個以上的一樣的節點,當某個主節點出現故障的時候,那麼其他作為從 節點的節點就會接替主節點上面的任務。從節點可以接管主節點的資源(IP地址,架構身份等),此時使用者不會發現提供服務的物件從主節點轉移到從節點。

高可用性叢集的作用:當一個機器宕機另一臺進行接管。比較常用的高可用叢集開源軟體有:keepalive,heardbeat。

(3)高效能運算叢集

高效能運算叢集採用將計算任務分配到叢集的不同計算節點兒提高計算能力,因而主要應用在科學計算領域。比較流行的HPC採用Linux作業系統和其它一些免費軟體來完成並行運算。這一叢集配置通常被稱為Beowulf叢集。這類叢集通常執行特定的程式以發揮HPCcluster的並行能力。這類程式一般應用特定的執行庫, 比如專為科學計算設計的MPI庫。

HPC叢集特別適合於在計算中各計算節點之間發生大量資料通訊的計算作業,比如一個節點的中間結果或影響到其它節點計算結果的情況。

常用叢集軟硬體

常用開源叢集軟體有:lvs,keepalived,haproxy,nginx,apache,heartbeat

常用商業叢集硬體有:F5,Netscaler,Radware,A10等

二、LVS負載均衡叢集介紹

負載均衡叢集的作用:提供一種廉價、有效、透明的方法,來擴充套件網路裝置和伺服器的負載頻寬、增加吞吐量,加強網路資料處理能力、提高網路的靈活性和可用性。

1)把單臺計算機無法承受的大規模的併發訪問或資料流量分擔到多臺節點裝置上分別處理,減少使用者等待響應的時間,提升使用者體驗。

2)單個重負載的運算分擔到多臺節點裝置上做並行處理,每個節點裝置處理結束後,將結果彙總,返回給使用者,系統處理能力得到大幅度提高。

3)7*24小時的服務保證,任意一個或多個裝置節點裝置宕機,不能影響到業務。在負載均衡叢集中,所有計算機節點都應該提供相同的服務,叢集負載均衡獲取所有對該服務的如站請求。

LVS介紹

LVS是linux virtual server的簡寫linux虛擬伺服器,是一個虛擬的伺服器集群系統,可以再unix/linux平臺下實現負載均衡叢集功能。該專案在1998年5月由章文嵩博士組織成立。

以下是LVS官網提供的4篇文章:(非常詳細,我覺得有興趣還是看官方文件比較正宗吧!!)

http://www.linuxvirtualserver.org/zh/lvs1.html

http://www.linuxvirtualserver.org/zh/lvs2.html

http://www.linuxvirtualserver.org/zh/lvs3.html

http://www.linuxvirtualserver.org/zh/lvs4.html

IPVS發展史

早在2.2核心時,IPVS就已經以核心補丁的形式出現。

從2.4.23版本開始ipvs軟體就是合併到linux核心的常用版本的核心補丁的集合。

從2.4.24以後IPVS已經成為linux官方標準核心的一部分

wKiom1LGrKuxojHxAABTg9rB80U010.jpg

從上圖可以看出lpvs是工作在核心層,我們不能夠直接操作ipvs,vs負載均衡排程技術是在linux核心中實現的。因此,被稱之為linux虛擬伺服器。我們使用該軟體配置lvs的時候,不能直接配置核心中的ipvs,而需要使用ipvs的管理工具ipvsadm進行管理。通過keepalived也可以管理LVS。

LVS體系結構與工作原理簡單描述

LVS叢集負載均衡器接受服務的所有入展客戶端的請求,然後根據排程演算法決定哪個叢集節點來處理回覆客戶端的請求。

LVS虛擬伺服器的體系如下圖所示,一組伺服器通過高速的區域網或者地理分佈的廣域網相互連線,在這組伺服器之前有一個負載排程器(load balance)。負載排程器負責將客戶的請求排程到真實伺服器上。這樣這組伺服器叢集的結構對使用者來說就是透明的。客戶訪問集群系統就如只是訪問一臺高效能,高可用的伺服器一樣。客戶程式不受伺服器叢集的影響,不做任何修改。

就比如說:我們去飯店吃飯點菜,客戶只要跟服務員點菜就行。並不需要知道具體他們是怎麼分配工作的,所以他們內部對於我們來說是透明的。此時這個服務員就會按照一定的規則把他手上的活,分配到其他人員上去。這個服務員就是負載均衡器(LB)而後面這些真正做事的就是伺服器叢集。

底下是官網提供的結構圖:

wKioL1LGsFuCVbDfAABKwMSg02M361.jpg

LVS的基本工作過程

wKiom1LGs2aiFMCiAACVgmdzolA041.jpg

客戶請傳送向負載均衡伺服器傳送請求。負載均衡器接受客戶的請求,然後先是根據LVS的排程演算法(8種)來決定要將這個請求傳送給哪個節點伺服器。然後依據自己的工作模式(3種)來看應該如何把這些客戶的請求如何傳送給節點伺服器,節點伺服器又應該如何來把響應資料包發回給客戶端。

恩,那這樣我們就只要接下來搞懂LVS的3中工作模式,8種排程演算法就可以了。

LVS的三種工作模式:

1)VS/NAT模式(Network address translation)

2)VS/TUN模式(tunneling)

3)DR模式(Direct routing)

1、NAT模式-網路地址轉換

Virtualserver via Network address translation(VS/NAT)

這個是通過網路地址轉換的方法來實現排程的。首先排程器(LB)接收到客戶的請求資料包時(請求的目的IP為VIP),根據排程演算法決定將請求傳送給哪個後端的真實伺服器(RS)。然後排程就把客戶端傳送的請求資料包的目標IP地址及埠改成後端真實伺服器的IP地址(RIP),這樣真實伺服器(RS)就能夠接收到客戶的請求資料包了。真實伺服器響應完請求後,檢視預設路由(NAT模式下我們需要把RS的預設路由設定為LB伺服器。)把響應後的資料包傳送給LB,LB再接收到響應包後,把包的源地址改成虛擬地址(VIP)然後傳送回給客戶端。

排程過程IP包詳細圖:

wKioL1LGtuPgfTPhAACR9zrpGoA392.jpg

原理圖簡述:

1)客戶端請求資料,目標IP為VIP

2)請求資料到達LB伺服器,LB根據排程演算法將目的地址修改為RIP地址及對應埠(此RIP地址是根據排程演算法得出的。)並在連線HASH表中記錄下這個連線。

3)資料包從LB伺服器到達RS伺服器webserver,然後webserver進行響應。Webserver的閘道器必須是LB,然後將資料返回給LB伺服器。

4)收到RS的返回後的資料,根據連線HASH表修改源地址VIP&目標地址CIP,及對應埠80.然後資料就從LB出發到達客戶端。

5)客戶端收到的就只能看到VIP\DIP資訊。

NAT模式優缺點:

1、NAT技術將請求的報文和響應的報文都需要通過LB進行地址改寫,因此網站訪問量比較大的時候LB負載均衡排程器有比較大的瓶頸,一般要求最多之能10-20臺節點

2、只需要在LB上配置一個公網IP地址就可以了。

3、每臺內部的節點伺服器的閘道器地址必須是排程器LB的內網地址。

4、NAT模式支援對IP地址和埠進行轉換。即使用者請求的埠和真實伺服器的埠可以不一致。

2、TUN模式

virtual server via ip tunneling模式:採用NAT模式時,由於請求和響應的報文必須通過排程器地址重寫,當客戶請求越來越多時,排程器處理能力將成為瓶頸。為了解決這個問題,排程器把請求的報文通過IP隧道轉發到真實的伺服器。真實的伺服器將響應處理後的資料直接返回給客戶端。這樣排程器就只處理請求入站報文,由於一般網路服務應答資料比請求報文大很多,採用VS/TUN模式後,集群系統的最大吞吐量可以提高10倍。

VS/TUN的工作流程圖如下所示,它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP地址。而是把客戶請求包封裝在一個IP tunnel裡面,然後傳送給RS節點伺服器,節點伺服器接收到之後解開IP tunnel後,進行響應處理。並且直接把包通過自己的外網地址傳送給客戶不用經過LB伺服器。

Tunnel原理流程圖:

wKiom1LGucKhEi7iAAB3ZsJ19uw170.jpg

原理圖過程簡述:

1)客戶請求資料包,目標地址VIP傳送到LB上。

2)LB接收到客戶請求包,進行IP Tunnel封裝。即在原有的包頭加上IP Tunnel的包頭。然後傳送出去。

3)RS節點伺服器根據IP Tunnel包頭資訊(此時就又一種邏輯上的隱形隧道,只有LB和RS之間懂)收到請求包,然後解開IP Tunnel包頭資訊,得到客戶的請求包並進行響應處理。

4)響應處理完畢之後,RS伺服器使用自己的出公網的線路,將這個響應資料包傳送給客戶端。源IP地址還是VIP地址。(RS節點伺服器需要在本地迴環介面配置VIP,後續會講)

3、DR模式(直接路由模式)

Virtual server via direct routing (vs/dr)

DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實伺服器的,而真實伺服器響應後的處理結果直接返回給客戶端使用者。同TUN模式一樣,DR模式可以極大的提高集群系統的伸縮性。而且DR模式沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必要必須支援IP隧道協議的要求。但是要求排程器LB與真實伺服器RS都有一塊網絡卡連線到同一物理網段上,必須在同一個區域網環境。

DR模式是網際網路使用比較多的一種模式。

DR模式原理圖:

wKioL1LI1dqyFjlyAAC0xTSJtmo980.jpg

DR模式原理過程簡述:

VS/DR模式的工作流程圖如上圖所示,它的連線排程和管理與NAT和TUN中的一樣,它的報文轉發方法和前兩種不同。DR模式將報文直接路由給目標真實伺服器。在DR模式中,排程器根據各個真實伺服器的負載情況,連線數多少等,動態地選擇一臺伺服器,不修改目標IP地址和目標埠,也不封裝IP報文,而是將請求報文的資料幀的目標MAC地址改為真實伺服器的MAC地址。然後再將修改的資料幀在伺服器組的區域網上傳送。因為資料幀的MAC地址是真實伺服器的MAC地址,並且又在同一個區域網。那麼根據區域網的通訊原理,真實復位是一定能夠收到由LB發出的資料包。真實伺服器接收到請求資料包的時候,解開IP包頭檢視到的目標IP是VIP。(此時只有自己的IP符合目標IP才會接收進來,所以我們需要在本地的迴環藉口上面配置VIP。另:由於網路介面都會進行ARP廣播響應,但叢集的其他機器都有這個VIP的lo介面,都響應就會衝突。所以我們需要把真實伺服器的lo介面的ARP響應關閉掉。)然後真實伺服器做成請求響應,之後根據自己的路由資訊將這個響應資料包傳送回給客戶,並且源IP地址還是VIP。

DR模式小結:

1、通過在排程器LB上修改資料包的目的MAC地址實現轉發。注意源地址仍然是CIP,目的地址仍然是VIP地址。

2、請求的報文經過排程器,而RS響應處理後的報文無需經過排程器LB,因此併發訪問量大時使用效率很高(和NAT模式比)

3、因為DR模式是通過MAC地址改寫機制實現轉發,因此所有RS節點和排程器LB只能在一個局域網裡面

4、RS主機需要繫結VIP地址在LO介面上,並且需要配置ARP抑制。

5、RS節點的預設閘道器不需要配置成LB,而是直接配置為上級路由的閘道器,能讓RS直接出網就可以。

6、由於DR模式的排程器僅做MAC地址的改寫,所以排程器LB就不能改寫目標埠,那麼RS伺服器就得使用和VIP相同的埠提供服務。

官方三種負載均衡技術比較總結表:

工作模式

VS/NAT

VS/TUN

VS/DR

Real server

(節點伺服器)

Config dr gw

Tunneling

Non-arp device/tie vip

Server Network

Private

LAN/WAN

LAN

Server number

(節點數量)

Low 10-20

High 100

High 100

Real server gateway

Load balance

Own router

Own router

優點

地址和埠轉換

Wan環境加密資料

效能最高

缺點

效率低

需要隧道支援

不能跨域LAN

LVS排程演算法

最好參考此文章:http://www.linuxvirtualserver.org/zh/lvs4.html

Lvs的排程演算法決定了如何在叢集節點之間分佈工作負荷。當director排程器收到來自客戶端訪問VIP的上的叢集服務的入站請求時,director排程器必須決定哪個叢集節點應該處理請求。Director排程器用的排程方法基本分為兩類:

固定排程演算法:rr,wrr,dh,sh

動態排程演算法:wlc,lc,lblc,lblcr

演算法

說明

rr

輪詢演算法,它將請求依次分配給不同的rs節點,也就是RS節點中均攤分配。這種演算法簡單,但只適合於RS節點處理效能差不多的情況

wrr

加權輪訓排程,它將依據不同RS的權值分配任務。權值較高的RS將優先獲得任務,並且分配到的連線數將比權值低的RS更多。相同權值的RS得到相同數目的連線數。

Wlc

加權最小連線數排程,假設各臺RS的全職依次為Wi,當前tcp連線數依次為Ti,依次去Ti/Wi為最小的RS作為下一個分配的RS

Dh

目的地址雜湊排程(destination hashing)以目的地址為關鍵字查詢一個靜態hash表來獲得需要的RS

SH

源地址雜湊排程(source hashing)以源地址為關鍵字查詢一個靜態hash表來獲得需要的RS

Lc

最小連線數排程(least-connection),IPVS表儲存了所有活動的連線。LB會比較將連線請求傳送到當前連線最少的RS.

Lblc

基於地址的最小連線數排程(locality-based least-connection):將來自同一個目的地址的請求分配給同一臺RS,此時這臺伺服器是尚未滿負荷的。否則就將這個請求分配給連線數最小的RS,並以它作為下一次分配的首先考慮。

LVS排程演算法的生產環境選型:

1、一般的網路服務,如http,mail,mysql等常用的LVS排程演算法為:

a.基本輪詢排程rr

b.加權最小連線排程wlc

c.加權輪詢排程wrc

2、基於區域性性的最小連線lblc和帶複製的給予區域性性最小連線lblcr主要適用於web cache和DB cache

3、源地址雜湊排程SH和目標地址雜湊排程DH可以結合使用在防火牆叢集中,可以保證整個系統的出入口唯一。

實際適用中這些演算法的適用範圍很多,工作中最好參考核心中的連線排程演算法的實現原理,然後根據具體的業務需求合理的選型。

-----------------後續自我小結--------------------------------------------------

基本上lvs的原理部分就到這裡,個人還是覺得像要對LVS有一個比較全面的認識,還是需要去將官方文件認真的看過一遍。主要部分還是在於3種工作方式和8種排程演算法。以及實際工作種什麼樣的生產環境適用哪種排程演算法。