1. 程式人生 > >初識LVS(三)——DR工作模式實際環境中的應用

初識LVS(三)——DR工作模式實際環境中的應用

lvs dr

背景介紹

LVS的NAT模型所有的請求和響應報文會經過director,此時director就成為了性能瓶頸,而為了解決這個問題LVS也默認采用的是DR模型(下圖),請求報文(藍色)向director發出請求,響應報文(紅色)由RS服務器直接返還給用戶不經由director,通常RS的網關都是指向IDC機房的出口路由,這樣性能比通過director要好很多。VIP為公網IP地址,RIP和DIP需要連接在同一物理交換設備上,只要中間沒有隔路由器,即使不是同一網段也可以,大多數情況RIP和DIP都位於內網所以習慣上將它們放在同一網段。

技術分享

實驗介紹

為便於實驗,將上圖簡化下面的結構,目的是演示VIP和DIP在不同的網段。本實驗在workstation上進行模擬,所有設備連載VMnet1虛擬交換機上,創建5臺虛擬機,操作系統版本為CentOS6.5

技術分享

操作步驟

1.在路由器上添加20網段地址,並開啟核心轉發功能,其他設備的網關都指向路由器

]# ip addr add 172.16.20.40/24 dev eth0

]# sysctl -w net.ipv4.ip_forward=1

2.給director的本地接口綁定VIP地址,安裝ipvsadm包並設置規則

]# yum install ipvsadm.i686 -y

]# ip addr add 172.16.10.100/32 dev eth0

]# ipvsadm -A -t 172.16.10.100:80 -s rr

]# ipvsadm -a -t 172.16.10.100:80 -r 172.16.20.30 -g

]# ipvsadm -a -t 172.16.10.100:80 -r 172.16.20.30 -g

註:經測試VIP地址也可綁定到lo接口,必須是32位掩碼

3.修改realserver內核參數,開啟arp抑制,並在lo接口綁定VIP地址。為演示效果給realserver安裝httpd服務,設置不同的主頁(步驟略)

]# 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

]# ip addr add 172.16.10.100/32 dev lo

註:經測試VIP地址也可綁定到本地接口,必須是32位掩碼

4.適用客戶端訪問172.16.10.100測試效果,至此操作全部完成

補充說明

在綁定VIP地址時註意,在使用ip或ifconfig綁定地址時一定要將地址設置為32位掩碼,即172.16.10.100/32,否則網站無法正常訪問。以realserver為例,在本地接口綁定32位掩碼的VIP地址,或在lo接口綁定任意掩碼長度的VIP地址,路由條目保持不變

技術分享

如果本地接口綁定非32位掩碼的VIP地址,以24位掩碼為例,會增加一條路由條目

技術分享

第一次測試時將director和realserver上VIP地址掩碼寫成24位,即172.16.10.100/24,發現realserver的web頁面無法正常打開,在realserver上抓包發現,mac地址在傳輸過程中發生了改變

技術分享

對照mac表印證了DR模式下director時通過修改mac地址完成請求的調度,說明請求已送到realserver,但此時realserver未做出響應

技術分享

將realserver上的VIP地址掩碼改為32位恢復正常,需要註意的是:經測試realserver上VIP地址掩碼無論在哪種接口必須為32位,director上本地接口VIP地址掩碼是24位還是32位無所謂,lo接口VIP地址掩碼必須為32位

產生的疑惑

將director上本地接口VIP地址掩碼長度設置為32位,即172.16.10.100/32,客戶端172.16.10.10/24使用ping命令ping該地址,發送時會將目標地址(172.16.10.100)與自己的掩碼(255.255.255.0)做與運算,得出目標地址與自己(172.16.10.10)在同一網段,而返回時realserver同樣會使用目標地址(172.16.10.10)與自己的掩碼(255.255.255.255)做與運算,得出目標地址與自己(172.16.10.100)不在同一網段從而走默認路由。下圖時路由器上的抓包截圖

技術分享

對照下圖客戶端的arp地址表得知:客戶端發起ping命令後,由於判斷目標地址與自己在同一網段,所以直接會找到目標地址(紅框1);目標地址再返回時判斷目標地址於自己不在同一網段所以走默認路由(紅框2)

技術分享從紅框3、4看到數據流向在進入路由器後由172.16.10.40>172.16.10.100,對照路由器的arp地址表知道172.16.10.100與172.16.20.30認為是同一個mac地址,這也印證了DR模式在工作時director會將mac地址改為挑選出來realserver的mac地址再返回給路由器的機制,此處挑選出來的realserver是172.16.20.30,所以172.16.10.100與172.16.20.30是同一個mac地址,至於在ping操作時為啥會有這一步原因尚不清楚

技術分享

最後通過路由器將結果返回給客戶端(紅框5),至此結束。


本文出自 “兔樣兔森破” 博客,請務必保留此出處http://arkling.blog.51cto.com/2844506/1961544

初識LVS(三)——DR工作模式實際環境中的應用