運維工程師必備之負載 均衡集羣及LVS詳解

原文地址:運維工程師必備之負載 均衡集羣及LVS詳解作者:蟻巡運維平臺

來源: chrinux 的BLOG

   

時間: 2013-07-01 14:00

此博文主要介紹集羣和負載均衡的基本理論和類別,內容看着比較枯燥、無味的,但是要想成爲一個好的linux

運維工程師,這些基本理論是必須理解透徹,纔會在後來的系統調優和集羣架構中得心應手,所以想成爲linux

運維工程師的我們必須承受得住寂寞,努力學習吧!

一、集羣簡介

集羣並不是一個全新的概念,其實早在七十年代計算機廠商和研究機構就開始了對集羣系統的研究和開發。由於

主要用於科學工程計算,所以這些系統並不爲大家所熟知。直到Linux集羣的出現,集羣的概念才得以廣爲傳播。

集羣系統主要分爲高可用(High Availability)集羣,簡稱 HA集羣,和高性能計算(High PerfermanceCompu

ting)集羣,簡稱 HPC 集羣。計算機集羣簡稱集羣是一種計算機系統, 它通過一組鬆散集成的計算機軟件或硬

件連接起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺計算機。集羣系統中的單個計

算機通常稱爲節點,通常通過局域網連接,但也有其它的可能連接方式。集羣計算機通常用來改進單個計算機的

計算速度和/或可靠性。一般情況下集羣計算機比單個計算機,比如工作站或超級計算機性能價格比要高得多。

二、集羣分類

集羣分爲同構與異構兩種,它們的區別在於:組成集羣系統的計算機之間的體系結構是否相同。集羣計算機按功

能和結構可以分成以下幾類:

負載均衡集羣LB:Loadbalancingclusters

高可用性集羣HA:High-availability(HA)clusters

高性能計算集羣HP:High-performance(HPC)clusters

網格計算Gridcomputing

三、各種集羣定義詳解

⑴負載均衡集羣-LB

負載均衡集羣運行時,一般通過一個或者多個前端負載均衡器,將工作負載分發到後端的一組服務器上,從而達

到整個系統的高性能和高可用性。這樣的計算機集羣有時也被稱爲服務器羣(Server Farm)。 一般高可用性

集羣和負載均衡集羣會使用類似的技術,或同時具有高可用性與負載均衡的特點。linux虛擬服務器(LVS)項目

在linux操作系統上提供了最常見的負載均衡軟件。LB在提供負載均衡的時候,如果提供的是DNS負載均衡,由

於DNS緩存服務存在的機制,造成負載均衡的效果會大打折扣。所以在此出現了調度方法,常用的有兩個調度。

方法:RR:Round Robin 論調WRR:Weight Round Robin 加權論調負載均衡:以提高服務的併發能力爲

集羣的重點的集羣衡量標準:併發處理能力

⑵高可用性集羣-HA

一般是指當集羣中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以將集羣中的

某節點進行離線維護再上線,該過程並不影響整個集羣的運行。高可用集羣:爲了保證服務一直在線的高可用能

力的集羣衡量標準:可用性=在線時間/(在線時間+故障處理時間)

⑶高性能計算集羣-HP 

“高性能處理集羣:利用的是分佈式存儲:分佈式文件系統,分佈式文件系統把一個大任務切割爲小任務、分別

進行處理。”高性能計算集羣採用將計算任務分配到集羣的不同計算節點而提高計算能力,因而主要應用在科學

計算領域。比較流行的HPC採用Linux操作系統和其它一些免費軟件來完成並行運算。這一集羣配置通常被稱爲

Beowulf集羣。這類集羣通常運行特定的程序以發揮HPC cluster的並行能力。這類程序一般應用特定的運行庫

, 比如專爲科學計算設計的MPI庫。HPC集羣特別適合於在計算中各計算節點之間發生大量數據通訊的計算作業

,比如一個節點的中間結果或影響到其它節點計算結果的情況。高性能處理集羣:利用的是分佈式存儲:分佈式

文件系統,分佈式文件系統把一個大任務分割爲小任務、分別進行處理。

⑷網格計算

網格計算或網格集羣是一種與集羣計算非常相關的技術。網格與傳統集羣的主要差別是網格是連接一組相關並不

信任的計算機,它的運作更像一個計算公共設施而不是一個獨立的計算機。還有,網格通常比集羣支持更多不同

類型的計算機集合。網格計算是針對有許多獨立作業的工作任務作優化,在計算過程中作業間無需共享數據。

網格主要服務於管理在獨立執行工作的計算機間的作業分配。資源如存儲可以被所有結點共享,但作業的中間結

果不會影響在其他網格結點上作業的進展。

