用LVS構架負載均衡Linux集群系統(tǒng)_第1頁
用LVS構架負載均衡Linux集群系統(tǒng)_第2頁
用LVS構架負載均衡Linux集群系統(tǒng)_第3頁
用LVS構架負載均衡Linux集群系統(tǒng)_第4頁
用LVS構架負載均衡Linux集群系統(tǒng)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、11/11用LVS構架負載均衡Linux集群系統(tǒng)最近有客戶需要一個負載均衡方案,筆者對各種軟硬件的負載均衡方案進行了調查和比較,從IBM sServer Cluster、Sun Cluster PlatForm等硬件集群,到中軟、紅旗、TurboLinux的軟件集群,發(fā)現無論采用哪個廠商的負載均衡產品其價格都是該客戶目前所不能接受的。于是筆者想到了開放源項目Linux Virtual Server(簡稱LVS)。經過對LVS的研究和實驗,終于在Red Hat 9.0上用LVS成功地構架了一組負載均衡的集群系統(tǒng)。整個實現過程整理收錄如下,供讀者參考。 選用的LVS實際上是一種Linux操作系統(tǒng)上

2、基于IP層的負載均衡調度技術,它在操作系統(tǒng)核心層上,將來自IP層的TCP/UDP請求均衡地轉移到不同的服務器,從而將一組服務器構成一個高性能、高可用的虛擬服務器。使用三臺機器就可以用LVS實現最簡單的集群,如圖1所示。圖1顯示一臺名為Director的機器在集群前端做負載分配工作;后端兩臺機器稱之為Real Server,專門負責處理Director分配來的外界請求。該集群的核心是前端的Director機器,LVS就是安裝在這臺機器上,它必須安裝Linux。Real Server則要根據其選用的負載分配方式而定,通常Real Server上的設置比較少。接下來介紹Director機器上LVS的

3、安裝過程。 圖1 LVS實現集群系統(tǒng)結構簡圖安裝 LVS的安裝主要是在Director機器上進行,Real Server只需針對不同的轉發(fā)方式做簡單的設定即可。特別是對LVS的NAT方式,Real Server惟一要做的就是設一下缺省的網關。所以構架集群的第一步從安裝Director機器開始。首先要在Director機器上安裝一個Linux操作系統(tǒng)。雖然早期的一些Red Hat版本,如6.2、7.2、8.0等自帶Red Hat自己的集群軟件,或者是在核中已經支持LVS,但是為了更清楚地了解LVS的機制,筆者還是選擇自行將LVS編入Linux核的方式進行安裝,Linux版本采用Red Hat 9

4、.0。如果用戶對Red Hat的安裝比較了解,可以選擇定制安裝,并只安裝必要的軟件包。安裝中請選擇GRUB做為啟動引導管理軟件。因為GRUB在系統(tǒng)引導方面的功能遠比LILO強大,在編譯Linux核時可以體會它的方便之處。 LVS是在Linux核中實現的,所以要對原有的Linux核打上支持LVS的核補丁,然后重新編譯核。支持LVS的核補丁可以從LVS的官方 下載,下載時請注意使用的Linux核心版本,必須下載和使用的Linux核版本相一致的LVS核補丁才行。對于Red Hat 9.0,其Linux核版本是2.4.20,所以對應核補丁應該是 /software/kernel-2.4/linux-2

5、.4.20-ipvs-1.0.9.patch.gz。筆者經過多次實驗,使用Red Hat 9.0自帶的Linux源代碼無法成功編譯LVS的相關模組。由于時間關系筆者沒有仔細研究,而是另外從上下載了一個tar包格式的2.4.20核來進行安裝,順利完成所有編譯。下面是整個核的編譯過程: 1.刪除Red Hat自帶的Linux源代碼 # cd /usr/src# rm -rf linux*2.下載2.4.20核 # cd /usr/src3.解壓到當前目錄/usr/src # cd /usr/src4.建立文件 # cd /usr/src # ln -s linux-2.4.20 linux-2.4

