歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 負載均衡集群及LVS詳解

負載均衡集群及LVS詳解

日期:2017/2/27 15:59:50   编辑:Linux教程
一、集群簡介
集群並不是一個全新的概念,其實早在七十年代計算機廠商和研究機構就開始了對集群系統的研究和開發。由於主要用於科學工程計算,所以這些系統並不為大家所熟知。直到Linux集群的出現,集群的概念才得以廣為傳播。集群系統主要分為高可用(High Availability)集群,簡稱 HA 集群,和高性能計算(High Perfermance Computing)集群,簡稱 HPC 集群。

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

二、集群分類
集群分為同構與異構兩種,它們的區別在於:組成集群系統的計算機之間的體系結構是否相同。集群計算機按功能和結構可以分成以下幾類:
負載均衡集群LB: Load balancing clusters
高可用性集群HA: High-availability (HA) clusters
高性能計算集群HP: High-performance (HPC) clusters
網格計算 Grid computing

三、各種集群定義詳解
⑴、負載均衡集群-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是一個開源的軟件,由畢業於國防科技大學的章文嵩博士於1998年5月創立的,可以實現LINUX平台下的簡單負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。
七層:反向代理
Nginx:支持http,pop3,smtp,imap
haproxy:支持http,tcp(mysql,smtp)

五、LVS詳解
由於硬件設備價格比較高,動則上萬、幾十萬刀,所以一般的小公司所使用的還是基於軟件的架構方式來實現集群的。當然,只要掌握了linux下基於軟件的集群架構,其他基於硬件的架構配置也都大同小異,由於硬件的缺乏、嘿嘿--目前還是小菜鳥一個,公司內部的設備還沒見過是神馬模樣!!所以在此就著重介紹一下我們linux系統下基於LVS架構的集群的搭建,當然,這也是我們作為linux運維人員必須掌握的重中之重~~是吧!好了,廢話不扯那麼多了~下面我們進入正題吧!自己理解,如有錯誤還望各位大神們不吝賜教~~

①LVS基本解釋
lvs是一個開源的軟件,由畢業於國防科技大學的章文嵩博士於1998年5月創立的,可以實現LINUX平台下的簡單負載均
衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。

這是國人在開源上作出的最大貢獻~我們為此驕傲、自豪!嘿嘿——說多了,中國在開源上面的貢獻好像還真是少之
又少啊~~望各位大神們多做貢獻,天朝還是可以出現大神的!-唠多了,下面接著咱們的VLS。

LVS是linux系統上的一種機制,類似於iptables似,其相關屬性也是通過與iptables命令類似的方式定義的,
等會會詳細介紹。LVS是工作於內核上的,通過內核來提供工作,其工作空間在iptables的INPUT鏈上,當客戶端請求到
達INPUT鏈上以後,通過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地址進行封裝然後轉給Real Server,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、特性:
1、集群節點可以跨越Internet
2、Director的VIP和RIP必須為公網IP
3、Director僅處理入站請求,響應報文則由Real Server直接發往客戶端
4、Real Server的網關不能指向Director
5、只有支持隧道協議功能的OS才能作為Real Server
6、不支持端口映射

六、LVS的調度方法:分為靜態和動態調度兩種
靜態調度:
1、輪叫調度: Round-Robin Scheduling,簡稱RR,輪叫調度就是以輪叫的方式請求不同的服務器,算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。輪叫調度算法假設所有服務器處理性能均相同,不管服務器的當前連接數和響應速度。該算法相對簡單,不適用於服務器組中處理性能不一的情況,而且當請求服務時間變化比較大時,輪叫調度算法容易導致服務器間的負載不平衡。


2、加權輪叫調度(Weighted Round-Robin Scheduling),加權輪叫,簡稱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 Scheduling),簡稱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

Copyright © Linux教程網 All Rights Reserved