天天看點

負載均衡LVS叢集詳解

叢集,所謂的叢集就是為了提高伺服器性能時,将多台伺服器組合在一起,共同提供一個服務的群體。而這些叢集又分為:LB(Load Banlancing)--負載均衡、HA(Hight Availability)--高可用、HP(Hight Performance)--高性能。

一、LB--負載均衡

在負載均衡叢集中需要一個分發器,我們将其稱之為Directory,它位于多台伺服器的上面的中間層,根據内部鎖定義的規則或排程方式從下面的伺服器群中選擇一個以此來進行響應請求,而其分發的方式則是根據某個算法進行的。

二、HA--高可用

高可用顧名思義就是服務的可用性比較高,即當我們不會因為某台伺服器的當機,進而造成我們的服務不可用,其工作模式則是将一

個具有故障的服務轉交給一個正常工作的伺服器,進而達到服務不會中斷。

三、LVS:

LVS:Linux Virtual Server,可以實作LINUX平台下的簡單負載均衡。

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

LVS的三種轉發模式:

LVS-NAT:網絡位址轉換 Network address translation

LVS-DR:直接路由 Direct routing

LVS-TUN:IP隧道 IP tunneling

VIP:Director用來向用戶端提供服務的IP位址

RIP:叢集節點(背景真正提供服務的伺服器)所使用的IP位址

DIP:Director用來和D/RIP 進行聯系的位址

CIP:公網IP,用戶端使用的IP。

LVS-NAT:------擴充的DNAT

1.所有的real server和Director要在同一網段

2.通常情況下RIP是私有位址,僅用于叢集節點之間進行通信

3.Director同時處理入站和出站請求

4.Real server的網關要指向DIP

5.可以實作端口映射(請求端口和提供服務的端口可以不一緻)

6.Real server可以是任意的作業系統

7.Director很容易成為系統性能的瓶頸

<a target="_blank" href="http://blog.51cto.com/attachment/201204/141607661.jpg"></a>

資料包位址轉換過程:

S:CIP D:VIP-------&gt;Director------&gt;S:CIP D:RIP------&gt;Real Server------&gt;S:RIP  D:CIP-----&gt;Director-----&gt;S:VIP  D:CIP

LVS-DR:使用者的請求經過Director,然後real server直接響應給用戶端任何real server網關不能執行Drector

1.叢集節點必須在同一個實體網絡中,基于MAC轉發

2.RIP可以使用公網位址

3.Director僅處理入站請求,響應的資料包不在經過Director

4.Real server的網關不能指向Director

5.不支援端口映射

6.大多數的作業系統都可以用于real server(隔離ARP廣播,同一塊網卡上支援多個IP)

7.Director的性能表現遠遠優于NAT

<a target="_blank" href="http://blog.51cto.com/attachment/201204/141828424.jpg"></a>

S:CIP D:VIP-----&gt;Director---&gt;S:CIP D:RIP -----&gt; Real Server---&gt; S:VIP D:CIP

LVS-TUN:使用者的請求經過Director,然後real server直接響應給用戶端

1.Real server和Director不需要在一個實體網段中

2.RIP一定不能是私有位址

3.Director僅處理入站請求

6.僅有支援IP隧道的作業系統才能用于real server

<a target="_blank" href="http://blog.51cto.com/attachment/201204/141844411.jpg"></a>

與DR的網絡結構一樣,但Director和Real Server可以在不同的網絡當中,DIP-----&gt;VIP 基于隧道來傳輸,在資料包外層額外封裝了S:DIP D :RIP 的位址。

四、LVS的排程算法:

1.靜态排程算法:

RR:Round-robin:輪循

WRR:Weighted round-robin:權重輪循-----按照性能配置設定,為其計算出權重

DH:Destination hashing:目标位址hashing-----将某個固定IP的請求轉發給一個相同的real server,用于具有緩存伺服器的

SH:Source hashing:源位址hashing

2.動态排程算法:根據分發算法和real server的負載狀态設定出排程決策,Director對每一個連接配接進行追蹤監控是否處于活動狀态(ESTABLESHED)

LC:Least connection:最少連接配接-----監控每一個real server目前處于活動狀态連接配接和非活動狀态連接配接數,然後計算出其目前負載:active*256+inactive=overhead

WLC:Weighted least connection:權重最少連接配接------overhead/weight,考慮到real serverd的性能,預設叢集算法

SED:Shortest Expected Delay:最短的期望的延遲----不考慮非活動狀态的連接配接,算法:(active+1)*256/weight=overhead

NQ:Never Queue:永不排隊-----沒有連接配接時,直接轉發

LBLC:Locality-Based Least-Connection:基于本地的最少連接配接,動态DH算法

LBLCR:Locality-Based Least-Connection with replication Scheduling:帶複制的基于本地最少連接配接,緩存是共享的

五、ipvsadm

ipvsadm:1.定義叢集服務,指定VIP,協定,端口、  2.向叢集服務添加RS

用法:

ipvsadm -A|E -t|u VIP:PORT [-s scheduler] [-p [timeout]] [-M netmask]]

-A:定義新的叢集服務

-E:修改已有的叢集服務

-D:删除某叢集服務

-s:指定排程算法,可選項:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq ,預設的排程算法是: wlc.

-C:清空

-R:等同ipvsadm-restore 恢複虛拟伺服器規則

-S:等同ipvsadm-save 儲存虛拟伺服器規則,輸出為-R 選項可讀的格式

-L|l:列出目前已定義的叢集服務和real server

--stats:顯示統計資訊 與-L同時使用

--rate:顯示入站響應速率 與-L同時使用

-c:顯示LVS 目前的連接配接 與-L同時使用

-n:不進行反向解析 與-L同時使用

-Z:清空計數器

-t --tcp-service service-address 說明虛拟伺服器提供的是tcp 的服務

-u --udp-service service-address 說明虛拟伺服器提供的是udp 的服務

-f --fwmark-service fwmark 說明是經過iptables 标記過的服務類型。

-p --persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客戶的多次請求,将被同一台真實的伺服器處理。timeout 的預設值為300 秒。

ipvsadm -a|e -t|u VIP:PORY -r RIP [-g|i|m] [-w weight]

-a:添加real server

-e:修改real server

-g:指定LVS 的工作模式為直接路由模式(也是LVS 預設的模式)

-i:指定LVS 的工作模式為隧道模式

-m:指定LVS 的工作模式為NAT 模式

-w:真實伺服器的權值

ipvsadm -d -t|u service-address -r server-address  删除一條虛拟伺服器記錄中的某條真實伺服器記錄

本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/838469,如需轉載請自行聯系原作者