集羣之LVS的詳細介紹

LVS是Linux Virtual Server的簡寫,意思是Linux虛擬服務器,它工作在input鏈上,當客戶端發送的請求到達input鏈上以後,通過LVS的驗證若是關於lvs的請求就會在此鏈上直接修改目標地址,而後通過postrouting鏈傳送給其定義的服務器,LVS和iptables不能同時使用。

一、LVS的原理

1、NET的基本原理

把從客戶端發來的IP包的IP頭目的地址在DR上換成其中一臺RS(real server)的IP地址併發至此RS,而RS則在處理完成後把數據經過DR主機發回給客戶端,DR在這個時候再把數據包的源IP地址轉換爲DR接口上的IP地址即可,期間,無論是進來的數據還是出去的數據都必須經過DR。如下圖所示:

clip_p_w_picpath002

LVS/NET 模型

2、DR的基本原理:

1)LVS調度器收到目標地址爲VIP的請求包後,將MAC地址改成RS的MAC地址,並通過交換機(鏈路層)發給RS

2)RS的鏈路層收到請求後,往上傳給IP層。IP層需要驗證請求的目標IP地址。所以RS需要配置一個VIP的loopback(以下簡稱爲lo,意爲環回接口)device。這樣RS的IP層收到報文後,會往上遞交給傳輸層,之所以配置成lo,是因爲lo對外不可見,不會跟LVS的VIP起衝突。

3)RS處理完成後,將應答包直接返回給客戶端。若是公網服務器,則RS需要連接在互聯網(公網IP或網關)才能將應答包返回。如下圖所示:

clip_p_w_picpath004

LVS/DR 模型

3、TUN的基本原理

TUN模式使用網絡分層的原理,把從客戶端發來的數據包基礎上,封裝一個新的IP頭標記(不完整的IP頭,只有目的IP部)發給RS,RS收到後先把DR發過來的數據包頭給解開,還原其數據包原樣,處理後,直接返回給客戶端,而不需要再經過DR。需要注意的是由於RS需要對DR發過來的數據包進行還原,也就是說必須支持IP TUNNEL協議,所以在RS的內核中,必須編譯支持IP TUNNEL這個選項。

二、LVS的類型有哪些?它們各有什麼特點?

1)NAT:地址轉換(類似DNAT)

集羣節點跟director必須在同一個網絡IP

RIP通常是私有地址,僅用於各集羣節點間的通信

director位於client和realserver之間,並負責處理進出的所有通信

realserver必須將網關指向DIP

支持端口映射

realserver可以使用任意OS

較大規模應用場景中,director易成爲系統瓶頸

2)DR:直接路由(只處理請求報文)

集羣節點跟director必須在同一個物理網絡中

RIP可以使用公網地址,實現便捷的遠程管理和監控

director僅負責處理入站請求,響應報文則由realserver直接發往客戶端;

realserver不能將網關指向DIR

不支持端口映射;

3)TUN:(隧道)

集羣節點可以跨越互聯網(Internet);

RIP必須是公網地址;

director僅負責入站請求,響應報文則由realserver直接發往客戶端;

只有支持隧道功能的OS才能用於realserver;

不支持端口映射;

三、LVS調度算法

1、固定調度

四種靜態的調度方法

rr:Round Robin,輪叫,輪詢

wrr:Weight Round Robin,加權,考慮服務器本身權重的意義

sh:source hash,源地址hash,只要是來自於同一個客戶

dh(Destination Hashing):目標地址散列,將相同的的請求發送給同一個IP

2、動態調度

六種動態調度方法:

1)lc:Least Connections,最少連接

active*256+inactive (誰的小,挑誰)

2)wlc:Weighted Least Connections,加權最少連接

(active*256+inactive)/weight

3)sed:最短期望延遲

(active+1)*256/weight

4)nq:never queue 永不排隊

5)lblc:Locality-Based Least Connections,基於本地的最少連接

6(lblcr:Locality-Based Least Connections with Replication,基於本地的帶複製功能的最少連接

默認方法(最理想的方法):wlc

四、管理集羣服務的命令行工具ipvsadm

1、ipvsadm的幾個重要功能:

1)管理集羣服務

添加:-A -t|u|f service-address [-s scheduler] 

-t:TCP協議的集羣

-u:UDP協議的集羣

service-address: IP:PORT

-f:FWM,防火牆標記

service-address: Mark Number

修改:-E

刪除:-D -t|u|f service-address

eg:#ipvsadm -A -t 172.16.66.1:80 -s rr

2)管理集羣服務中的RS

添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]

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

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

[-g|i|m]:LVS類型(若不指定則默認爲DR)

-g:DR 表示DR模型

-i:TUN 能夠跨越互聯網的

-m:NAT 地址僞裝

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

修改:-e

刪除:-d -t|u|f service-address -r server-address 指定從哪個集羣服務中刪除那個用戶

eg:# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m 

eg:# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m

3)查看

-L|l

-n: 數字格式顯示主機地址和端口

--stats: 統計數據

--rate: 速率

--timeout: 顯示tcp、tcpfin和udp的會話超時時長

--sort: 對查看的內容進行排序,默認是升序

--daemon:

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

4)刪除所有集羣服務

-C:清空ipvs規則

5)保存規則

-S

#ipvsadm -s > /path/to/somefile

6)載入此前的規則

-R

#ipvsadm -R < /path/form/somefile

五、LVS-NET的實現過程