四、LB集羣詳解

1、負載均衡器設備類型:分爲硬件和軟件兩種:

硬件設備:

F5的BIG IP負載均衡器

Citrix的Netscaler負載均衡器A10

軟件:分爲基於四層和七層的兩種類型四層:lvs是一個開源的軟件,由畢業於國防科技大學的章文嵩博士於199

8年5月創立的,可以實現LINUX平臺下的簡單負載均衡。LVS是LinuxVirtual Server的縮寫,意思是Linux虛

擬服務器。七層:反向代理

Nginx:支持http,pop3,smtp,imap

haproxy:支持http,tcp(mysql,smtp)

五、LVS詳解

由於硬件設備價格比較高,動則上萬、幾十萬刀,所以一般的小公司所使用的還是基於軟件的架構方式來實現集

羣的。當然,只要掌握了linux下基於軟件的集羣架構,其他基於硬件的架構配置也都大同小異,由於硬件的缺乏

,目前還是小菜鳥一個,公司內部的設備還沒見過是神馬模樣!所以在此就着重介紹一下我們linux系統下基於

LVS架構的集羣的搭建,當然,這也是我們作爲linux運維人員必須掌握的重中之重,下面我們進入正題吧!

自己理解,如有錯誤還望各位大神們不吝賜教~~

①LVS基本解釋

lvs是一個開源的軟件,由畢業於國防科技大學的章文嵩博士於1998年5月創立的,可以實現LINUX平臺下的簡

單負載均衡。LVS是LinuxVirtual Server的縮寫,意思是Linux虛擬服務器。這是國人在開源上作出的最大貢

獻~我們爲此驕傲、自豪!嘿嘿——說多了,中國在開源上面的貢獻好像還真是少之又少啊~~望各位大神們多

做貢獻,天朝還是可以出現大神的!-嘮多了,下面接着咱們的LVS。LVS是linux系統上的一種機制,類似於

iptables似,其相關屬性也是通過與iptables命令類似的方式定義的,等會會詳細介紹。

“每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隱藏的,就是不能提高解析等功能,只是用來做請求

回覆的源IP的,Director上只需要一個網卡,然後利用別名來配置兩個IP:VIP和DIP。"

LVS是工作於內核上的,通過內核來提供工作,其工作空間在iptables的INPUT鏈上,當客戶端請求到達INPU

T鏈上以後,通過LVS的驗證如果是關於lvs的請求,則在此直接修改目標地址,然後通過postrouting鏈傳送給

其定義的server!注意:上面提到LVS其實是工作在iptables的INPUT和POSTROUTING鏈上的,所

以在此係統上iptables和LVS不能同時存在。LVS的組成:ipvsadm:管理集羣服務的命令行工具,工作於用戶

空間ipvs:爲lvs提供服務的內核模塊,工作於內核空間在linux內核2.4.23之前的內核中模塊默認是不存在的,

需要自己手動打補丁,然後把此模塊編譯進內核纔可以正常使用。

②LVS類型

爲了便於表述下面的內容,在此插幾句關於相關服務和名詞的定義:

Director:複製調度集羣的主機

VIP:Virtual IP,向外提供服務的IP

RIP:real IP,內部真的提供服務的主機IP

DIP:向內部的IP通信的IP,在Director主機上

CIP:客戶端IP

⑴、 NAT:地址轉換類型,主要是做目標地址轉換,類似於iptables的DNAT。

優點:多目標的NAT轉換,能夠實現負載均衡,一個Director最多額可以提供10個Real Server主機。

特點和要求:

1、LVS上面需要雙網卡:DIP和VIP 

2、內網的Real Server主機的IP必須和DIP在同一網絡中,並且其網關需要指向DIP的地址

3、RIP地址都是私有IP地址,僅用於各個集節點之間通信

4、Director位於client和Real Server之間,並負責處理所有進站、出戰的通信。

5、Real Server必須將網關指向DIP

6、支持端口映射

7、通常應用在較大規模應用場景中,但是Director易成爲整個架構的瓶頸。

⑵、 DR:DIRECT ROUTE,直接路由

1、架構組成:

每個Real Server上都有兩個IP:VIP和RIP,但是VIP是隱藏的,就是不能提高解析等功能,只是用來做請求回

復的源IP的,Director上只需要一個網卡,然後利用別名來配置兩個IP:VIP和DIP。

2、Director在接受到外部主機的請求的時候轉發給Real Server的時候並不更改目標地址,只是通過arp解析

的MAC地址進行封裝然後轉給RealServer,Real Server在接受到信息以後拆除MAC幀封裝,然後直接回復

給CIP。

3、企業中最常用的就是DR

特點和要求:

