深入淺出Linux LVS的DR模式的關鍵點

2021-09-21 05:57:43 字數 3527 閱讀 9513

dr模式的關鍵點

但在dr模式下,對應相應回去的資料報是realserver直接相應的,並沒有通過負載均衡排程器,因此這個被選中的真實伺服器上必須也要配置乙個vip才能保證,相應回去的源ip是當初客戶端訪問的目標ip位址。

那麼問題來了,負載均衡排程器和真實伺服器都在同乙個區域網內部,都有vip這個位址,那麼使用者發來的請求到底我們的路由就不知道該轉給哪一台伺服器了。

因此真實伺服器的vip位址應該配置成對外隱藏,對內可見,那麼什麼樣的配置方式才能達到上述的效果呢,答案就是在我們的回環介面上配置這個vip,我們都知道在linux中ifconfig可以檢視當前的網路配置資訊。在資訊表裡,我們一般都會發現乙個叫lo的東西。

其實,lo 是 loopback 的縮寫,也就是環迴的意思,linux系統缺省會有一塊名為 lo 的環迴網路介面。而你真正的網絡卡一般則被linux系統識別成名為 eth0, eth1 這樣的網路介面。

一般,lo介面對應的ip位址為 127.0.0.1, ip位址可通過ifconfig來檢視。當你從一台linux主機向自身傳送資料報時, 實際上的資料報是通過虛擬的lo介面來傳送接受的,而不會通過你的物理網絡卡 eth0/eth1... 。

lo環迴網絡卡有乙個特點,就是只在網路層之上可見(包括網路層),因此不會跟lvs的vip衝突。當然這裡需要注意,真實伺服器的vip位址需要設定non-arp的形式。

因為使用者的請求想要先到達負載均衡排程器需要先通過arp協議廣播形式獲取負載均衡排程器的mac位址,然後將資料幀發到負載均衡排程伺服器上,這個獲取mac位址的過程一般是通過arp協議廣播的形式,下面我們說一下arp協議獲取mac位址的核心。

主機向自己所處的網路廣播乙個arp請求(乙太網幀首部的硬體位址填ff:ff:ff:ff:ff:ff表示廣播),該請求包含的目標機器的網路位址,這個請求會被當前區域網內的所有主機都會收到,在資料鏈路層都會收到然後處理交給上層,目的主機收到廣播的arp請求,發現與ip位址與本機相符合就發乙個arp應答給源主機,將自己的mac位址寫到應答包中。而其他主機接收後發現與自己的ip不符合就會直接丟棄。之後會有乙個arp快取,這個快取來進行儲存ip位址和mac位址的對映關係,這樣,就不需要進行多次的arp請求了。

那如果通過arp協議獲取mac位址的過程,真實伺服器的接受到arp請求,發現自身內部配置有相應的ip位址,那麼會發乙個arp應答給源主機,導致mac位址不是負載均衡排程器的mac位址,這時候雖然因真實伺服器在環迴網絡卡上也繫結了vip,所以也能正常處理請求,業務暫時不會受到影響,但時此時由於客戶端請求沒有發到lvs的虛擬服務ip上,所以lvs的負載均衡能力沒有生效。造成的後果就是,真實伺服器一直在單節點執行,業務量過大時可能會出現效能瓶頸。

我們需要在linux伺服器上配置linux核心引數arp_ignore和arp_announce。

首先看一下這個兩個配置項的引數:

arp_ignore:(回應arp)

1:只回應target ip是接收網口的ip的arp查詢請求

2:只回應target ip是接收網口的ip的arp查詢請求,且sender ip必須與該網口屬於同一網段

4-7:保留未使用

8:不回應所有的arp查詢

arp_announce: (選擇arp宣告時候使用的sender ip)

當本地應用程式嘗試通過eth2傳送ip0的ip資料報時。如果目標節點的mac位址沒有解析。這個linux伺服器x將傳送arp請求來獲取目標(或閘道器)的mac位址。在這種情況下,arp請求包的源ip位址是什麼呢?ip0(ip資料報的中的源ip)或ip2(傳送arp請求包的網路介面eth2的ip)?

其實對於大部分路由器來說arp請求包中的源ip位址使用傳送arp請求包的網路介面上配置的ip位址(在上面的例子中為ip2)。

但是,linux伺服器的行為是點不同。在linux伺服器中通過linux的核心資料arp_announce,arp請求中源位址的選擇是完全可配置。

如果我們想在arp請求中使用ip2而不是ip0,我們應該把arp_announce的值改為1或2。預設值為0 - 允許使用ip0作為arp請求包中的源ip。其實arp_announce是為了解決linux伺服器作為路由器時的arp問題,因為路由器一般是動態學習arp包的(一般動態配置dhcp的話)。當內網的linux機器要傳送乙個到外部的ip包,那麼它就會請求路由器的mac位址,傳送乙個arp請求,這個arp請求裡面包括了自己的ip位址和mac位址。而linux預設是使用ip資料報的源ip位址作為arp裡面的源ip位址,而不是使用傳送裝置上面網路介面卡的ip位址 (預設arp_announce的值為0)。

這樣在lvs架構下,所有arp請求包的源位址都是同乙個vip位址,那麼arp請求就會包括vip位址和裝置 mac。而路由器收到這個arp請求就會更新自己的arp快取,這樣就會造成ip欺騙了,vip被搶奪,所以就會有問題。

為了減少arp請求的次數,當主機接收到詢問自己的arp請求的時候,就會把源ip和源mac放入自 己的arp表裡面,方便接下來的通訊。如果收到不是詢問自己的包(arp是廣播的,所有人都收到),就會丟掉,這樣不會造成arp表裡面無用資料太多導致有用的記錄被刪除。

1,準備3臺虛擬機器

2,先配置3臺虛擬機器的網路:

eth0,配置在乙個網段

dip,rip在乙個網段

3,配置lvs的vip

ifconfig eth0:0 192.168.9.100/24

echo 「1」 > /proc/sys/net/ipv4/ip_forward

4,調整rs的響應。通告級別(每一台rs都配):

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

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

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

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

5,配置rs的vip(每一台rs都配)

ifconfig lo:8 192.168.9.100 netmask 255.255.255.255

6,啟動rs上的httpd

客戶端驗證:rip:80 能顯示

vip:80不能顯示

7,lvs——ipvsadm

yum install ipvsadm -y

ipvsadm -a -t 192.168.9.100:80 -s rr

ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.12 -g

ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.13 -g

ipvsadm -ln

瀏覽器重新整理: 訪問vip

ipvsadm –lnc

netstat -natp

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...

深入淺出ShellExecute

深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...