1、首先規劃好IP

Director Server(以下簡稱DR)DIP:192.168.66.1 VIP:172.16.66.2

Real Server 1 (以下簡稱RS1) DIP:192.168.66.2 

Real Server 2 (以下簡稱RS2) DIP:192.168.66.3

2、配置RS1、RS2服務器

1)RS1服務器的配置過程:

RS1的IP配置爲:192.168.66.2 網關是:192.168.66.1

wget ftp://172.16.0.1/pub/gls/server.repo -O /etc/yum.repos.d/server.repo

yum install httpd –y 安裝web服務

提供相應的網頁頁面並啓動web服務:

clip_p_w_picpath006 2)RS2服務器的配置過程

RS1的IP配置爲:192.168.66.3 網關是:192.168.66.1

wget ftp://172.16.0.1/pub/gls/server.repo -O /etc/yum.repos.d/server.repo

yum install httpd –y 安裝web服務

提供相應的網頁頁面並啓動web服務:

clip_p_w_picpath008

3、配置Director服務器

1)在Director服務器上再要添加一塊網卡eth1,其IP爲DIP:192.168.66.1 則eth0爲VIP,其IP爲172.16.66.2(提醒:eth1網卡的連接方式是Host-only,RS1、RS2的網卡連接方式也是Host-only)

wget ftp://172.16.0.1/pub/gls/server.repo -O /etc/yum.repos.d/server.repo

2)同步時間

clip_p_w_picpath010

clip_p_w_picpath012

3)安裝、啓動ipvsadm並測試web服務是否能訪問

yum install ipvsadm –y 安裝ipvsadm

service ipvsadm start 啓動ipvsadm

clip_p_w_picpath014

4)添加集羣服務

clip_p_w_picpath016

(-m以nat模式運作)

5)ipvsadm –L –n ipvsadm規則查看

在物理主機上 訪問172.16.66.2 刷新幾次再執行ipvsadm –L –n命令就會發現InActConn比例接近1:1

六、LVS-DR的實現過程

1、首先劃分好IP

Director:eth0,DIP:172.16.66.2 eth0:0,VIP:172.16.66.1

RS1: Eth0,RIP:172.16.66.7 lo:0,VIP:172.16.66.1

RS2: Eth0,RIP:172.16.66.8 lo:0,VIP:172.16.66.1

2、Director的IP、網卡配置過程

ifdown eth1 down Director的eth1斷開連接

vim /etc/sysconfig/network-scrips/ifcfg-eth1 編輯文件內容修改如下:

clip_p_w_picpath018

service network restart 重啓網絡服務器

ifconfig eth0:0 172.16.66.1/16 爲eth0配置一個別名

ifconfig 查看別名是否設置成功

clip_p_w_picpath020

把網卡的連接方式改爲橋接,以下RS1、RS2的網卡也改成橋接,因爲服務器間要在同一臺交換機上

3、RS1、RS2的配置過程

1)RS1服務器的IP配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0 設置IP和網關

clip_p_w_picpath022

service network restart 重啓網絡服務器

2)RS2服務器的IP配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0 設置IP和網關

clip_p_w_picpath024

service network restart 重啓網絡服務器

測試能否ping通RS1和Director服務器

clip_p_w_picpath026

3)RS1服務的配置

cd /proc/sys/net/ipv4/conf/

clip_p_w_picpath028

(小知識補充:還可以用另外一種命令實現上述命令的執行過程

sysctl -w net.ipv4.conf.eth0.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_announce=2 )

ifconfig lo:0 172.16.66.1/16 配置VIP

在物理主機上ping 172.16.66.1看看是否能ping通

clip_p_w_picpath030

Ping通後 可執行 arp -a 命令查看哪一個IP響應了

ifconfig lo:0 down 關閉VIP

ifconfig lo:0 172.16.66.1 broadcast 172.16.66.1 netmask 255.255.255.255 up (broadcast爲廣播地址,255.255.255.255意味着只跟自己在同一個網段內,全是網絡地址)

route add -host 172.16.66.1 dev lo:0 添加路由

4)RS2服務的配置

配置RS2的VIP並啓用

clip_p_w_picpath032

在物理主機上ping172.16.66.1 查看是否能ping通, 然後執行arp –a查看響應狀態

ifconfig lo:0 down 關閉VIP

ifconfig lo:0 172.16.66.1 netmask 255.255.255.255 broadcast 172.16.66.1 up

(broadcast爲廣播地址,255.255.255.255意味着只跟自己在同一個網段內,全是網絡地址)

ifconfig

route add -host 172.16.66.1 dev lo:0 添加路由

4、Directory服務的配置過程

1)添加路由並訪問web服務

clip_p_w_picpath034

2)設置ipvsadm

clip_p_w_picpath036

3)打開瀏覽器訪問一下 172.16.66.1 刷新出現兩次RS1,一次RS2

ipvsadm -L -n (刷新查看一下權重比例爲1:2)

這就是DR模型的LVS

小知識點:

arp_ignore:定義接收到ARP請求時的響應級別;

0:只要本地配置有相應的地址,就給予響應

1:僅在請求的目標地址配置請求到達的接口上的時候,纔給予響應

arp_announce:定義將自己地址向外通告時的通告級別

0:將本地任何接口上的任何地址向外通告

1:試圖僅向目標網絡通告與其網絡匹配的地址;

2:僅向與本地接口上的地址匹配的網絡進行通告

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