lvs負載均衡, ipvs的NAT模式,DR模式的實現,

lvs是一種集羣技術,採用IP負載均衡技術和基於內容請求分發技術。調度器(Director)具有很好的吞吐率,將請求均衡地轉移到不同的服務器上處理,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。

lvs的用戶空間的命令行管理工具爲ipvsadm,ipvs是工作在內核中netfilter的INPUT的鉤子函數上,對進入的報文在沒有進入用戶空間前,對這些報文進行操作。

lvs的工作類型有四種,分別是lvs-nat,lvs-dr,lvs-tun和lvs-fullnat。最常用的爲前兩種(lvs-nat,lvs-dr)。

lvs-nat:是一種最簡單的方式,所有的RealServer將自己的網關指向Director。客戶端請求的都是Director上的IP,然後報文到Director上以後經過DNAT轉換,把請求Director的報文重新封裝成報文,以Director的IP爲源地址,然後請求RS(RealServer),RS直接響應給Director,然後由Director把結果發給客戶端。簡單來說就是:多目標的DNAT(iptables),它通過修改請求報文的目標IP地址(同時可能會修改目標端口)至挑選出某RSRIP地址實現轉發;

lvs-nat類型的結構圖:

 

 

                            wKiom1Yjmb7hAA-wAAGWTG53_RA148.jpg


lvs-nat的特點:   

  (1)RS應該和DIP應該使用私網地址,且RS的網關要指向DIP

  (2)請求和響應報文都要經由director轉發;極高負載的場景中,director可能會成爲系統瓶頸;

  (3)支持端口映射;

  (4)RS可以使用任意操作系統(OS)

  (5)RSRIPDirectorDIP必須在同一IP網絡;

   優點:實現方便簡單,也容易理解;

   缺點:Director會稱爲一個優化的瓶頸,所有的報文都要經過Director,如果Director壞掉,後果很嚴重


lvs-dr:是通過修改請求中的目標MAC地址進行轉發的;

lvs-dr的特點:

 (1) 保證前端路由器將目標IP爲VIP的請求報文發送給director,後端的RS要能以VIP的地址響應給客戶端; 

解決方案:

靜態綁定

arptables

修改RS主機內核的參數      

  (2) RS的RIP可以使用私有地址;但也可以使用公網地址;

  (3) RS跟Director必須在同一物理網絡中;

  (4) 請求報文經由Director調度,但響應報文一定不能經由Director;

  (5) 不支持端口映射;

  (6) RS可以大多數OS;

  (7) RS的網關不能指向DIP;

   爲了讓RS的不響應VIPARP響應,需要配置arp_ignore=1  別人來請求時,當別從哪個接口進入,就讓那個接口的地址響應,如果不是就不響應;arp_announce=2只讓自己的物理網卡的地址通告給別人;爲了讓RS以VIP爲源地址把報文發送給客戶端,RSRIP在物理網卡上,VIPlo(虛擬的設備)上,報文出去時要定義走lo這個設備,就是加一條路由(route add -host VIP dev lo:0)這樣就能保證RS響應客戶端時的源IPVIP。

lvs-tun:就是IP隧道,就是將一個IP報文再封裝一個IP報文的首部,這樣可以使得目標爲一個IP地址的數據報文能被封裝和轉發到另一個IP地址。

lvs-fullnat:就是在報文進來時做SNAT和DNAT。

後兩種不是很常見就不詳細說了

lvs-dr的架構圖

wKiom1YjnAOSeYgBAANAYYk6mPg981.jpg

 

這只是一個大概的圖,DIP,VIP,RIP同一網段的是這樣

DIP,VIP,RIP不同網段的架構圖爲:

wKiom1YjnEjByWHtAAIavl2CcdM817.jpg


 下面是一個lvs-nat的示例:

用物理機作爲測試機,作爲客戶端172.16.249.123這臺機器爲Director,它有兩塊網卡,一塊配置172.16.249.123爲外網地址,另一塊配置爲192.168.36.1做內網地址

192.168.36.2192.168.36.3web服務器即爲RealServer,這兩臺內網主機的網關指向192.168.36.1

內網的網絡類型選爲VMnet2

做好之後測試內網之間能不能通信,

wKiom1Yjmp3i_vz-AAHuC-V9o6c354.jpg


wKioL1Yjm0fSBDBFAAJIpbeAT2k233.jpg

然後爲爲其打開httpd服務,然互配置測試頁,爲了演示效果我們把兩臺web服務器的頁面配成不同的,(實際中是一模一樣的資源的)

打開httpd服務,然後測試頁面內容如下:

<h1>Hello , This is 192.168.36.2</h1>

