Linux集羣之LVS


一、LVS簡介

  LVSLinux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在19985月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。

  負載均衡集羣(Load Balancing,簡稱爲LB)從工作在協議層來劃分爲TCP和應用層;TCP協議層是根據請求的目標地址和端口進行調度;應用層協議是根據請求的內容進行調度,而且此種調度爲“代理”方式,即反向代理。

 

二、LVS組成

  LVS軟件由ipvsipvsadm兩個程序組成,ipvs是工作在內核中的;ipvsadm是工作在用戶空間,將爲工作在內核空間的ipvs定義集羣服務,作出調度決策算法的功能的一種工具,從功能上來看類似於netfilt.

2.1 LVS工作原理

  ipvs工作於netfilterINPUT鏈上;ipvsadm用於在ipvs上定義集羣服務:同時也得定義此集羣服務對應於有哪個後端主機可用;根據所指定的調度方法(算法)作出調度決策;

wKioL1Vue9zTa5LDABHbtBq6YWo878.bmp

  當用戶的請求到達本機時,首先經由PREROUTING鏈,到達PREROUTING鏈後進行路由判斷,經路由判斷後發現是送往本機的,將用戶請求送往INPUT鏈接中,此時ipvs將檢查INPUT鏈上的所有經過的報文,判斷是不是請求的集羣服務,如果請求的是集羣服務,ipvs將“攔下”服務,經過調度算法挑選出一個時先定義好的主機,並將用戶請求服務轉發出去,經由網絡將用戶請求送往後端主機併爲用戶提供服務響應。

 

2.2 LVS常見術語約定

  爲用戶提供挑選後端服務器的主機稱爲調度器(Director);後端提供服務的主機稱爲Real Server (簡寫爲RS)。

  客戶端(Client)的IP稱爲CIP;被DNS域名解析後的IP稱爲VIPDirector Virtual IP);調度器面向後方的集羣的IP稱爲DIPDirector IP);Real Server服務器上的IP稱爲RIPReal Server)。

wKiom1VueqrR7gl3AAgEGOQTh9E313.bmp

2.3 LVS的類型

  LVS的類型分爲lvs-natlvs-drlvs-tunlvs-fullnat

 

三、lvs-nat

  lvs-nat非常類似於DNAT,支持多目標轉發,它是通過修改請求報文的目標地址並根據調度算法所挑選出的某RSRIP來進行轉發。

wKioL1VufHvzrHgZAAjpyPFWHAE645.bmp

  當用戶請求報文到達Director時,源地址爲CIP目標地址爲VIPDirector經過內部路由後發現是送往本機的,就送往INPUT鏈,ipvs將檢查在INPUT鏈發現對CIP請求的是集羣服務,根據在ipvs中指明的RS1RS2,並根據內部的調度算法,挑選出一臺RS爲本次請求服務,此時更改請求報文中的目標地址改爲挑選出的RSIP地址如“CIPRIP1”,並經由forward鏈轉發出去,在報文到達RS1服務器是源地址是CIP目標地址是RS1IP地址(即本機的IP地址),本機運行着有用戶請求服務,RS1進行報文響應,響應報文的源地址是RIP1,目標地址是CIP,即“RIP1CIP”;到響應報文達到Director時,Director根據內部的NAT追蹤機制,發現用戶訪問的是CIP,因此Director將進行修改源地址爲VIP,報文格式“VIPCIP”。

lvs-nat架構特性:

 (1) RS應該使用私有地址,即RIP應該爲私有地址;各RS的網關必須指向DIP

 (2) 請求和響應報文都經由Director轉發;高負載場景中,Director易於成爲系統瓶頸;

 (3) 支持端口映射;

 (4) RS可以使用任意類型的OS;

 (5) RSRIP必須與DirectorDIP在同一網絡;

 

四、lvs-dr

  lvs-dr模型即爲直接路由;Director在實現轉發時不修改請求的IP首部,而是通過直接封裝MAC首部完成轉發;目標MACDirector根據調度方法挑選出某RSMAC地址;拓撲結構有別有NAT類型;

wKiom1VueymSfXiwAA3ueHKlNgM316.bmp

  當用戶請求到達路由器,路由器經過路由到達交換機,並把用戶請求交給DirectorDirector經過調度至RS服務器,RS服務器在響應是並不經過Director,而是直接經交換機-->路由器送往用戶。