6、 # ln -s linux-2.4.20 linux 5.打上LVS的核補丁 # cd /usr/src# cd /usr/src/linux# patch 在打補丁時,注意命令執(zhí)行后的信息,不能有任何錯誤信息,否則核心或模組很可能無法成功編譯。 6.打上修正ARP問題的核補丁 # cd /usr/src# cd /usr/src/linux這一步在Director機器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server上必須做。 7.為新核心命名 打開/usr/src/linux/Makefile。注意,在開始部分有一個變量EXTRAVERSION可以自行定義。修

7、改這個變量,比如改成“EXTRAVERSION=-LVS”后,編譯出的核心版本號就會顯示成2.4.20-LVS。這樣給出有含義的名稱將有助于管理多個Linux核心。 8.檢查源代碼 # make mrproper這一步是為確保源代碼目錄下沒有不正確的.o文件與文件的互相依賴。因為是新下載的核,所以在第一次編譯時,這一步實際可以省略。 9.配置核心選項 # make menuconfig命令執(zhí)行后會進入一個圖形化的配置界面,可以通過這個友好的圖形界面對核進行定制。此過程中,要注意對硬件驅動的選擇。Linux支持豐富的硬件,但對于服務器而言,用不到的硬件驅動都可以刪除。另外,像Multimedia

8、 devices、Sound、Bluetooth support、Amateur Radio support等項也可以刪除。 注意,以下幾項配置對LVS非常重要,請確保作出正確的選擇: (1)Code maturity level options項 對此項只有以下一個子選項,請選中為*,即編譯到核中去。 *Prompt for development and/or incomplete code/drivers(2)Networking options項 對此項的選擇可以參考以下的配置,如果不清楚含義可以查看幫助: Packet socket Packet socket: mmapped IO

9、 Netlink device emulation* Network packet filtering (replaces ipchains) Network packet filtering debugging* Socket Filtering Unix domain sockets* TCP/IP networking* IP: multicasting* IP: advanced router* IP: policy routing IP: use netfilter MARK value as routing key IP: fast network address translat

10、ion IP: tunneling* IP: broadcast GRE over IP IP: multicast routing IP: ARP daemon support (EXPERIMENTAL) IP: TCP Explicit Congestion Notification support IP: TCP syncookie support (disabled per default) IP: Netfilter Configuration IP: Virtual Server Configuration (3)Networking options項中的IP: Virtual

11、Server Configuration項 如果打好了LVS的核補丁,就會出現此選項。進入Virtual Server Configuration選項,有以下子選項: virtual server support (EXPERIMENTAL) * IP virtual server debugging (12) IPVS connection table size (the Nth power of 2) IPVS scheduler round-robin scheduling weighted round-robin scheduling least-connection scheduli

12、ng scheduling weighted least-connection scheduling locality-based least-connection scheduling locality-based least-connection with replication scheduling destination hashing scheduling source hashing scheduling shortest expected delay scheduling never queue scheduling IPVS application helper FTP pro

13、tocol helper以上所有項建議全部選擇。 (4)Networking options項中的IP: Netfilter Configuration項 對于2.4版本以上的Linux Kernel來說,iptables是取代早期ipfwadm和ipchains的更好選擇,所以除非有特殊情況需要用到對ipchains和ipfwadm的支持,否則就不要選它。本文在LVS/NAT方式中,使用的就是iptables,故這里不選擇對ipchains和ipfwadm的支持: ipchains (2.2-style) support ipfwadm (2.0-style) support10. 編譯核

14、(1)檢查依賴關系 # make dep確保關鍵文件在正確的路徑上。 (2)清除中間文件 # make clean確保所有文件都處于最新的版本狀態(tài)下。 (3)編譯新核心 # make bzImage(4)編譯模組 # make modules編譯選擇的模組。 (5)安裝模組 # make modules_install# depmod -a生成模組間的依賴關系,以便modprobe定位。 (6)使用新模組 # rm /boot/System.map# ln -s /boot/System.map-2.4.20-LVS /boot/System.map# rm /boot/vmlinuz# ln

15、 -s /boot/vmlinuz-2.4.20-LVS /boot/vmlinuz(7)修改GRUB,以新的核心啟動 執(zhí)行完new-kernel-pkg命令后,GRUB的設置文件/etc/grub.conf中已經增加了新核心的啟動項,這正是開始安裝Linux時推薦使用GRUB做引導程序的原因。 grub.conf中新增容如下:title Red Hat Linux (2.4.20-LVS) root (hd0,0) kernel /boot/vmlinuz-2.4.20LVS ro root=LABEL=/將Kernel項中的root=LABEL=/改成 root=/dev/sda1 (這里

16、的/dev/sda1是筆者Linux的根分區(qū),讀者可根據自己的情況進行不同設置)。 保存修改后,重新啟動系統(tǒng): # reboot系統(tǒng)啟動后,在GRUB的界面上會出現Red Hat Linux(2.4.20-LVS)項。這就是剛才編譯的支持LVS的新核心,選擇此項啟動,看看啟動過程是否有錯誤發(fā)生。如果正常啟動,ipvs將作為模塊加載。同時應該注意到,用LVS的核啟動后在/proc目錄中新增了一些文件,比如/proc/sys/net/ipv4/vs/*。 11.安裝IP虛擬服務器軟件ipvsadm 用支持LVS的核啟動后,即可安裝IP虛擬服務器軟件ipvsadm了。用戶可以用tar包或RPM包安裝

17、,tar包可以從以下地址 /software/kernel-2.4/ipvsadm-1.21.tar.gz下載進行安裝。 這里采用源RPM包來進行安裝: 6.rpm注意高版本的rpm命令去掉了-rebuild這個參數選項,但提供了一個rpmbuild命令來實現它。這一點和以前在Red Hat 6.2中以rpmrebuild XXX.src.rpm來安裝源RPM包的習慣做法有所不同。 安裝完,執(zhí)行ipvsadm命令,應該有類似如下的信息出現: # ipvsadmIP Virtual Server version 1.0.9 (size=4096)Prot LocalAddress:Port Sc

18、heduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn出現類似以上信息,表明支持LVS的核和配置工具ipvsadm已完全安裝,這臺Director機器已經初步安裝完成,已具備構架各種方式的集群的條件。 原理接下來的工作是根據實際需求選擇采用何種負載分配方式和調度算法。目前LVS主要有三種請求轉發(fā)方式和八種調度算法。根據請求轉發(fā)方式的不同,所構架集群的網絡拓撲、安裝方式、性能表現也各不相同。用LVS主要可以架構三種形式的集群,分別是LVS/NAT、LVS/TUN和LVS/DR,可以根據需要選擇其中一種。在選定轉

19、發(fā)方式的情況下,采用哪種調度算法將決定整個負載均衡的性能表現,不同的算法適用于不同的應用場合,有時可能需要針對特殊場合,自行設計調度算法。LVS的算法是逐漸豐富起來的,最初LVS只提供4種調度算法,后來發(fā)展到以下八種: 1.輪叫調度(Round Robin) 調度器通過“輪叫”調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統(tǒng)負載。 2.加權輪叫(Weighted Round Robin) 調度器通過“加權輪叫”調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器能處理更多的訪問流量。調度器可以自動問

20、詢真實服務器的負載情況,并動態(tài)地調整其權值。 3.最少(Least Connections) 調度器通過“最少連接”調度算法動態(tài)地將網絡請求調度到已建立的數最少的服務器上。如果集群系統(tǒng)的真實服務器具有相近的系統(tǒng)性能,采用“最小連接”調度算法可以較好地均衡負載。 4.加權最少(Weighted Least Connections) 在集群系統(tǒng)中的服務器性能差異較大的情況下,調度器采用“加權最少”調度算法優(yōu)化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,并動態(tài)地調整其權值。 5.基于局部性的最少(Locality-Based Least C

21、onnections) “基于局部性的最少”調度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發(fā)送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則用“最少”的原則選出一個可用的服務器,將請求發(fā)送到該服務器。 6.帶復制的基于局部性最少(Locality-Based Least Connections with Replication) “帶復制的基于局部性最少”調度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法