1、各個集羣節點必須和Director在同一個物理網絡中

2、RIP地址不能爲私有地址,可以實現便捷的遠程管理和監控

3、Director僅僅負責處理入站請求,響應報文則由Real Server直接發往客戶端

4、集羣節點Real Server 的網關一定不能指向DIP,而是指向外部路由 

“ 輪叫調度算法假設所有服務器處理性能均相同,不管服務器的當前連接數和響應速度。該算法相對簡單,不

適用於服務器組中處理性能不一的情況。”

5、Director不支持端口映射

6、Director能夠支持比NAT多很多的Real

Server

⑶、TUN:隧道

1、架構

Director必須有兩個IP:VIP和DIP,在向外部進行轉發的時候CIP和VIP不能更改,而是在數據報文的外面加層

封裝(S:DIP,D:RIP),然後通過Internet傳送給外部的Real Server,Real Server接收到請求以後,先拆除第

一層封裝後拆除第二層封裝,然後把響應數據直接傳輸給Client。

2、特性:

?集羣節點可以跨越Internet

?Director的VIP和RIP必須爲公網IP

?Director僅處理入站請求,響應報文則由RealServer直接發往客戶端

?Real Server的網關不能指向Director

?只有支持隧道協議功能的OS才能作爲RealServer

?不支持端口映射

六、LVS的調度方法:分爲靜態和動態調度靜態調度:

1、輪叫調度: Round-Robin Scheduling,簡稱RR,輪叫調度就是以輪叫的方式請求不同的服務器,算法的

優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。輪叫調度算法假設所有服務器處

理性能均相同,不管服務器的當前連接數和響應速度。該算法相對簡單,不適用於服務器組中處理性能不一的情

況,而且當請求服務時間變化比較大時,輪叫調度算法容易導致服務器間的負載不平衡。

2、加權輪叫調度(Weighted Round-RobinScheduling),加權輪叫,簡稱WRR。該算法可以解決服務器間

性能不一的情況,它用相應的權值表示服務器的處理性能,服務器的缺省權值爲1。假設服務器A的權值爲1,B的

權值爲2,則表示服務器B的處理性能是A的兩倍。加權輪叫調度算法是按權值的高低和輪叫方式分配請求到各服

務器。權值高的服務器先收到的連接,權值高的服務器比權值低的服務器處理更多的連接,相同權值的服務器處

理相同數目的連接數。

3、源地址散列調度(Source  Hashing  Scheduling),源地址散列,簡稱SH。源地址散列調度算法正好與

目標地址散列調度算法相反,它根據請求的源IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應

的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。它採用的散列函數與目標地

址散列調度算法的相同。  通過源地址hash,使來自於同一個客戶端的請求,都轉發給同一個Real Server,

這樣來保證cookie與session進行會話綁定。

4、目標地址散列調度(Destination  Hashing  Scheduling),目標地址散列,簡稱DH。目標地址散列調度

算法先根據請求的目標IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器

是可用的且未超載,將請求發送到該服務器,否則返回空,主要應用於緩存服務器。

 動態調度 

 1、最小連接調度(Least-Connection  Scheduling),最少鏈接,簡稱LC。該調度是把新的連接請求分配到

當前連接數最小的服務器。最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器

的負載情況。調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1;

當連接中止或超時,其連接數減1。計算當前RealServer 的負載情況計算方法:active*256+inactive,誰的

數值小就選擇誰!

2、加權最小連接調度(Weighted  Least-Connection  Scheduling),加權最少鏈接,簡稱WLC。加權最小連

接調度是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值爲1,系統管理員

可以動態地設置服務器的權值。加權最小連接調度在調度新連接時儘可能使服務器的已建立連接數和其權值成比

例。計算當前Real Server 的負載情況計算方法:(active*256+inactive)/weight,誰小選擇誰來響應服務。    

3、基於局部性的最少鏈接(Locality-Based  Least  Connections  Scheduling),簡稱LBLC,"基於局部性

的最少鏈接" 調度算法是針對目標IP 地址的負載均衡,目前主要用於Cache 集羣系統。該算法根據請求的目標

IP 地址找出該目標IP 地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服

務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用"最少鏈接"的原則選出一個可用的服務器

,將請求發送到該服務器。

4、帶複製的基於局部性最少鏈接(Locality-Based  Least  Connections  with Replication Schedul

ing),簡稱LBLCR。"帶複製的基於局部性最少鏈接"調度算法也是針對目標IP 地址的負載均衡,目前主要用於

Cache 集羣系統。它與LBLC 算法的不同之處是它要維護從一個目標IP 地址到一組服務器的映射,而LBLC 算法