wKiom1Vue26Cb-0JABM9OC3CPOE167.bmp

  在Director服務器的網卡上配置DIP,在網卡別名上配置VIP;在RS服務器上的網卡配置RIP,把VIP配置到RS服務器內部的lo網卡的別名上如lo:1。當用戶請求到達時,首先到達路由器,路由器通過路由送往另一個接口,此接口經過ARP廣播,解析到內網中VIPMAC地址。此時路由器會收到三個VIPMAC地址,顯然這不是我們希望得到的結果,我們得想辦法讓RS服務器不能響應路由器ARP廣播請求解析得到VIPMAC地址,或者響應了不讓響應請求出去;這樣就能保證只有DirectorVIP會響應ARP廣播請求解析VIPMAC地址。當路由器得到VIPMAC地址時,路由器會進行封裝報文幀,在源報文的基礎上加上自己的MAC地址和ARP廣播請求解析VIPMAC地址,然後報文到達Director服務器,Director發現請求的報文是本機的地址,把報文送往INPUT鏈,ipvs發現這是一個請求的集羣服務,根據調度算法挑選出一個RSRS1,並ARP廣播請求解析RS1RIP地址的MAC得到RS1RIP地址的MAC地址,源IP地址和目標IP沒有變,只是修改源MAC和目標MAC地址變成了Director的和RS1RIPMac地址。當報文送往RS1服務器,RS1服務器判斷源IP和目標IP是自己本機上,並響應服務封裝報文,源IPVIP,目標IPCIP,將報文發送給RS1設置的網關地址路由器接口。

  此時會有一個問題,在Linux中由哪塊網卡發送出去目標IP就是哪塊網卡的IP地址,這裏可以要求強求報文必須由lo出去,但lo出不去的,可以通過forward鏈轉發出去的。

架構特性:

(1) 保證前端路由器將目標地址爲VIP的請求報文通過ARP地址解析後送往Director;

解決方案:

   靜態綁定:在前端路由直接將VIP對應的目標MAC靜態配置爲DirectorMAC地址;

    arptables:在各RS上,通過arptables規則拒絕其響應對VIPARP廣播請求;

   內核參數:在RS上修改內核參數,並結合地址的配置方式實現拒絕響應對VIPARP廣播請求;

(2) RSRIP可以使用私有地址;但也可以使用公網地址,此時可通過互聯網上的主機直接對此RS發起管理操作(不安全);

(3) 請求報文必須經由Director調度,但響應報文必須不能經由Director;

(4) RIP必須與DIP在同一個物理網絡中;

(5) 不支持端口映射;

(6) RS可以使用大多數的OS

(7) RS的網關一定不能指向Director

 

五、lvs-tun

  lvs-tun不修改請求報文IP首部,而是通過IP隧道機制在原有的IP報文之外再封裝IP首部,經由互聯網把請求報文交給選定的RS

wKioL1VufcSi64qRABVolKeX18g889.bmp

架構特性:

(1) RIP, DIP, VIP都是公網地址;

(2) RS的網關不能,也不可能指向DIP;

(3) 請求報文由Director分發,但響應報文直接由RS響應給Client

(4) 不支持端口映射;

(5) RSOS必須得支持IP隧道;

 

六、lvs-fullnat

  lvs-fullnat並不是LVS官方的模型,這是由淘寶開發團隊開發的一種模型,並沒有被官方收錄至LVS中,要使用lvs-fullnat模型需要重新經內核打補丁,並重新編譯內核。

  lvs-fullnat:通過請求報文的源地址爲DIP,目標爲RIP來實現轉發;對於響應報文而言,修改源地址爲VIP,目標地址爲CIP來實現轉發;

wKiom1VufO6CJj9gABzWtCbaBkw260.bmp

架構特性:

(1) RIP,DIP可以使用私有地址;

(2) RIPDIP可以不在同一個網絡中,且RIP的網關未必需要指向DIP

(3) 支持端口映射;

(4) RSOS可以使用任意類型;

(5) 請求報文經由Director,響應報文經由Director

 

七、LVS調度算法

類型算法
說明
靜態方法RR
round-robin, 輪詢;
WRRweighted round-robin, 加權輪詢;Overhead=conn/weight
SHSource ip Hashing,源地址哈希;把來自同一個地址請求,統統定向至此前選定的RS;
DHDestination ip Hashing, 目標地址哈希;把訪問同一個目標地址的請求,統統定向至此前選定的某RS;
動態方法LCleast connection:最小連接,Overhead=Active*256+Inactive
WLCweighted least connection:加權最小連接,Overhead=(Active*256+Inactive)/weight;默認的調度算法
SEDShorted Expection Delay:最短期望延遲,Overhead=(Active+1)*256/weight
NQNever Queue:永不排序
LBLCLocal-Based Least Connection,基於本地的最小連接:動態方式的DH算法
LBLCRReplicated LBLC:帶複製的LBLCR