22、的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發(fā)送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發(fā)送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。 7.目標地址散列(Destination Hashing) “目標地址散列”調度算法根據請求的目標IP地址,作為散列鍵(Hash Ke

23、y)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空。 8.源地址散列(Source Hashing) “源地址散列”調度算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發(fā)送到該服務器,否則返回空。 了解這些算法原理能夠在特定的應用場合選擇最適合的調度算法,從而盡可能地保持Real Server的最佳利用性。當然也可以自行開發(fā)算法,不過這已超出本文圍,請參考有關算法原理的資料。實例理解了上述關于請求轉發(fā)方式和調度算法的基本概念后,就可以運用LVS來具體實現幾種不同方式的

24、負載均衡的集群系統(tǒng)。LVS的配置是通過前面所安裝的IP虛擬服務器軟件ipvsadm來實現的。ipvsadm與LVS的關系類似于iptables和NetFilter的關系,前者只是一個建立和修改規(guī)則的工具,這些命令的作用在系統(tǒng)重新啟動后就消失了,所以應該將這些命令寫到一個腳本里,然后讓它在系統(tǒng)啟動后自動執(zhí)行。網上有不少配置LVS的工具,有的甚至可以自動生成腳本。但是自己手工編寫有助于更深入地了解,所以本文的安裝沒有利用其它第三方提供的腳本,而是純粹使用ipvsadm命令來配置。 下面就介紹一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的負載均衡集群。 1.設定LVS/NAT方式的負

25、載均衡集群 NAT是指Network Address Translation,它的轉發(fā)流程是:Director機器收到外界請求,改寫數據包的目標地址,按相應的調度算法將其發(fā)送到相應Real Server上,Real Server處理完該請求后,將結果數據包返回到其默認網關,即Director機器上,Director機器再改寫數據包的源地址,最后將其返回給外界。這樣就完成一次負載調度。 構架一個最簡單的LVS/NAT方式的負載均衡集群如圖2所示。 圖2 LVS/NAT方式的集群簡圖Real Server可以是任何的操作系統(tǒng),而且無需做任何特殊的設定,惟一要做的就是將其默認網關指向Director

26、機器。Real Server可以使用局域網的部IP(/24)。Director要有兩塊網卡,一塊網卡綁定一個外部IP地址(),另一塊網卡綁定局域網的部IP(54),作為Real Server的默認網關。 這里將所有LVS的配置命令寫到一個可執(zhí)行腳本中,腳本如下: #!/bin/bash# Open IP Forwardingecho 1 /proc/sys/net/ipv4/ip_forward# To make the load balancer forward the masquerading packetsipvsadm -C# Choose the Weighted Round Rob

27、ingipvsadm -A -t :80 -s wrr # Set Real Serveripvsadm -a -t :80 -r :873 -m -w 2ipvsadm -a -t :80 -r :873 -m -w 3ipvsadm將該腳本保存為/root/lvs_nat.sh,然后加上可執(zhí)行屬性,執(zhí)行它: # chmod a+x /root/lvs_nat.sh# /root/lvs_nat.sh運行該腳本后,一個簡單的LVS/NAT方式的負載均衡集群已經成功架設。模擬多個用戶從外界訪問的80端口,用ipvsadm可以觀看到以下信息: # ipvsadmIP Virtual Server

28、 version 1.0.9 (size=4096)Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConnTCP : wrr - : Masq 3 2 0 - : Masq 2 1 0其中ActiveConn表示對應的Real Server當前有多少個正在活動的連接,InActConn表示不活動的連接數。從這里我們可以看到有3個 請求,被分別分配在不同的Real Server上,表明這個負載均衡集群正在成功運行中。 本例完成了這樣一個簡單的LVS/NAT集群,

29、由此可以看出,LVS/NAT方式實現起來最為簡單,而且Real Server使用的是部IP,可以節(jié)省Real IP的開銷。但因為執(zhí)行NAT需要重寫流經Director的數據包,在速度上有一定延遲;另外,當用戶的請求非常短,而服務器的回應非常大的情況下,會對Director形成很大壓力,成為新的瓶頸,從而使整個系統(tǒng)的性能受到限制。 2.設定LVS/TUN方式的負載均衡集群 TUN是指IP Tunneling,它的轉發(fā)流程是:Director機器收到外界請求,按相應的調度算法將其通過IP隧道發(fā)送到相應Real Server,Real Server處理完該請求后,將結果數據包直接返回給客戶。至此完成

