LVS單機測試不負載

LVS單機測試不負載web

1、困惑

當咱們在我的PC上搭建虛擬機(Vmware)作LVS負載實驗的時候,咱們不管是在我的瀏覽器或者其餘虛擬機上訪問LVSVIP都會出現上時間刷新都出現同一個頁面的狀況。瀏覽器

那麼這種狀況是咱們的配置錯誤仍是虛擬機的緣由呢。緩存

2、環境

下面簡單交待下虛擬的環境:服務器

服務器名稱網絡

IP以及內容負載均衡

LB02curl

10.0.0.6 VIP:10.0.0.3測試

WEB01url

10.0.0.8 VIP:10.0.0.3 spa

頁面內容 yangliheng

WEB01

10.0.0.9 VIP:10.0.0.3

頁面內容 yyyy

 

LVS的配置以及WEB的配置的常規配置咱們就省略了。

重點說下抑制ARP的配置;

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

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

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

這些配置的做用就是在與確保上端路由設備去訪問VIP的時候能獲得惟一的MAC地址。

arp_ignore = 1即不迴應不是目標IP是物理網絡IPARP請求。確保了客戶端請求VIP的時候只會獲得LBMAC地址。

arp_announce = 2RS在回覆客戶端的時候,發送的ARP請求不以本身的VIP的爲源IP,確保了不會更新上端路由的ARP緩存,從而保證之後客戶端請求VIP的時候讀取路由器ARP緩存會獲得LBMAC地址。

3、初步測試

當咱們在另外一臺虛擬機上測試LVS的負載均衡的時候

[root@lb01 ~]# curl 10.0.0.3

yangliheng

[root@lb01 ~]# curl 10.0.0.3

yangliheng

[root@lb01 ~]# curl 10.0.0.3

yangliheng

[root@lb01 ~]# curl 10.0.0.3

yangliheng

[root@lb01 ~]# curl 10.0.0.3

yangliheng

[root@lb01 ~]# curl 10.0.0.3

yangliheng

能夠看到不論刷新多少次都是這個內容(WEB01的)

咱們在這個虛擬機上

[root@lb01 ~]# arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

10.0.0.3                 ether   00:0c:29:f4:80:e8   C                     eth0

這是查看10.0.0.3對應的MAC地址,正常來講10.0.0.3應該對應LB02上的MAC地址可是咱們分別查看LB02WEB01MAC地址

 

[root@lb02 ~]# ifconfig

eth0Link encap:Ethernet  HWaddr 00:0C:29:3E:C2:E0 

inet addr:10.0.0.6Bcast:10.0.0.255Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe3e:c2e0/64 Scope:Link

UP BROADCAST RUNNING MULTICASTMTU:1500  Metric:1

RX packets:46221 errors:0 dropped:0 overruns:0 frame:0

TX packets:16725 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

RX bytes:9061863 (8.6 MiB)  TX bytes:1574822 (1.5 MiB)

 

eth0:0Link encap:Ethernet  HWaddr 00:0C:29:3E:C2:E0 

inet addr:10.0.0.3Bcast:0.0.0.0  Mask:255.255.255.0

 

[root@web01 ~]# ifconfig

eth0Link encap:Ethernet  HWaddr 00:0C:29:F4:80:E8 

inet addr:10.0.0.8Bcast:10.0.0.255Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fef4:80e8/64 Scope:Link

UP BROADCAST RUNNING MULTICASTMTU:1500  Metric:1

          RX packets:12579 errors:0 dropped:0 overruns:0 frame:0

TX packets:9604 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1727749 (1.6 MiB)  TX bytes:1840750 (1.7 MiB)

 

eth0:0Link encap:Ethernet  HWaddr 00:0C:29:F4:80:E8 

inet addr:10.0.0.3Bcast:0.0.0.0Mask:255.255.255.255

UP BROADCAST RUNNING MULTICASTMTU:1500  Metric:1

發現10.0.0.3對應的是WEB01上的MAC地址,即下次訪問10.0.0.3的時候不會通過負載而是直接去訪問WEB01,因此就不會有負載均衡的效果了。

上述是在LINUX客戶端的測試,那麼咱們在咱們的PC瀏覽器上測試的時候也會出現這個問題

屢次訪問都是同一個內容。

那麼咱們懷疑也有多是ARP緩存的問題,咱們來驗證一下。

首先清空電腦的ARP緩存 arp –d

而後在瀏覽器訪問10.0.0.3

獲得的是

而後在CMD查看ARP緩存

發現了10.0.0.3對應的MAC地址,咱們在虛擬機上查看發現這個MAC地址是WEB02MAC地址,因此他之後訪問VIP的時候都是直接訪問WEB02

4、正確測試

那麼如何正確測試

一、LINUX客戶端上

測試前先狀況ARP緩存。

[root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

yyyy

[root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

yangliheng

[root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

yangliheng

[root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

yyyy

[root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

yyyy

[root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

yangliheng

二、在瀏覽器上

同理,刷新瀏覽器頁面前如今CMD中清空ARP緩存。

5、爲何

那麼爲何會出現這種狀況,會影響到咱們的生產環境嗎?

答案是不會,在生產環境中。

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

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

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

這些參數已經足夠保證咱們的局域網內的ARP正常

包括2個方面:不響應ARP請求,RSARP請求不會讓上端路由器更新)

那麼因爲咱們是在我的的電腦上去模擬這個LVS的環境,因此有些參數不會生效,好比arp_announce,因此仍是會更新ARP緩存,從而得不到負載的效果。

這個緣由多是由於不管是LINUX客戶端仍是PC 上虛擬出來的路由,並非真實的路由器,因此不支持這個參數吧。



相關文章
相關標籤/搜索