Linux LB 集羣知識、如何用 LVS 方式實現 LB 集羣?

LB負載均衡的目的是爲了提高訪問的併發性和服務器的性能。實現 LB 的方式主要有軟件方式和硬件方式。軟件方式實現的軟件有LVS工作於傳輸層、nginx工作於應用層haproxy工作於傳輸層和應用層硬件方式實現的軟件有 BIG-IPF5,A10A10等。這裏主要介紹軟件方式實現 LB。

lvs方式實現 LB原理部分

一、lvs介紹

lvsLinux Virtual Server,Linux虛擬服務是工作在第四層的一款軟件。是工作在內核的netfilter模塊上的類似於iptables的工作模型。它是一個前端調度器Director,由它來具體實現負載均衡。它的工作原理如下圖

42

幾個概念說明

cip請求客戶端的 ip 地址。

vip是lvs調度器的 ip 地址通常也是客戶端請求服務的的目標 ip 地址。

dip: 是directory和後端 real serveer 之間通信使用的 ip 地址。

rip: 是提供真正服務的real server的 IP 地址。

Director是lvs的前端調度器是ipvs的核心組件。

Real Server: 是後端真正提供服務的服務器。

lvs在內核中是由ipvs實現具體的數據包轉發包括軟發到後端那個real server、響應報文如何工作在netfilter的INPUT鏈上在此處決定是否進行數據包的轉發。可以使用ipvsadm工具配置 ipvs 規則。

二、lvs的調度算法(Scheduler)

調度算法是在Directory轉發集羣數包的時候使用的具體算法目的是爲了選擇哪個後端Real Server服務器。ipvs代碼必須提供的調度方法。

如何查看自己的內核是否支持ipvs功能以及支持的算法

6

常見的算法有如下

靜態方法僅考慮調度算法進行調度

RR: round robin、WRR: weighted 輪詢 、加權輪詢實現了起點公平。新的連接請求被輪流分配至各RealServer算法的優點是其簡潔性它無需記錄當前所有連接的狀態所以它是一種無狀態調度。輪叫調度算法假設所有服務器處理性能均相同不管服務器的當前連接數和響應速度。該算法相對簡單不適用於服務器組中處理性能不一的情況而且當請求服務時間變化比較大時輪叫調度算法容易導致服務器間的負載不平衡

SHSource Hash 源地址hash,目的是session保持。意義來源於同一源地址的CIP請求會被定向到同一RS。它根據請求的源IP地址作爲散列鍵Hash Key從靜態分配的散列表找出對應的服務器若該服務器是可用的且未超載將請求發送到該服務器否則返回空。它採用的散列函數與目標地址散列調度算法的相同。除了將請求的目標IP地址換成請求的源IP地址外它的算法流程與目標地址散列調度算法的基本相似。在實際應用中源地址散列調度和目標地址散列調度可以結合使用在防火牆集羣中它們可以保證整個系統的唯一出入口。

DH: Destination Hash 目標地址Hash。是針對目標IP地址的負載均衡但它是一種靜態映射算法通過一個散列Hash函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先根據請求的目標IP地址作爲散列鍵Hash Key從靜態分配的散列表找出對應的服務器若該服務器是可用的且未超載將請求發送到該服務器否則返回空。

動態方法根據調度算法和當前RS的負載情況進行調度,講究結果公平

LC: Least Connection 最少連接 如何監控一般情況是根據tcp協議的計數等相關信息判斷

    Overhead = Active * 256 + Inactive 表示負載情況越小說明負載越小,會優先選擇

WLC: weigthed

    Overhead = (Active * 256 + Inactive)/weight 默認機制

SED: shortest expection dalay 最短期望連接

    Overhead = (Actived + 1)/weight目的是爲了讓權重大的優先匹配。問題權重小的可能一直空的。

NQ: Never Quene 工作機制是先每一個 Real Server 都請求一次。

LBLC: locality-based Least connection

LBLCR:  Replicated LBLC,帶複製的LBLC

三、lvs的工作模型

工作模型可以這麼理解就是 LB 的Real Server接收到報文到底以哪種方式響應給客戶端。lvs原生態支持的類型有NAT網絡地址轉換、DR直接路由、TUN隧道。

NAT模型的工作原理

43

nat特點      
1、RS使用私有地址網關爲DIP      
2、請求和響應都要經過direstor高負載時可能出現單點故障      
3、支持端口映射PNAT意思是director 和 real sever 的服務端口可以不在同一端口。      
4、RS可以使用任何操作系統

DR的原理大致如下

45

DR特點      
1、要保證前端路由將目標地址爲VIP的報文統統發往Direstory,而不是RS      
     1) 靜態地址綁定在前端路由器上配置一條靜態ARP地址解析將vip地址和DIP的MAC地址綁定。      
     2arptables   在realserver主機上設置arp解析規則只要收到vip地址的arp解析就不進行解析      
     3)修改RS的內核參數修改內核參數arp_ignore arp_announce實現比解析vip的mac地址      
        此時還要在 Real Server 添加一條靜態路由來實現響應報文的源地址是vip

2、RS可以使用私有地址也可以使用公網地址      
3、RS跟Directory必須在同一物理網絡中。      
4、請求報文經過Directory,但響應報文必須不經過Directory.      
5、不支持端口映射      
6、RS可以使常見的OS支持arptables      
7、RS的網關不會指向DIP

TUN的大致原理

44

TUN特點IP隧道 將IP首部通過IP首部隧道傳送      
1、rip,vip,dip全部是公網地址      
2、rs的網關不會指向DIP      
3、不支持端口映射      
4、請求報文經過Directory,但響應報文必須不經過Directory。      
5、各個real server 必須支持隧道

補充隨着互聯網的出現了lvs的第四種模型。



FullNat模型是基於NAT模型的擴展可實現局域網內可以有子網的情況。實現方式同時修改請求報文的源地址和目標地址。

NAT的優點1)可以隱藏內部rip地址安全2)配置簡單

四、ipvs配置工具ipvadm

ipvsadm是配置ipvs規則的工具和iptables類似。

常用的用法

# 1、添加集羣
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] \
[--pe persistence_engine]
	-A 添加集羣  -E 修改集羣
	-t tcp 協議  -u udpx協議  -f 防火牆標記
	service-address:指的是vip的地址
	-s 指明調度算法默認是wlc

# 2、刪除一個集羣服務
ipvsadm -D -t|u|f service-address

# 3、清空所有的規則
ipvsadm -C

# 4、導入ipvs規則相當於ipvsadm-restore
ipvsadm -R 

# 5、保存ipvs規則等價於 ipvsadm-save
ipvsadm -S [-n]

#6、將real server 加入到定義好的集羣服務中去
ipvsadm -a|e -t|u|f service-address -r server-address [options]
	-a -e 添加、修改real server到指定的集羣中
	-r 指定 real server 的IP地址

# 7、刪除集羣中的指定的real sever
ipvsadm -d -t|u|f service-address -r server-address

# 8、查看配置好的 ipvs 規則常與 -n 一起使用
ipvsadm -L|l [options]

常與的option的有

--gatewaying   -g DR模型也是默認的lvs類型gatewaying
--ipip    -i TUN模型  ipip encapsulation (tunneling)
--masquerading -mNAT模型 masquerading (NAT)
-w 指明權重

四、防護牆標記和持久連接

1、防護牆標記

藉助netfilter的mangle將作爲集羣服務的請求報文打標記在PREROUTING鏈上完成。這樣做的目的後者說是好處是只要是防火牆標記相同的就可以認爲同一集羣服務。例如在訪問web服務時有用http協議的也有用https協議的此時就需要在director處定義2個集羣服務這樣可以實現功能。但是管理起來不方便防火牆標記就可以解決這樣的困擾。

具體做法(例如將http 和 https 服務定義成統一的集羣服務)

1)iptables -t mangle -A PREROUTING -d {vip} -p tcp -m mulitport --dports 80 -j MARK --set-mark 10

2)基於mark定義集羣服務

   ipvsadm -A -f 10 -s rr

   ipvsadm -a -f 10 -r {rip} -g -w 1

2、持久連接

持久連接是無論使用什麼調度算法持久連接都能保證指定的一段時間內來自同一客戶端的請求始終低定向到同個RS,其調度基準是集羣服務。持久連接時基於內核中的持久連接模板persistent template來實現的基於ssl點對點實現全程加密實現數據安全。

常見的持久連接類型

PCC:持久客戶端連接

在基於tcp或udp定義集羣服務時其端口爲0。表示將來自客戶端的所有請求都轉發到後端的RS。基於客戶端持久連接時來自同一個client的所有請求都被轉發到同一RS.

示例ipvsadm -A -t vip:0 -p 60 -p指定持久連接的時間

PPC:持久端口連接

僅針對某一特定的服務啓用的持久服務。單服務調度各個集羣分開調度。

示例ipvsadm -A -t vip:80 -s rr -p 60

PFM:持久防火牆標記

持久防火牆標記單服務調度。可以通過防火牆標記來定義一個集羣的多個端口。

示例ipvsadm -A -f 10 -p 60

實踐部分

一、示例NAT模型

實驗原理如下實驗實現的目標是實現通過訪問Director實現Discuz的訪問。真正實現的discuz服務地後端的Real Sever從而實現負載均衡的效果。此時就必須要有單獨的文件服務器和數據庫服務器分別來存儲像圖片等的非結構數據和像賬號、密碼等的結構化數據。

22

環境

操作系統CentOS 6.5 安裝在VMware虛擬機上

配置步驟

在172.16.10.16

一、配置NFS服務器

# 1、安裝客戶端軟件
yum install -y nfs-utils

# 2、提供共享目錄
mkdir /data
setfacl -m u:48:rwx /data -R (id爲48的用戶是rpm方式安裝httpd時的apache用戶)

# vim /etc/exports
/data/ 172.16.0.0/24(rw)

# 3、啓動服務
/etc/init.d/nfs start
# 以後使用 exports -ar

二、安裝mysql

#1、安裝mysql軟件這裏使用rpm安裝
yum install mysql mysql-sever -y

# 2、初始化數據庫這裏不再詳細說明

# 3、授權用戶
mysql> CREATE DATABASE discuz;
mysql> GRANT ALL ON discuz.* TO discuz@'172.16.%.%' IDENTIFIED BY '123456';

在172.16.10.22

一、配置ip地址和網關信息

# 臨時配置
ifconfig eth0 172.16.10.22/16 up
route add default gw 172.16.10.9

# 也可使用永久配置如下

23

二、部署discuz服務

# 1、安裝軟件
yum install httpd php php-mysql 

# 2、掛載NFS服務
mount -t nfs 172.16.10.16:/data /var/www/html

# 解壓 discuz 源代碼將解壓後的upload目錄複製到此目錄
cp upload /var/www/html -r

# 修改屬主屬組
chown apache.apache /var/www/html/upload -R

# 3、安裝discuz
# 不在詳述安裝時需要注意編碼問題和數據庫連接時的問題。其他可根據提示解決。

21

在172.16.10.33 

在172.16.10.33可參照172.16.10.22步驟可完成。

在Director 上172.16.10.9 192.168.1.66

# 配置ipvs規則

ipvsadm -A -t 192.168.1.66:80 -s rr
ipvsadm -a -t 192.168.1.66:80 -r 172.16.10.22:80 -m -w 1
ipvsadm -a -t 192.168.1.66:80  -r 172.16.10.33:80 -m -w 1

注意real sever和director的172.16.10.9屬於同一局域網中在VMware中可以使用如下方式配置

26

配置完成驗證結果

24

25

二、示例DR模型

1、vip和rip在相同的網絡內

實驗原理圖如下實現的目標是web服務。

47

解釋

arp_announce:如何通告本地地址

    0表示有arp請求時會通告本機所有網卡的mac地址。 默認

    2 表示僅通過網絡直連的接口的地址

arp_ignore:表示如何響應接收到的arp請求

    0 表示請求的地址可以通過其他網卡響應  默認。

    1 表示僅在請求的地址必須在請求報文接口進行響應

在172.16.10.33中

ifconfig eth0 172.16.10.22/16 up # 這個也可以寫到配置文件
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 172.16.10.20 netmask 255.255.255.255 broadcast 172.16.10.20
route add -host 172.16.10.20  dev lo:0

在172.16.10.22中

此配置可參照172.16.10.33配置配置基本相同

在Director172.16.10.9 172.16.10.20中

ipvsadm -A -t 172.16.10.20:80 -s rr
ipvsadm -a -t 172.16.10.20:80 -r 172.16.10.22:80 -g -w 1
ipvsadm -a -t 172.16.10.20:80 -r 172.16.10.33:80 -g -w 1

實驗結果

33

34

三、防火牆標記和持久連接

實驗拓撲圖如下,實驗實現的目的是:使用防火牆標記實現將80和443端口實現持久連接。

41

在192.168.1.201上

1、提供IP地址和網關

48

2、安裝軟件

httpd軟件和mod_ssl軟件

49

3、提供測試頁面和ssl證書

51

編輯/etc/httpd/conf.d/ssl.conf

50

4、啓動服務即可

在192.168.1.202上

在192.168.1.202上的配置於192.168.1.201類似ip地址和測試頁面不同。

在192.168.1.50172.16.0.50上

iptables -t mangle -A PREROUTING -d 172.16.0.50 -p tcp -m multiport \
--dports 80,443 -j MARK --set-mark 10

ipvsadm -A -j 10 -s rr
ipvsadm -a -f 10 -r 192.168.1.201 -m
ipvsadm -a -f 10 -r 192.168.1.202 -m

52

補充說明

如何獲得證書可以參照http://guoting.blog.51cto.com/8886857/1535032。這裏說明一點的是RealServer1和RealServer2使用相同的證書。

結果說明

53

54

在訪問web服務時最主要的一個功能是會話保持 session如何利用lvs實現呢

此時只需要修改ipvs的規則如下

ipvsadm -A -f 10 -s rr -p 60
ipvsadm -a -f 10 -r 192.168.1.201 -m -w 1 
ipvsadm -a -f 10 -r 192.168.1.202 -m -w 1

此時在訪問到一個RealServer時會話會保持一段時間結果如下

55

至此所有配置完成。

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