30、一次負載調度。 最簡單的LVS/TUN方式的負載均衡集群架構如圖3所示。 LVS/TUN使用IP Tunneling技術,在Director機器和Real Server機器之間架設一個IP Tunnel,通過IP Tunnel將負載分配到Real Server機器上。Director和Real Server之間的關系比較松散,可以是在同一個網絡中,也可以是在不同的網絡中,只要兩者能夠通過IP Tunnel相連就行。收到負載分配的Real Server機器處理完后會直接將反饋數據送回給客戶,而不必通過Director機器。實際應用中,服務器必須擁有正式的IP地址用于與客戶機直接通信,并且所有服務

31、器必須支持IP隧道協(xié)議。 圖3 LVS/TUN方式的集群簡圖這里將所有LVS的配置命令寫到一個可執(zhí)行腳本,腳本容如下: #!/bin/bash# Close IP Forwardingecho 0 /proc/sys/net/ipv4/ip_forwardifconfig eth0 downifconfig eth0 53 netmask broadcast 55 upifconfig eth0:0 54 netmask 55 broadcast 54 upipvsadm -Cipvsadm -A -t 54:80 -s wlcipvsadm -a -t 54:80 -r -i -w 3ipv

32、sadm -a -t 54:80 -r 01 -i -w 1ipvsadm將上面的腳本保存為/root/lvs_tun.sh。然后加上可執(zhí)行屬性,執(zhí)行它: # chmod a+x /root/lvs_tun.sh# /root/lvs_tun.sh運行此腳本之后應該出現如下信息: # ./lvs-tun.shIP Virtual Server version 1.0.9 (size=4096)Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 54:

33、 wlc - 01: Tunnel10 0 - : Tunnel10 0另外在每臺Real Server上還要執(zhí)行如下的命令: ifconfig tunl0 54 netmask 55 broadcast 54 uproute add -host 54 dev tunl0echo 1 /proc/sys/net/ipv4/conf/all/hiddenecho 1 /proc/sys/net/ipv4/conf/tunl0/hidden注意Real Server的核必須打上修正ARP問題的核補丁,如Linux2.4.20的核是hidden-2.4.20pre10-1.diff,編譯核的方法參見

34、Director機器。 通過本例來簡單評價一下LVS/TUN方式。該方式中Director將客戶請求分配到不同的Real Server,Real Server處理請求后直接回應給用戶,這樣Director就只處理客戶機與服務器的一半連接,極提高了Director的調度處理能力,使集群系統(tǒng)能容納更多的節(jié)點數。另外TUN方式中的Real Server可以在任何LAN或WAN上運行,這樣可以構筑跨地域的集群,其應對災難的能力也更強,但是服務器需要為IP封裝付出一定的資源開銷,而且后端的Real Server必須是支持IP Tunneling的操作系統(tǒng)。 3.設定LVS/DR方式的負載均衡集群 DR是

35、指Direct Routing,它的轉發(fā)流程是:Director機器收到外界請求,按相應的調度算法將其直接發(fā)送到相應Real Server,Real Server處理完該請求后,將結果數據包直接返回給客戶,完成一次負載調度。 構架一個最簡單的LVS/DR方式的負載均衡集群如圖4所示。 Real Server和Director都在同一個物理網段中,Director的網卡IP是53,再綁定另一個IP:54作為對外界的virtual IP,外界客戶通過該IP來訪問整個集群系統(tǒng)。Real Server在lo上綁定IP:54,同時加入相應的路由。 Director端的實現腳本如下: #!/bin/bas

36、h# set ip_forward OFF for vs-dr director (1 on, 0 off)echo 0 /proc/sys/net/ipv4/ip_forwardifconfig eth0:0 54 netmask 55 broadcast 55 upipvsadm -Cipvsadm -A -t 54:80 -s wlc# Set Real Serveripvsadm -a -t 54:80 -r :873 -gipvsadm -a -t 54:80 -r :873 -gipvsadm圖4 LVS/DR方式的集群簡圖將腳本保存為/root/lvs_dr.sh,加上可執(zhí)行屬性,執(zhí)行它: # c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論