<h1>This is 192.168.36.3</h1>

 

Director安裝ipvsadm,把本地光盤掛上,然後寫好yum源的指向

yum install ipvsadm

然後在Director上測試下,能否正常訪問

wKioL1Yjm6ODYCm8AACQv0uZkPY654.jpg

保證Director的防火牆是關的

wKiom1Yjm6biRhFqAAGJl_7MdhE937.jpg

Director的核心轉發要打開

wKioL1Yjm9ygNfDaAABqPZvm1SU709.jpg

 

然後在Director上做ipvs規則

首先添加集羣服務 ipvsadm -A  -t 172.16.249.123:80 -s rr  -t 172.16.249.123:80是指這個地址(172.16.249.123)的tcp協議的80端口開啓集羣服務 –s rr 指明調度器算法爲論調

 

ipvsadm -A -t 172.16.249.123:80-s rr

wKiom1YjowizhYk_AADXxBQ-WPI924.jpg

然後添加集羣服務中的RSRealServer

wKioL1Yjo0SzToFBAAFGmC6WokQ826.jpg

 

這樣就做好了,然後測試下

wKiom1YjozSDoBlUAAB1grtT-qU469.jpg


然後你在刷新下,

wKioL1Yjo1vA16b8AACUjdsfEG8418.jpg

但是你的httpd服務不能開啓長鏈接,要不就會出新好幾次一臺RS纔會換下一臺

Driector中查看下,也可以看到每個主機響應一次服務

wKiom1Yjo1Cj_9_3AADcjcy206o374.jpg

 

這些規則使用/etc/sysconfig/ipvsadm 把規則保存到/etc/sysconfig/ipvsadm

ipvsadm –R <  /etc/sysconfig/ipvsadm 重載這個規則

wKioL1Yjo9CTCb1nAAJdKwhgkcE848.jpg

 

 


lvs-dr的示例:

我們用VIPDIP,RIP在同一網段來做一下,這樣簡單一些

首先規劃Director的網卡爲eth0,採用橋接模式,只使用一塊網卡

地址配置爲DIP172.16.249.123網關指向172.16.0.1VIP 放到eth0:0這個別名上172.16.249.199

RS1的網卡採用橋接,RIP1172.16.249.115網關指向172.16.0.1lo:0 VIP 172.16.249.199

RS2的網卡採用橋接,RIP2172.16.249.124  網關指向172.16.0.1lo:0 VIP172.16.249.199

首先把Director的另一塊VMnet2的網卡斷開,然後配置DIP172.16.249.123

RS1RS2的網卡改爲橋接,地址爲172.16.249.115172.16.249.124

然後從RS上測試ping172.16.0.1   ping172.16.249.123都是通的證明網絡沒問題了

然後配置Director上的VIP 172.16.249.199/32,掩碼使用32位,就是讓它只做負載均衡器的調度用的

wKioL1YjpCqgu1oYAAM_7Kb_6-E023.jpg

這個時候RS主機ping VIP   172.16.249.199是通的

wKioL1YjpEHw54YUAAM3ksJGgRM450.jpg

然後要限制從哪個接口進的報文,要讓哪個接口去響應

Diretor的這個配置不必須,但RS的必須配置

route add -host 172.16.249.199dev eth0:0

wKioL1YjpHDgzSS0AAEB75PcVEs336.jpg

然後設置RS

首先要先加這兩個參數

arp_ignore=1

arp_announce=2

然後配置VIP,和限定報文從哪個接口進就從哪個接口出去

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用徹底,把這一個也配上

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用徹底,把這一個也配上

然後配置VIP地址

ifconfig lo:0 172.16.249.199/32 broadcast172.16.249.199 up

或者ifconfigeth0:0 172.16.249.199 netmask 255.255.255.255 broadcast 172.16.249.199 up

route add -host 172.16.249.199 dev lo:0

然後把另一臺RS也這樣配置

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用徹底,把這一個也配上

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用徹底,把這一個也配上

然後配置VIP地址

ifconfig lo:0 172.16.249.199/32 broadcast172.16.249.199 up

route add -host 172.16.249.199dev lo:0

這樣RS就做好了,剛纔web服務已經啓動了,爲了確認查看80端口是否啓用

然後在Director上使用RIP地址請求進行測試

wKioL1YjpLnCkziaAACilV6IXVo186.jpg

然後把Director上的以前做的規則清掉,

wKiom1YjpKaBSOVnAAC3L1xoAfM841.jpg

然後重新配置ipvsadm規則

ipvsadm -A -t 172.16.249.199:80 -s rr

ipvsadm -a -t 172.16.249.199:80 -r172.16.249.115 -g

