-
LVS-DR負載均衡
-
LVS—DR工作模式
-
原理
-
-
客戶端訪問調度器的VIP地址,在路由器上應該設置VIP跟調度器的一對一的映射關系,調度器根據調度算法將該請求“調度“到后端真實服務器,真實服務器處理完畢后直接將處理后的應答報文發送給路由器,不經過調度器,這樣調度器的壓力就降低了一半,可以支持的節點也就增加了。
-
映射關系:訪問VIP的請求的下一跳應該是調度器的IP地址。
-
-
產生的問題
-
arp請求出現一個IP對應多個mac地址的問題
-
當網關第一次做arp請求廣播尋找VIP所在的mac地址,但是因為調度器和網站都承載了VIP,本應該只有調度器做應答,但是這樣都做了應答,那么網關在接收到同一個IP的新的mac地址后,就會更新arp表,這樣下次請求,網關就不會將請求轉發給調度器,這就不對了。
-
解決辦法:
-
在web服務器上把承載VIP的設備,讓它忽略arp請求,在內核文件中添加arp_ignore=1
-
arp_ignore=1 :系統只會響應當前網卡的arp請求(系統只會響應哪些接收到arp請求的接口上配置的”本地”IP地址的arp請求,如果一個arp請求是通過eth0接口接收到的,但請求的地址是在eth1上配置的,那么系統就不會做出響應)例本實驗中web服務器的網卡ip與lo承載的VIP.
-
當前網卡,實際承載流量傳輸的IP地址
-
-
-
-
-
路由器arp混亂的問題,也會出現一個IP地址對應多個mac地址。
-
當web服務器出完請求后,需要做應答,應答報文中,源IP地址應該是VIP,經過負載均衡之后每一臺web服務器都會通過VIP去做應答,這樣對于網關來說同一個IP對應了多個mac地址,這樣就造成了路由器arp記錄混亂的問題。
-
解決辦法
-
arp_announce=2:該參數的目的是為了讓承載的VIP不對應答做響應。
-
當設置該參數時,web發送arp請求建立與網關的連接時,總會選擇真實承載網卡流量的IP地址作為發送方的IP地址。
-
-
-
-
DR直接路由的目的
-
當web服務器做應答時,必須用vip做為源IP來應答,雖然在web服務器上承載了兩個IP,但是如果不添加任何策略,那么將無法決定應答報文中使用VIP作為源IP地址。
-
解決辦法
-
route add -host 192.168.10.172 dev lo:0
-
添加路由策略,將去往172的數據包的封裝,用lo:0所承載的VIP來做封裝。
-
-
-
-
-
-
-
實驗操作
-
拓撲
-
-
為了方便實驗,客戶端與群集網絡之間應該有一個路由器,路由器上應該配置IP與調度器一對一的映射關系,此拓撲省略了該過程。
-
-
調度器服務器
-
添加一個子接口作為承載VIP的設備
-
cp ifcfg-ens33 ifcfg-ens33:0
-
-
調整內核參數,該參數是為了不讓調度器發送icmp重定向消息,該消息的目的是為了當發現一個更加短,有效的路徑后,它會通知數據包的原始發送者,這樣更新了路由線路后,就會繞過調度器,這是不被允許的。
-
net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 systctl -p
-
-
安裝ipvsadm并添加策略
-
ipvsadm -A -t 192.168.10.172:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1 [root@localhost ~]# ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 1
-
-
關閉內核安全機制與防火墻
-
-
節點服務器(web服務器)
-
關閉內核安全機制與防火墻
-
配置虛擬IP地址
-
在lo網卡上設置子接口
-
cp ifcfg-lo ifcfg-lo:0
-
DEVICE=lo:0 NETMASK=255.255.255.255 IPADDR=192.168.10.172 ONBOOT=yes
-
當一個子網掩碼為32后,其廣播,網絡,主機地址都只有一個,自成一個網段,這樣的情況下,即使同一個局域網內有兩個相同的32的子網掩碼,并且IP也相同也不會出現地址沖突。
-
32的子網掩碼通常只用來做封裝數據包,或用改地址做為管理,并不會實際參與到通信過程中。
-
-
-
-
-
做DR直接路由
-
route add -host 192.168.10.172 dev lo:0
-
-
調整內核參數
-
net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
-
-
之后安裝網站軟件,創建測試頁面進行測試
-
-
-