2.6內核上一步一步配置LVS(Linux Virtual Server)

Linux Virtual Server(LVS)的配置方法,網上雖然是能搜到很多,但無外外乎是那幾個版本。這些版本大都只是寫了如何這樣配置,而沒有爲什麼這樣配置,還有很多基礎性的東西是默認讀者已知了,就沒有講明白。
最近成功在學校機房配置了一臺調度器(Director)、兩臺服務器(Real Server)的集羣服務器,用一臺客戶機來訪問。我的配置有比較高的可實現性,所有計算機都在同一個局域網內,不用配置網關。如果這樣的LVS配置成功了,之後配置更有有實用性的集羣也不難了。
本文參考了LVS中文站點上的《LVS在Fedora Core5上的配置指南(以Linux、FreeBSD、Solaris系統爲RealServer)》(http://zh.linuxvirtualserver.org/node/272),原文是一篇HOW TO性質的文章,並沒有對一些原理進行闡述。本文在此基礎上對一些細節的部分進行了說明(甚至是很基礎的地方,這些地方對於理解整個LVS系統有着重要的作用),並進行了一些改動,使得更具可實現性(所有機器都在同一網段),文中亦會說明要如何將其改爲可真正派上用場的集羣服務。
我假設你在此之前已經讀過了LVS的基本介紹,知道其用途和基本原理。如果你還沒有看過,請看一下LVS的官方站點(http://www.linuxvirtualserver.org,http://zh.linuxvirtualserver.org)。本文所述採用的是通過直接路由實現虛擬服務器(VS/DR)的方法,這裏先引述官方站點對此的介紹,並標出重點、加上註釋。
引用:
跟VS/TUN方法相同,VS/DR利用大多數Internet服務的非對稱特點,負載調度器中只負責調度請求,而服務器直接將響應返回給客戶,可以極大地提高整個集羣系統的吞吐量。該方法與IBM的NetDispatcher產品中使用的方法類似,但IBM的NetDispatcher是非常昂貴的商品化產品,我們也不知道它內部所使用的機制,其中有些是IBM的專利。
VS/DR的體系結構如圖3.6所示:調度器和服務器組都必須在物理上有一個網卡通過不分斷的局域網相連,如通過交換機或者高速的HUB相連。VIP地址爲調度器和服務器組共享,調度器配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文;所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的,只是用於處理目標地址爲VIP的網絡請求。(請看註釋1)


圖3.6:VS/DR的體系結構
VS/DR的工作流程如圖3.7所示:它的連接調度和管理與VS/NAT和VS/TUN中的一樣,它的報文轉發方法又有不同,將報文直接路由給目標服務器。在VS/DR中,調度器根據各個服務器的負載情況,動態地選擇一臺服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址改爲選出服務器的MAC地址,再將修改後的數據幀在與服務器組的局域網上發送。(請看註釋2)因爲數據幀的MAC地址是選出的服務器,所以服務器肯定可以收到這個數據幀,從中可以獲得該IP報文。當服務器發現報文的目標地址VIP是在本地的網絡設備上,服務器處理這個報文,然後根據路由表將響應報文直接返回給客戶。

圖3.7:VS/DR的工作流程
在VS/DR中,請求報文的目標地址爲VIP,響應報文的源地址也爲VIP,所以響應報文不需要作任何修改,可以直接返回給客戶,客戶認爲得到正常的服務,而不會知道是哪一臺服務器處理的。
VS/DR負載調度器也只處於從客戶到服務器的半連接中,按照半連接的TCP有限狀態機進行狀態遷移。


註釋1:VIP地址爲調度器和服務器(RealServer)把共享,那會不會引起IP衝突?答案是:不會。正因爲後面所說的,“調度器配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文;所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的”。在調度器上,VIP與其局域網內IP對外都是可見的;在服務器上,對外可見的是其在局域網上的IP(調度器調度的時候使用的IP),而在服務器上,VIP的性質就像是平常我們所熟知的127.0.0.1的性質一樣,它是一個loopback device,他只在網絡層之上可見(包括網絡層),這樣的loopback device用來模擬網絡適配器的行爲。就算沒有裝網卡,127.0.0.1與VIP的這樣IP都是可用的。
那爲什麼要在服務器上還放上一個VIP呢?
因爲當只修改了MAC地址的鏈路層幀發到服務器的鏈路層時(詳情請見註釋2),要想再向上提交到應用層去讓HTTP等服務器程序處理,必須再經過網絡層、傳輸層等,而要通過這些層是要經過目標IP的檢測的。
就像你要去參加一個婚禮,到門口,接待人員問你要參加誰的婚禮,人家這裏明明舉行的是李湘跟王老五的婚禮,你說你要參加謝霆鋒跟張柏芝的婚禮,接待人員一定是不讓你進去的。
那我就是又要說我要參加謝霆鋒跟張柏芝的婚禮,以要進入李湘跟王老五的婚禮現場,怎麼辦?那就在李湘跟王老五的婚禮現場裏安排一個自己人,你到時候對他說:“我要參加謝霆鋒跟張柏芝的婚禮”,他會意地笑一聲,就會幫你在李湘跟王老五的婚禮現場安排座位,讓你在裏面享受各種服務。
服務器裏的VIP就有這個自己人的性質,他對外不可見,當請求包到達網絡層以上的部分裏,就可以看到VIP,從而一路上去,到達應用層,享用HTTP等服務。
原理如圖(IPVS有沒有到網絡層?)


 
註釋2:在這裏可能有人會產生疑問,修改MAC地址就能讓請求包發往Real Server上嗎,不用改目標IP地址?答案是:是的。因爲交換機是一個鏈路層的設備,鏈路層的傳送單位是幀,他可不管網絡層的包裏放的是什麼IP地址(網絡層的ipv4包已經被封裝在幀裏)。當Direcotr把存有客戶機的請求包的那幀的MAC地址改成某臺Real Server的之後,就發出去,到交換機之後,交換機查找MAC地址與端口的對應表(端口MAC地址對應擁有些MAC地址的計算機),將這一幀發往與幀上MAC地址對應的端口,之後就發到計算機的鏈路層,如果MAC地址與網卡上的匹配,再向上層發送,直至應用層。

現在俺們來一步一步地在局域網內配置LVS。

 

 
 
四臺計算機按如上方式插在交換機上,分別按如下的方式配置四臺計算機。

Client
代碼:

ifconfig eth0 192.168.11.1 netmask 255.255.255.0 broadcast 192.168.11.255

當重啓時,上面的配置將會失效。如果要長期保留這個配置,請更改/etc/sysconfig/network-scripts/ifcfg-eth0文件。具體步驟請參考DIRECTOR的配置。

Director
首先安裝IPVSADM,就是LVS的管理工具。REDHAT的用戶可以到rpm.pbone.net上搜索ipvsadm,找到和自己系統對應的安裝包,在安裝文件夾裏執行如下命令:
代碼:
rpm ivh *.rpm

*.rpm代表rpm安裝包的文件名。
當IPVSADM安裝完成後,就可以配置DIRECTOR了,使用如下命令:
代碼:
ipvsadm –C
ipvsadm -A -t 192.168.11.200:80 -s wlc
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.21 -g
ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.22 -g
ipvsadm -Ln

每一行的命令信息可以查看IPVSADM的MAN。如果是要配置流媒體的服務器的話,應該打開UDP的包轉發。
下面配置網卡:
首先新建配置文件/etc/sysconfig/network-scripts/ifcfg-eth0:0如下:

代碼:
DEVICE=e th 0 : 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5
BROADCAST= 1 9 2 . 1 6 8 . 11 . 255

上面配置的是DIRECTOR的虛擬IP。

配置文件/etc/sysconfig/network-scripts/ifcfg-eth0如下:
代碼:
DEVICE=e th 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 .10
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5
BROADCAST= 1 9 2 . 1 6 8 . 11 . 255

上面配置的是DIRECTOR的真實IP。

再執行下面的命令以使上面對網絡的配置生效
代碼:
/etc/rc.d/init.d/network restart


RS1(RealServer1)的配置
Linux Realserver 配置的關鍵之一在於關閉 arp,這要配置/etc/sysctl.conf如下
代碼:

#f o r i p v s
n e t . ip v 4 . c o n f . l o . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . l o . a rp announ c e = 2
n e t . ip v 4 . c o n f . a l l . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . a l l . a rp announ c e = 2
n e t . ip v 4 . c o n f . d e f a u l t . r p f i l t e r = 1
#end o f i p v s

在/etc/sysconfig/network-scripts/ifcfg-eth0 中配置 ip 地址和網關。
代碼:
DEVICE=e th 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 . 21
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 0
BROADCAST= 1 9 2 . 1 6 8 . 11. 2 5 5

新建VIP 的網卡配置文件爲/etc/sysconfig/network-scripts/ifcfg-lo:0。
代碼:
DEVICE=l o : 0
ONBOOT=y e s
IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5


再執行下面的命令以使上面對網絡的配置生效
代碼:
/etc/rc.d/init.d/network restart


RS2(RealServer2)的配置
Linux Realserver 配置的關鍵之一在於關閉 arp,這要配置/etc/sysctl.conf如下
代碼:

#f o r i p v s
n e t . ip v 4 . c o n f . l o . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . l o . a rp announ c e = 2
n e t . ip v 4 . c o n f . a l l . a r p i g n o r e = 1
n e t . ip v 4 . c o n f . a l l . a rp announ c e = 2
n e t . ip v 4 . c o n f . d e f a u l t . r p f i l t e r = 1
#end o f i p v s

在/etc/sysconfig/network-scripts/ifcfg-eth0 中配置 ip 地址和網關。
代碼:
DEVICE=e th 0
ONBOOT=y e s
BOOTPROTO= s t a t i c
IPADDR= 1 9 2 . 1 6 8 . 11 . 22
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 0
BROADCAST= 1 9 2 . 1 6 8 . 11. 2 5 5

新建VIP 的網卡配置文件爲/etc/sysconfig/network-scripts/ifcfg-lo:0。
代碼:
DEVICE=l o : 0
ONBOOT=y e s
IPADDR= 1 9 2 . 1 6 8 . 11 . 2 0 0
NETMASK= 2 5 5 . 2 5 5 . 2 5 5 . 2 5 5


再執行下面的命令以使上面對網絡的配置生效
代碼:
/etc/rc.d/init.d/network restart


至此,一個LVS就配置好了,我們只要分別在Director,RS1,RS2的/var/www/html/文件夾下分別放入三個內容不同的名爲index.htm的文件,然後在Client的瀏覽器中輸入http://192.168.11.200,回車,不停的刷新,就會發現,有時看到的是放在RS1上的index.htm,有時看到的是RS2上的index.htm,而不會看到director上的index.html。因爲發現198.168.11.200的80端口的http請求報文都被轉發到到rs1或rs2上。
大功告成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章