天天看點

LVS NAT/TUN/DR三種模式

#########叢集

一、叢集

叢集(cluster)技術是一種較新的技術,通過叢集技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務排程則是叢集系統中的核心技術。叢集是一組互相獨立的、通過高速網絡互聯的計算機,他們構成了一個組,并以單一系統的模式加以管理。一個客戶與叢集互相作用時,叢集像是一個獨立的伺服器。叢集配置是用于提高可用性和可縮放性。叢集的主要優點:高可擴充性,高可用性,高性能,高成本效益。

二、叢集類型

1 scale on:向上擴充

将伺服器的記憶體容量調大和cpu數量增加些(更新伺服器硬體)

缺點:在一定的範圍之内它的性能是上升的趨勢,但是超出範圍之後就是下降的趨勢。因為随着它的cpu的個數增加我們需要給我們的cpu仲裁,而且随着cpu個數的增加,資源競争性增大。

2 scale out:向外擴充

一台伺服器應付不過來,我們就增加一台伺服器。

優點:增減伺服器很友善,而且沒有向上擴充随着增加性能下降。

向上擴張的工作模式:當用戶端向伺服器端發送請求時,伺服器根據一定的算法選擇一台來響應客戶的請求。

LB:Load Balance:負載均衡叢集

負載均衡叢集中有一個分發器或者叫作排程器,我們将其稱為Director,它處在多台伺服器的上面,分發器根據内部鎖定義的規則或者排程方式從下面的服務叢集中選擇一台來響應用戶端發來的請求。負載均衡是對後端伺服器的均衡。

HA:High Availability 高可用叢集

高可用叢集時服務的可用性比較高,當我們某台伺服器當機後不會造成服務不可用。其工作模式則是将一個具有故障的伺服器的服務轉交給一個正常工作的伺服器,進而達到服務不會中斷。一般來說我們叢集中工作在前端(分發器)的伺服器都會對我們的後端伺服器做一個健康檢查,如果發現我們伺服器down機就不會對其再做轉發。高可用是對伺服器做備用機。

衡量标準:可用性=線上時間/(線上時間+故障處理時間)

99%, 99.9%, 99.99%,99.999%

HP:High Performance 高性能

高性能的叢集是當某一任務量非常大的時候,我們做一個叢集來共同完成這個任務。這種處理方式我們成為并行處理叢集,并行處理叢集是将大任務劃分為小任務,分别進行處理。一般這樣的叢集用來科學研究與大資料運算等方面的工作。現在比較火的Hadoop就是使用的并行處理叢集。

說明:三種叢集之間差別:

負載均衡着重于提供服務并發處理能力的叢集,是對後端伺服器的均衡;高可用以提升服務線上的能力的叢集,是對伺服器做了備用機的機制;高性能着重于處理一個海量任務,是将一個任務分發給多個主機分别完成。

###########LVS簡介

Internet的快速增長使多媒體網絡伺服器面對的通路量快速增長,伺服器需要具備提供大量并發通路服務的能力,是以,對于大負載的服務起來講,CPU,I/O處理能力很快成為瓶頸,由于單台伺服器的性能總是有限的,簡單的提高硬體性能并不能真正解決這個問題。為此必須采用多伺服器和負載均衡技術才能滿足大量并發通路的需求。linux虛拟伺服器(LVS)使用負載均衡技術将多台伺服器組成一台虛拟伺服器。它為時應快速增長的網絡通路需求提供了一個負載能力易于擴充,而價格低廉的解決方法。

LVS的結構及工作模式

一、LVS的結構

lvs是由目前工作在阿裡巴巴的著名工程師章文嵩開發的一款開源軟體。現在LVS已經是linux核心标準的一部分。

一般來說,LVS采用三層結構:負載排程器、伺服器池、共享存儲。工作在TCP/IP協定的四層,其轉發是依賴于四層協定的特征進行轉發的,由于其轉發要依賴于協定的特征進行轉發,是以需要在核心的TCP/IP協定棧進行過濾篩選。可想而知,這就需要在核心的子產品來完成,而這樣的過濾轉發規則又是由管理者進行定義的。是以,LVS就是兩段式的架構設計,在核心空間中工作的是“ipvs“,而在使用者空間工作的,用來定義叢集服務規則的是“ipvsadm“。

LVS叢集采用三層結構,其主要組成部分為:

A、負載排程器(Load Balancer),它是前端機,負責轉發客戶的請求,而客戶認為服務是來自同一個IP位址。

B、伺服器池(Server Pool),是一組真正執行客戶請求的伺服器,執行的服務有WEB、MAIL、FTP和DNS等。

C、共享存儲(Shared Storage),它為伺服器池提供一個共享的存儲區,使伺服器池擁有相同内容,提供相同服務。

LVS核心模型:

LVS NAT/TUN/DR三種模式

LVS共有三種模式,如下:

(1)NAT模式

優點:叢集中的實體伺服器可以使用任何支援TCP/IP作業系統,實體伺服器可以配置設定Internet的保留私有位址,隻有負載均衡器需要一個合法的IP位址。

不足:擴充性有限。當伺服器節點(普通PC伺服器)資料增長到20個或更多時,負載均衡器将成為整個系統的瓶頸,因為所有的請求包和應答包都需要經過負載均衡器再生。假使TCP包的平均長度是536位元組的話,平均包再生延遲時間大約為60us(在Pentium處理器上計算的,采用更快的處理器将使得這個延遲時間變短),負載均衡器的最大容許能力為8.93M/s,假定每台實體伺服器的平台容許能力為400K/s來計算,負責均衡器能為22台實體伺服器計算。

通過修改請求封包的目标IP位址(同時可能修改目标端口,支援端口映射),改為某Real Server的IP位址實作資料包的轉發。

LVS NAT/TUN/DR三種模式

1)用戶端将請求封包發往前端的負載均衡器,請求封包源位址為CIP目标位址為VIP

2)負載均衡器接受到封包,發現請求的是在ipvs規則裡面存在的位址,那麼它将用戶端的請求封包的目标位址改為了後端伺服器的RIP位址并将封包根據算法發送出去。

3)封包送到Real Server上,由于封包的目标位址是自己,是以會響應請求,并将響應封包返還給Director。

4)然後Director将此封包的源位址修改為本機ip并發送給用戶端。

特點:

1)叢集中各節點跟Directory必須在同一網段

2)DIP,RIP通常為私有位址,僅用于叢集,且Real Server的網關要指向DIP

3)支援端口映射和轉發

4)Real Server可以使用任意的OS

5)請求封包和響應封包都要經由Director,較大規模應用場景中Director可能成為系統瓶頸

(2)TUN模式

TUN 是IP Tunneling ,IP隧道的簡稱,它将排程器收到的IP資料包封裝在一個新的IP資料包中,轉交給應用伺服器,然後實際伺服器的傳回資料會直接傳回給使用者。

我們發現,許多Internet服務(例如WEB伺服器)的請求包很短小,而應答包通常很大。

這裡是LVS/TUN模式在應用時的部署環境:

LVS NAT/TUN/DR三種模式

我們先假設百度用的是這種架構模型。

然後來模拟下使用者通路百度的情況。

1.使用者在浏覽器輸入http://www.baidu.com, 使用者的電腦通過網絡詢問DNS,www.baidu.com域名的IP位址。

2.DNS伺服器通過使用者的位址,在伺服器清單裡選擇一個可能是距離使用者最近的LVS虛拟服務IP位址或者一個按照輪詢政策的位址。

可以用ping www.baidu.com,能看到會傳回一個IP位址,這個IP位址就是我們DNS傳回給我們的位址。也可以用dig指令,能夠看到www.baidu.com 實際對應了3個IP位址。

3.使用者浏覽器通過DNS獲得的IP位址,通路LVS伺服器。

4.進入LVS/TUN模式,LVS将資料包提供給APACHE或者nginx建構的反向代理伺服器;

5.反向代理伺服器最終将請求送給應用伺服器;

6.應用伺服器完成使用者請求之後,通過反向代理伺服器直接傳回給使用者,而不需要通過LVS伺服器。

前提