ipvsadm -a -t 172.16.249.199:80 -r172.16.249.124 -g

wKioL1YjpPPiJgdWAAF7QI-Wq_4247.jpg

用物理機的瀏覽器訪問出問題了不能隨時論調,隔一段時間能切換,應該是瀏覽器緩存問題;打開一個虛擬機測試沒有問題

wKiom1YjpRqwPYkYAAHeRMbzgBk114.jpg

這樣做容易出現這樣的問題,在虛擬機下測試沒有問題,證明這個實驗是成功的,就是受網絡或者瀏覽器的影響,

 

 

下面我們用VIPDIP,RIP在不同網段來做一下(在物理機和Director之間加上一個路由器)

wKiom1YjpWChHwSJAAIavl2CcdM603.jpg

首先規劃Director的網卡爲eth1,採用VMnet2模式

地址配置爲DIP192.168.36.10 VIP 放到eth0:0這個別名上10.1.1.2

RS1的網卡VMnet2RIP192.168.36.8lo:0 VIP 10.1.1.2

RS2的網卡VMnet2RIP192.168.36.9lo:0 VIP 10.1.1.2

 

物理機的地址爲172.16.249.100

添加一條路由

route add 10.1.1.0 mask 255.255.255.010.1.1.1

首先要有一個路由器,打開一個虛擬機打開核心轉發功能,然後加入兩塊網卡(也可以一塊網卡),類型爲VMnet2,地址分別爲eth1192.168.36.1/24 eth1010.1.1.2/24 ;一塊爲橋接爲172.16.249.117

路由條目爲

wKioL1YjptjjVMy3AAEbcmxb2FY794.jpg

一臺虛擬機做Director,一塊網卡,網卡類型爲VMnet2,地址eth0DIP192.168.36.10/24

eth0:010.1.1.2/8

Director上要添加一條路由

route add  default  gw 10.1.1.1

RSIP地址爲192.168.36.8192.168.36.9默認網關指向192.168.36.1

這樣物理網絡就創建好了

ping測試下

Director上是能ping 172.16.249.110

wKioL1Yjpjrz8yPmAAGPie14vIE449.jpg

從物理機也能ping10.1.1.2

wKiom1YjpiDB7NKWAAEnGh0Kar8645.jpg

RS上能ping通物理機

wKiom1YjpkCBrT59AADecVrshis126.jpg

wKioL1YjpmeCkfXQAAE5IzfvxY8337.jpg


然後啓動RS80服務,就可以在Director上設置集羣服務了

Director上測試以下web服務


wKioL1YjptWSRYwOAACIp_CahdY098.jpg

然後在Director上做集羣服務配置,配置如下圖

wKiom1YjprDAkwpEAAFaQhara60384.jpg

然後在RS 配置這兩個參數

arp_ignore=1

arp_announce=2

然後配置VIP,和限定報文從哪個接口進就從哪個接口出去

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用徹底,把這一個也配上

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用徹底,把這一個也配上

然後配置VIP地址

ifconfig lo:0 10.1.1.2/32  broadcast 10.1.1.2 up      

route add -host 10.1.1.2 dev lo:0

然後把另一臺RS也這樣配置

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 爲了禁用徹底,把這一個也配上

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 >  /proc/sys/net/ipv4/conf/eth0/arp_announce 爲了禁用徹底,把這一個也配上

然後配置VIP地址

ifconfig lo:0 10.1.1.2/32 broadcast 10.1.1.2 up

route add -host 10.1.1.2   devlo:0

可以寫到腳本里

wKioL1YjptbzhM7LAAHWSHoT3bs030.jpg

然後執行腳本,驗證一下

wKiom1YjprCAJQOFAABysgvB_ME412.jpg

wKiom1YjprGziwWpAAKw67zcJw8662.jpg

wKioL1YjptfSANm_AACeqlgr9mI398.jpg

wKiom1YjprHjsJghAAKk_SVrA80507.jpg


然後進行測試

wKioL1YjptiR-nC4AABY91K1w34058.jpg

wKiom1YjprLBgRCjAAA9g-Y5taY091.jpg


Director上看一下,可以看到連接數是相同的

wKiom1Yjpq-AfU2fAAClil1hkBk530.jpg

從這裏可以看出來,上面DIP,VIP,RIP在同一網段時,物理機瀏覽器測不輪調,是因爲MAC地址影響的,這裏面加了個路由器,隔離了一些arp的廣播報文,所以物理主機沒有受到影響。


 這樣lvs的lvs-nat和lvs-dr的實驗就做完了,如有指教和建議可以留言。

 

 

 

 

 


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