八、LVS-NAT實現

  通過前面的原理介紹,這裏來實現一下lvs-nat模型,將要使用三臺虛擬機,客戶端就用物理機來訪問;RS-1RS-2的網卡要使用Vmware Workstation中的僅主機模式,Director要使用兩張網卡,一個用於當VIP一個用於當DIPDIP網卡要使用僅主機模式與後端RS使用一個私有網絡地址;

wKiom1VuikLBc2alAA1I8LUdPeU622.bmp

  Real Server分別開啓Web服務器用於測試,頁面就是種RealServer的名稱,使用rr調度算法進行輪詢,這樣更容易看出效果。

8.1 RealServer的配置

1)配置IP地址及網關

ifconfig 192.168.190.81/24 up  #設置IP地址,如果你已經設置好了,此步可以省略的

route add default gw 192.168.190.100   設置默認網關

[root@RS-1 ~]# route  -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.190.0   0.0.0.0         255.255.255.0   U    0      0        0 eth0
0.0.0.0         192.168.190.100 0.0.0.0         UG   0      0        0 eth0


2)啓動httpd服務

# service httpd start

8.2 Director的配置

1)配置IP地址

如果你已經設置好了,此步可以省略;

 

ifconfigeth0 172.16.9.100/16 up
 ifconfigeth1 192.168.190.100/24 up

2)開啓路由間轉發

echo 1 > /proc/sys/net/ipv4/ip_forward
[root@LVS ~]# cat/proc/sys/net/ipv4/ip_forward

1

3)配置LVS

如果你沒有安裝ipvsadm,需要在配置好yum源之後直接yum install ipvsadm即可;

ipvsadm -C
 ipvsadm -A -t 172.16.9.100:80 -s rr
 ipvsadm -a -t 172.16.9.100:80 -r192.168.190.81:80 -m
 ipvsadm -a -t 172.16.9.100:80 -r192.168.190.82:80 -m

#-C:表示清空ipvsadm中的所有定義的集羣服務

#-A:定義集羣服務

#-t:承載的應用層協議爲基於TCP協議提供服務的協議;其service-address的格式爲“VIP:PORT”,如“172.16.100.6:80”;

#-s:指定調度算法,默認爲wlc

#-a:創建集羣服務上的RS

#-r:指明RSserver-address格式一般爲“IP[:PORT]”;注意,只支持端口映射的lvs類型中才應該顯式定義此處端口

#-m:指明LVS的類型爲nat

[root@LVS ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP 172.16.9.100:80 rr
 -> 192.168.190.81:80           Masq    1      0         0         
 -> 192.168.190.82:80           Masq    1      0         0

 

4)在瀏覽器中訪問測試

在瀏覽器中輸入VIP的地址,不斷的刷新將會出現輪詢的效果。

wKiom1Vuin7BMY1dAAoVQKHKjJM283.bmp

wKioL1VujC7z5jNBAApd0JnomZs157.bmp


 

 

九、LVS-DR實現

 

wKiom1VuiuiyBovhABBu3Ftx8yw838.bmp

  Real Server分別開啓Web服務器用於測試,頁面就是種RealServer的名稱,使用rr調度算法進行輪詢,這樣更容易看出效果。

9.1 Real Server的配置

         Real Server的配置都是一樣的,這們就介紹一個Real Server的配置即可。

1)抵制ARPVIP的請求

echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

2)配置VIP地址及路由

ifconfig lo:0 172.16.9.100 netmask255.255.255.255 broadcast 172.16.9.100 up
route add -host 172.16.9.100 dev lo:0

3)啓動HTTP服務

service httpd start

4)在瀏覽器中訪問測試

wKiom1VuixiBxe_9AAh-eChlzhw206.bmp

wKioL1VujMPyWZUIAAoedEIrbnY523.bmp


 

9.2 Director上的配置

1)配置VIP

ifconfig eth0:0 172.16.9.100 netmask255.255.255.255 broadcast 172.16.9.100 up
route add -host 172.16.9.100 dev eth0:0

2)配置ipvs服務

 ipvsadm-A -t 172.16.9.100:80 -s rr
 ipvsadm -a -t 172.16.9.100:80 -r 172.16.9.81-g
 ipvsadm -a -t 172.16.9.100:80 -r 172.16.9.82-g

3)檢查ipvs配置信息

[root@node-03 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port          Forward Weight ActiveConn InActConn
TCP 172.16.9.100:80 rr
 -> 17.16.9.81:80               Route   1      0         0        
 -> 17.16.9.82:80               Route   1      0         0

4)在瀏覽器中瀏覽

不斷的刷新將會出現輪詢的效果。


wKiom1Vui1iwlhT-AAsr3EwWFBQ773.bmp

wKioL1VujQrCZe65AAyttIQFck0891.bmp

 


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