不是所有的伺服器都支援IP隧道,不過對一般的linux伺服器作業系統而言,基本都支援ip tunneling協定。

如果看過我關于LVS/DR模式的介紹,發現這個流程本質上是一樣的。

優點

TUN模式可以解決DR模式下不能跨網段的問題,甚至可以跨公網進行。

負載均衡器隻負責将請求包分發給實體伺服器,而實體伺服器将應答包直接發給使用者。是以,負載均衡器能處理很巨大的請求量,這種方式,一台負載均衡能為超過100台的實體伺服器服務,負載均衡器不再是系統的瓶頸。使用VS-TUN方式,如果你的負載均衡器擁有100M的全雙工網卡的話,就能使得整個Virtual Server能達到1G的吞吐量。

總結

對于大規模網站,單獨使用LVS還是不夠的,一般還是得配合nginx or apache做負載均衡。這個時候最簡單的就是lvs+nginx/haproxy(nginx官方版本現在沒有4層代理功能,haproxy對後端又不支援keepalive),當然使用DR模式或者TUN模式也還可以的。基本都得用2層才能搞得定。其實對于通路量不是很大的公司,直接用nginx/haproxy/apache就OK了。搞的太複雜維護成本會比較高。

LVS NAT/TUN/DR三種模式

1)用戶端将請求封包法網前端的負載均衡器,請求封包源位址是CIP,目标位址為VIP

2)負載均衡器受到封包後,發現請求的是在IPVS規則中存在的位址和對應的端口,那麼它将在用戶端的請求封包的首部再封裝一層IP封包,源位址為DIP,目标位址為RIP,并将此包發送給RS。

3)RS收到請求封包後,會首先拆開第一層封裝,然後發現裡面還有一層IP首部的目标位址是自己lo接口上的VIP,是以會再次處理請求封包,并将響應封包通過lo接口送往eth0網卡直接發送給用戶端。

注意:需要設定lo接口上的VIP不能出現在公網上。

特點:

1)各叢集節點可以跨越不同的網絡

2)RIP,DIP,VIP必須是公網位址

3)DIrector隻負責處理入站請求,響應封包由real server直接發往用戶端

4)real server網關不能指向Director

5)real server僅能搭建在支援隧道功能的主機上

6)不支援端口映射

(3)DR模式

優點:和VS-TUN一樣,負載均衡器也隻是分發請求,應答包通過單獨的路由方法傳回給用戶端。與VS-TUN相比,VS-DR這種實作方式不需要隧道結構,是以可以使用大多數作業系統做為實體伺服器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0無需打更新檔;IRIX 6.5;HPUX11等。

不足:要求負載均衡器的網卡必須與實體網卡在一個實體段上。

LVS NAT/TUN/DR三種模式

1)用戶端将請求發往前端的負載均衡器,請求封包源位址是CIP,目标位址為VIP

2)負載均衡器接收到封包後,發現請求的是在ipvs規則中存在的位址和端口,那麼它将用戶端請求封包的源MAC位址改為自己的MAC位址,目标MAC改為了Real Server的MAC位址,并将此包發送給Real Server

3)Real Server發現請求封包中的目标MAC位址是自己,就會把此封包接受下來,處理完請求封包後,将響應封包通過lo接口送給eth0網卡,直接發送給用戶端。

注意:各real server的lo接口上配置的VIP不能響應外部請求。

特點:

1)叢集節點跟Director必須在同一實體網絡中

2)RIP可以使用公網位址,使用便捷的遠端控制伺服器

3)Direcotr隻負責處理入站請求,響應封包由real server直接發往用戶端

4)real server不能将網關指向DIP

5)Director不支援端口映射

6)real server支援應用在大多數OS

7)DR比NAT能處理更多的real server

VIP位址為排程器和伺服器組共享,排程器配置的VIP位址是對外可見的,用于接收虛拟服務的請求封包;所有的伺服器把VIP位址配置在各自的Non-ARP網絡裝置上,它對外面是不可見的,隻是用于處理目标位址為VIP 的網絡請求。

三種 IP 負載均衡技術的優缺點歸納在下表中:

LVS NAT/TUN/DR三種模式

繼續閱讀