維護從一個目標IP 地址到一臺服務器的映射。該算法根據請求的目標IP 地址找出該目標IP 地址對應的服務器

組,按"最小連接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超

載;則按"最小連接"原則從這個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器

。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。    

5、最短期望延遲(Shortest Expected Delay Scheduling),簡稱SED,分配一個接踵而來的請求以最短的期望

的延遲方式到服務器, 計算當前realserver 的負載情況計算方法:(active+1)*256/weight=overhead。  

6、永不排隊(Never Queue),又稱最小隊列調度,簡稱NQ。分配一個接踵而來的請求到一臺空閒的服務器,此服

務器不一定是最快的那臺,如果所有服務器都是繁忙的,它採取最短的期望延遲分配請求。

 七、LVS常用命令介紹

   上面我們提到過LVS的相關模塊:內核模塊ipvs和用戶空間命令ipvsadm。下面我們來介紹下常用的命令

   在測試之前我們首先確定內核中是否有ipvs模塊,grep -i 'ip_vs' /boot/config-2.6.18-308.el5 

ipvsadm命令

ipvsadm的命令與iptables的相關命令及其相似,基本用法也相同。其大致如下:

⑴、管理集羣服務命令  

 添加集羣:

-A 格式:ipvsadm 

-A|E -t|u|f service-address [-s scheduler算法] 

 -t:tcp協議的集羣

 -u:udp協議的集羣 

 -f或--fwmark-service:基於防火牆標記的集羣服務 

 fg:添加一條基於http的集羣 

 ipvsadm -A -t 172.16.7.1:80 -s rr 

 修改集羣:-E 

 fg:修改上面增加的集羣算法爲wrr 

 ipvsadm -A -t 172.16.7.1:80 -s wrr 

 刪除集羣:-D 

 fg:刪除上面增加的集羣 

 ipvsadm -D -t 172.16.7.1:80 

 清空集羣計數器:-Z 

 ipvsadm -Z 

 清空所有集羣的配置:-C 

 ipvsadm -C

⑵、管理集羣內RealServer的命令

在集羣中添加RS:-a 

格式:ipvsadm -a -t|u|f service-address -r server-address [-g|i|m(LVS的類型)] [-w weight]

-t|u|f service-address:事先定義好的某集羣服務

-r service-address:某RS的地址,在NAT模型中,可以使用IP:PORT實現端口映射

[-g|i|m] :LVS 類型

-g:DR類型

-i:TUN類型

-m:NAT

[-w weight]:定義服務器權重

fg:在集羣172.16.7.1:80上增加RS1:172.16.7.2;RS2172.16.7.3,並定以爲NAT模式,並且定義權重

ipvsadm -A -t 172.17.7.1:80 -s wrr

ipvsadm -a -t 172.17.7.1:80 -r 172.16.7.2 -m -w 2

ipvsadm -a -t 172.17.7.1:80 -r 172.16.7.3 -m -w 1

修改集羣中的RS:-e

格式:ipvsadm -e -t|u|f service-address -r server-address [-g|i|m(LVS的類型)] [-w weight]

fg:修改上面的RS2的權重爲3

ipvsadm -e -t 172.17.7.1:80 -r 172.16.7.3 -m -w 3

刪除集羣中的RS:-d

格式:ipvsadm -d -t|u|f service-address -r server-address

fg:刪除上面的RS2

ipvsadm -d -t 172.17.7.1:80 -r 172.16.7.3

⑶、查看集羣的命令 -L|l

-n:不反解IP地址,以數字的形式顯示主機地址和端口  

-c:顯示當前的ipvs連接狀態的  

--stats :顯示統計信息  

--rate:顯示速率信息  

--timeout:顯示tcp、tcpfin、udp超時時間長度  

--daemon:顯示進程的  

--sort:根據端口排序顯示,默認是升序  

--persitent-conn 顯示持久連接 

⑷、保存和還原lvs配置規則的命令 

   保存配置文件:

     service ipvsadm save--類似於iptables的直接保存配置文件到/etc/sysconfig/ipvsadm

     -S:手動指定文件保存規則

 格式:ipvsadm -S > /path/to/somefile

    還原配置規則:—R

        格式:ipvsadm -R < /path/from/somefile

至此,關於負載集羣的基本結構和類型已經介紹完畢,由於基本理論比較枯燥而且內容比較多,在此不再對基本

架構進行實例介紹,由於我也是菜鳥,所以留點時間揣摩揣摩,然後在下篇博文"基於LVS實現NAT、DR和高可

用集羣HA的網絡架構"內進行詳細的探討、說明,到時還望各位大神們多多指點!

  由於是個人總結、親自碼字,中間難免出現錯誤還望各位大神拍磚~指出錯誤!--chrinux


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章