centos6 LVS-DR模式---分析


LVS是什么就不多說了。

先上拓撲圖

 

1台LVS   3台Realserver    一個客戶端。  環境全部模擬全在內網環境(selinux和iptables關閉)

先簡略說一下安裝步驟:

LVS上:

1、先將本地eth0分出一個子網卡 eth0:1 並配置上VIP(我的VIP為 192.168.0.36)

ifconfig eth0:0 192.168.0.36 broadcast 192.168.0.36 netmask 255.255.255.255 up

 

2、再將外部所有請求VIP的流量都導向這塊網卡,所以需要添加路由

route add -host 192.168.0.36 dev eth0:0

 但是這樣只是臨時添加,如果重啟network 服務,或者重啟系統。條目會消失,至於怎樣永久,有好多種辦法,比如rc.local(查看路由表 route)HU代表路由到一個主機上,UG即代表路由到路由器。

 

3、在配置路由轉發,修改 /etc/sysctl.conf 文件

將net.ipv4.ip_forward = 0 的值改成 1     然后使用sysctl -p 命令來刷新保存的文件。

這個改動可以理解成將eth0 和eth0:1 中間做一個路由條目,如果為0的話,2塊網卡可以理解成是不想通的即可。

 

4、在來配置安裝ipvsadm (yum安裝or 源碼)

源碼安裝沒有什么特殊的。只不過要先安裝依賴包libnl*

這里我們使用yum安裝,也是官網最新的1.2.6ipvsadm。

yum -y install ipvsadm

 配置ipvsadm

ipvsadm -C     #清楚表內的規則
ipvsadm -At 192.168.0.36:80 -s wrr          
ipvsadm -at 192.168.0.36:80 -r 192.168.0.38:80 -g -w 1   
ipvsadm -at 192.168.0.36:80 -r 192.168.0.162:80 -g -w 1
ipvsadm -at 192.168.0.36:80 -r 192.168.0.41:80 -g -w 1
/etc/init.d/ipvsadm start  #啟動lvs  (如果發現找不到/etc/sysconfig/ipvsadm報錯就使用service ipvsadm save 保存條目)

# -A相當於定義一個模塊,模塊的規則為VIP的80端 口如果想在VIP上定義其他端口則會報錯。 -s:輪詢規則,詳細請看文章末尾鏈接。

# -a添加規則 -r為后端真是Rserver服務器這里只能指定80端口,我試過添加其他端口,均會被自動修改成80

添加之后可以在 vi /etc/sysconfig/ipvsadm 查看條目,也可以使用ipvsadm -Ln 來查看

 

在配置Realserver端:(如配置不理解請看LVS配置)

ifconfig lo:0 192.168.0.36 broadcast 192.168.0.36 netmask 255.255.255.255 up
route add -host 192.168.0.36 dev lo:0

 在/etc/sysctl.conf 末尾加上 (ARP抑制)

#LVS arp
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

 Realserver 配置完畢。其余2台也都一樣

 

#=================分=========析=========區==================

一、當客戶端發送一個請求到VIP時ip數據包(ipdata)攜帶的什么呢。

       RSC-IP  DST-IP 和請求內容以及各種校驗,這里我關注我們關注的。

       細分一下過程:

 1、請求到達交換機 (請求的IP為VIP) 這個時候假設交換機上沒有ARP緩存。

   2、交換機會說:我本地沒有VIP對應的MAC,我去幫你找吧。

   3、交換機瞬間像所有網口發送ARP廣播包。此ARP的廣播包里DST-IP為VIP

   4、而此時Realserver和交換機相連的端口為eth0。但是route會把這個請求送達給lo:0上,由於arp_ignore=1的緣由,只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求.所以lo:0會忽略掉這個ARP請求,但是LVS沒有設置。所以LVS會告訴交換機,我是VIP。

   5、交換機記錄VIP以及對應的MAC,將ipdata交給了LVS。

   6、LVS將ipdata拆包看到請求的是VIP:80端口,遂查詢LVS規則+輪詢算法,將確定處理該request的Realserver的IP(即RIP假設為192.168.0.41)

   7、LVSDR模式獨有的MAC尋址,這個時候LVS本地沒有Rserver的MAC,遂發ARP廣播包說:RIP為Realserver的MAC是多少。

   8、ARP包經過eth0口流入每個Rserver,Rserver 這個時候會通過系統內核,內核說:這個ARP請求的是本地網卡的IP,我們要給出回應。就會給出ARP的應答包發給LVS的DIP。

   9、LVS將Rserver應答給自己的MAC存入自己的arp -n 緩存表中,並將ipdata包的外層繼續封裝一層MAC尋址而此時的SRC-IP 仍未CIP ,DST-IP 為VIP 但是SRC-MAC為DIP即LVS的MAC。DST-MAC為RIP的MAC

   10、數據包到達Realserver時,Rserver驗證這個數據包是不是自己能處理的需要符合2個要求 1、MAC是自己的 2、IP是自己的 此時lo:0綁定的VIP就起到作用,將ipdata數據包送上CPU。

   11、Realserver處理完成之后,SRC-IP 為VIP,DST-IP 為CIP SRC-MAC為RMAC DST-MAC為CMAC (現實環境中為網關的,即CIP為路由器網關)

下圖為對應其過程

為驗證7過程,使用tshark抓取 192.168.0.41網口流量驗證ARP包內為RIP而非VIP

清空LVS本地緩存,查看arp緩存用arp -n 清楚ARP緩存使用

arp -n|awk '/^[1-9]/{print "arp -d  " $1}'|sh -x

 

另外LVS規則算是內核方法,用netstat -ntulp也顯示不了其偵聽的端口。啟動日志在/var/log/message中

另外感謝吳大大(大牛勒)

                                                      如果有誤,請聯系博主,博主會立即更改。請發郵件至 907765003@qq.com

 

LVS十種均衡算法 : http://www.linuxidc.com/Linux/2013-05/84249.htm

ARP抑制原理:http://www.ddvip.com/tech/100075689.html

wireshake抓包:http://www.centoscn.com/IT/2013/0331/180.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM