負載均衡軟件實現

負載均衡軟件實現方式之一 - URL重定向方式html

有一種用軟件實現負載均衡的方式,是基於"URL重定向"的.前端

先看看什麼是URL重定向:mysql

"簡單的說,若是一個網站有正規的URL和別名URL,對別名URL進行重定向到正規URL,訪問同一個網址,或者網站改換成了新的域名則把舊的域名重定向到新的域名,都叫URL重定向"。linux

"不少網絡協議都支持「重定向」功能,例如在HTTP協議中支持Location指令,接收到這個指令的瀏覽器將自動重定向到Location指明的另外一個URL上。"web

這種方式,對於簡單的網站,若是網站是本身開發的,也在必定程度上可行.可是它存在着較多的問題:算法

一、「例如一臺服務器如何能保證它重定向過的服務器是比較空閒的,而且不會再次發送Location指令,Location指令和瀏覽器都沒有這方面的支持能力,這樣很容易在瀏覽器上造成一種死循環。」sql

二、在哪裏放LOCATION,也是一個問題。頗有可能用戶會訪問系統的不少個不一樣URL,這個時候作起來會很是麻煩。而且,對URL的訪問,有的時候是 直接過來的,能夠被重定向,有的時候是帶着SESSION之類的,重定向就可能會出問題。而且,這種作法,將負載均衡這個系統級的問題放到了應用層,結果 多是麻煩多多。shell

三、這種方式通常只適用於HTTP方式,可是實際上有太多狀況不只僅是HTTP方式了,特別是用戶若是在應用裏面插一點流媒體之類的。後端

四、重定向的方式,效率遠低於IP隧道。瀏覽器

五、這種方式,有的時候會伴以對服務器狀態的檢測,但每每也是在應用層面實現,從而實時性大打折扣。

實際上,這種方式是一種「對付」的解決方法,並不能真正用於企業級的負載均衡應用(這裏企業級是指稍微複雜一點的應用系統)

能夠看一下專業的負載均衡軟件是如何來實現的:

對比一下能夠發現,專業的負載均衡軟件要更適用於正規應用,而重定向方式則比較適用於一些簡單的網站應用。


負載均衡軟件實現方式之二 - 基於DNS

講到負載均衡,幾乎全部地方都必需要講一下基於DNS的方式,由於這實在是最基本、最簡單的方式了。固然,也幾乎全部地方都說到這種方式的種種缺點,不過,既然很基本,就仍是要說明一下。

下面這段講得很清楚:

最先的負載均衡技術是經過DNS來實現的,在DNS中爲多個地址配置同一個名字,於是查詢這個名字的客戶機將獲得其中一個地址,從而使得不一樣的客戶訪問不一樣的服務器,達到負載均衡的目的。

DNS負載均衡是一種簡單而有效的方法,可是它不能區分服務器的差別,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須儘可能保證不一樣的 客戶計算機能均勻得到不一樣的地址。因爲DNS數據具有刷新時間標誌,一旦超過這個時間限制,其餘DNS服務器就須要和這個服務器交互,以從新得到地址數 據,就有可能得到不一樣IP地址。所以爲了使地址能隨機分配,就應使刷新時間儘可能短,不一樣地方的DNS服務器能更新對應的地址,達到隨機得到地址,然而將過 期時間設置得太短,將使DNS流量大增,而形成額外的網絡問題。DNS負載均衡的另外一個問題是,一旦某個服務器出現故障,即便及時修改了DNS設置,仍是 要等待足夠的時間(刷新時間)才能發揮做用,在此期間,保存了故障服務器地址的客戶計算機將不能正常訪問服務器。

儘管存在多種問題,但它仍是一種很是有效的作法,包括Yahoo在內的不少大型網站都使用DNS。

引自:負載均衡技術研究

原文:http://www.ha999.com/loadbalance/lb_tech.htm

比較一下DNS方式與專業的負載均衡軟件如PCL負載均衡軟件,會發現DNS的問題在於,一是每每不能根據系統與服務的狀態來判斷負載,二是每每不能創建較複雜的負載均衡算法,而最主要的是DNS每每有緩存,簡單分配負載問題不大,若是是應用集羣這個就是沒法接受的。

那麼,爲何象Yahoo在內的大型網站都使用DNS方式呢?由於對於門戶網站來說,應用形態單一且簡單,重要的是服務器數量與分佈,而若是出現短時 間對於少許用戶的服務中斷問題並不大(好比有100臺服務器,有一臺不行了,即便DNS有緩存,也關係不大,用戶從新刷一下,就極可能又分配到其餘機器上了)。

可是,對於應用系統而言,好比兩三臺服務器,跑着比較複雜的應用,DNS方式就徹底不適合了,這個時候,就要用專業的負載均衡軟件了。

咱們能夠看一個實例,這樣會對專業化負載均衡軟件應該支持什麼樣的應用有更多的理解:36000人同時應用的負載均衡實例


負載均衡軟件實現方式之三 - LVS

LVS是一個開源的軟件,能夠實現LINUX平臺下的簡單負載均衡.

後面所附文章,講述了LVS實現負載均衡的方法.

由於文章較長,因此在轉載前,先總結一下LVS的優缺點:

優勢:

一、開源,免費

二、在網上能找到一些相關技術資源

三、具備軟件負載均衡的一些優勢

缺點:

一、具備開源產品常有的缺點,最核心的就是沒有可靠的支持服務,沒有人對其結果負責

二、功能比較簡單,支持複雜應用的負載均衡能力較差,如算法較少等。

三、開啓隧道方式需重編譯內核

四、配置複雜

五、只支持LINUX,若是應用還包括WINDOWS、SOLIRIS等就不行了

所以,建議在簡單的LINUX應用中使用LVS,複雜的應用,或者重要的應用,仍是應該使用專業的負載均衡軟件,如富士通西門子公司的PCL負載均衡軟件。

下面轉載一下如何使用LVS實現負載均衡:

搭建集羣負載均衡系統 (原文:http://www.xxlinux.com/linux/artic ... p/20060707/2519.html)

負載均衡集羣是在應用服務器高負載的狀況下,由多臺節點提供可伸縮的,高負載的服務器組以保證對外提供良好的服務響應;而LVS就是實現這一功能的技 術.實際上LVS是一種Linux操做系統上基於IP層的負載均衡調度技術,它在操做系統核心層上,未來自IP層的TCP/UDP請求均衡地轉移到不一樣的 服務器,從而將一組服務器構成一個高性能、高可用的虛擬服務器。使用三臺機器就能夠用LVS實現最簡單的集羣。

假設一臺名爲Director的機器是前端負載均衡器,運行LVS,目前只能在Linux下運行.能夠針對web、ftp、cache、mms甚至 mysql等服務作load balance;後端兩臺機器稱之爲Real Server,是須要負載均衡的服務器,能夠爲各種系統,Linux、Solaris、Aix、BSD、Windows均可,甚至Director自己也 能夠做爲Real Server.

本文將經過實際操做,重點介紹如何在Redhat 9上用LVS構建一個負載均衡集羣,關於負載均衡集羣、LVS的詳細內容,可參考以下信息:

安裝LVS

RedHat在 9.0之後,就將ipvsadm這些套件去除,所以若是想使用LVS(Linux Virtual Server),就得本身從新編譯核心(kernel)。

下載所需軟件

下載ipvs補丁包

從RedHat 9開始ipvs再也不被預先編譯到了RedHat發行版的內核中,咱們須要從下載新版的ipvs, 這裏咱們使用ipvs-1.0.9.tar.gz這個版本.

下載內核linux-2.4.20.tar.gz

這裏須要強調的是因爲全部的ipvs的補丁包都是爲標準內核開發的,因此安裝ipvs時不能使用RedHat光盤中的Kernel Source,而是須要去下載標準的內核。因此咱們從 獲得standard kernel linux-2.4.20.tar.gz

下載ipvs管理工具ipvsadm

從http://www.linuxvirtualserver.org/ 獲得ipvs管理工具ipvsadm-1.21.tar.gz, ipvsadm是設置ipvs轉發方式和調度算法的工具.

開始安裝

安裝內核源碼

把linux-2.4.20.tar.gz解壓到/usr/src目錄,生成了/usr/src/linux目錄;若是生成的是/usr/src /linux-2.4.20目錄,則要在/usr/src下創建一個鏈接 ln –s linux-2.4.20 linux,由於在ipvs-1.0.9中的makefile文件中默認指定Kernel Source的路徑爲:KERNELSOURCE = /usr/src/linux

把ipvs補丁Patch到內核源碼中

把ipvs-1.0.9.tar.gz解壓縮到某個目錄,如/test,生成了/test/ipvs-1.0.9目錄;進入/test/ipvs- 1.0.9,依次執行以下命令:make patchkernel、make installsource,將ipvs的Patch加載到kernel的source中。

從新編譯支持ipvs的內核

進入/usr/src/linux目錄,分別執行:

make mrproper 爲建立新的內和配置作好準備

make menuconfig 進行配置

這裏請確保IP:Virtual Server Configuration中的選項設定都用M

make dep 檢測是否有相關的軟件包被使用

make clean 爲新內核結構準備源目錄樹

make bzImage 建立內核引導映像

make modules、make modules_install 生成模塊

make install安裝新的內核到指定位置並從新配置grub.conf

到這裏新內核就安裝完畢了,請重啓並用此內核引導系統

安裝ipvs管理工具ipvsadm

當使用新內核啓動後,就能夠安裝ipvsadm:

tar xzvf ipvsadm-1.21.tar.gz

cd ./ipvsadm-1.21

make

make install

安裝完成後,執行ipvsadm命令,若是有以下信息出現則說明安裝成功了。

[root@leon c]# ipvsadm

IP Virtual Server version 1.0.9 (size=65536)

Prot LocalAddress:Port Scheduler Flags

->; RemoteAddress:Port Forward Weight ActiveConn InActConn


到如今爲止,支持負載均衡功能的director就安裝成功了,接下來咱們能夠經過ipvsadm來配置一個負載均衡集羣。

構建負載均衡集羣


這裏咱們假設局域網中有兩臺FTP服務器,IP分別爲FTP1:10.83.33.103,FTP2: 10.83.33.2 所提供的資料都是相同的,這能夠經過無密碼SSH登陸+RSYNC來保證數據一致,這非本文中電,故而略過.咱們提供給用戶的虛擬IP是 10.83.33.100,而在後臺爲這兩臺FTP服務器實行LVS負載均衡的服務器的IP是10.83.33.83.這三臺均安裝RedHat9系統.

咱們最終要實現的目標是當用戶輸入ftp 10.83.33.100時, LVS負載均衡服務器系統會根據當時的負載狀況,依據輪換策略來決定Real Server究竟是FTP1仍是FTP2,從而使得整個FTP服務器的負載到達均衡.

目前LVS有三種負載平衡方式,NAT(Network Address Translation),DR(Direct Routing),IP Tunneling。其中,最爲經常使用的是DR方式,所以這裏只說明DR(Direct Routing)方式的LVS負載平衡。其它兩種的詳細狀況請參考LVS-HOWTO.

Director(即10.83.33.83)上執行的設置

爲了方便咱們將全部步驟寫成一個shell script.


#!/bin/bash

echo "0" >; /proc/sys/net/ipv4/ip_forward (關閉ip_forward)

echo "1" >; /proc/sys/net/ipv4/conf/all/send_redirects (開啓ICMP Redirects)

echo "1" >; /proc/sys/net/ipv4/conf/default/send_redirects (開啓ICMP Redirects)

echo "1" >; /proc/sys/net/ipv4/conf/eth0/send_redirects (開啓ICMP Redirects)

ifconfig eth0:100 10.83.33.100 broadcast 10.83.33.100 netmask 255.255.255.255

(設置虛擬IP)

route add -host 10.83.33.100 dev eth0:100 (設置達到虛擬Ip的路由)

ipvsadm –C (清空ipvsadm table)

ipvsadm -A -t 10.83.33.100:21 -s wrr (創建service rule, 當前調度算法爲加權輪叫調度) ipvsadm -a -t 10.83.33.100:21 -r 10.83.33.76 -g -w 3 (創建轉發規則)

ipvsadm -a -t 10.83.33.100:21 -r 10.83.33.2 -g -w 1 (創建轉發規則)

ipvsadm (檢查當前ipvsadm table)


將此shell script加入到/etc/rc.local中,這樣在每次系統啓動時均可以自動運行進行設置了。 Realserver(即10.83.33.2和10.83.33.76)上的設置


這裏咱們必須先修正real server上arp problem .這是由於在使用VS/DR的時候,real server會在一塊網卡上綁定兩個IP,但linux在kernel 2.2.14之後就將eth0:1的NOARP FLAG關閉,這使得eth0:1僅僅是eth0的別名,任何對eth0:1的操做都對eth0有效,所以若是此時使eth0:1 NOARP,則也使得eth0 NOARP,這樣整個網卡都不會收到數據包,具體的說就是由於我全部的機器都放在同一個網段,當該網段的Router接收到用戶對虛擬IP的TCP connection要求(即便用FTP登陸服務器)時,會先在網段中利用Arp request詢問誰有VIP的地址,而包含Director與Real Servers上全部的interface,只要他有那個ip,都會發送arp reply回去,形成網段內全部擁有Virtual IP的interface都會reply給Router,最後結果就是看誰的速度快,Router就將該封包送給誰,如此會形成LVS的Server並沒有 法發揮其效果,而咱們所但願的是隻有Director上的Virtual IP發送arp reply回去,所以須要利用hidden這個pattch,將real server上的Virtual IP給隱藏起來,如此他就不會對Arp Request進行Reply,就能夠解決ARP的問題.具體步驟是:


下載所需的軟件包


從http://www.ssi.bg/~ja/ 獲得hidden修正包,不一樣的核心使用相應的版本.請參考下表

Patch Linux 2.4 Created

hidden-2.4.28-1.diff 2.4.28 - 2.4.30 November 18, 2004

hidden-2.4.26-1.diff 2.4.26 - 2.4.27 February 28, 2004

hidden-2.4.25-1.diff 2.4.25 February 19, 2004

hidden-2.4.20pre10-1.diff 2.4.20pre10 - 2.4.24 October 12, 2002

hidden-2.4.19pre5-1.diff 2.4.19pre5 - 2.4.20pre9 April 7, 2002

hidden-2.4.5-1.diff 2.4.5 - 2.4.19pre4 June 2, 2001

hidden-2.4.4-1.diff 2.4.4 April 29, 2001

Patch Linux 2.6 Created

hidden-2.6.9-1.diff 2.6.9 - 2.6.11 October 19, 2004

hidden-2.6.4-1.diff 2.6.4 - 2.6.8 March 12, 2004

hidden-2.6.3-1.diff 2.6.3 February 19, 2004

hidden-2.5.67-1.diff 2.5.67 - 2.6.2 April 9, 2003


本例使用的內核版本是2.4.20-8,所以下載hidden-2.4.20pre10-1.diff


從新編譯內核,修正arp problem


把hidden-2.4.20pre10-1.diff放到/usr/src/linux下,用命令

patch -p1 < hidden-2.4.20pre10-1.diff對kernel進行patch

進入/usr/src/linux目錄,分別執行:

make mrproper 爲建立新的內和配置作好準備

make menuconfig 進行配置

make dep 檢測是否有相關的軟件包被使用

make clean 爲新內核結構準備源目錄樹

make bzImage 建立內核引導映像

make modules、make modules_install 生成模塊

make install 安裝新的內核到指定位置並從新配置grub.conf

到這裏新內核就安裝完畢了,請重啓並用此內核引導系統


設置Real server


爲了方便咱們將全部步驟寫成一個shell script.


#!/bin/bash

echo "0" >; /proc/sys/net/ipv4/ip_forward (關閉ip_forward)

ifconfig lo:100 10.83.33.100 broadcast 10.83.33.100 netmask 0xffffffff up (設置虛擬IP) route add -host 10.83.33.100 dev lo:100 (設置達到虛擬Ip的路由)

echo "1" >; /proc/sys/net/ipv4/conf/all/hidden (開啓No-ARP)

echo "1" >; /proc/sys/net/ipv4/conf/lo/hidden (開啓No-ARP)


將此shell script加入到/etc/rc.local中,這樣在每次系統啓動時均可以自動運行進行設置了。

測試

爲了使得咱們清楚地知道訪問的是那一臺FTP服務器,咱們在FTP1上編輯

/etc/vsftpd/vsftpd.conf,設置 ftpd_banner=Welcome to FTP1 server,在FTP2設置

ftpd_banner=Welcome to FTP2 server,設置完畢後重啓服務.

如今在另外一臺客戶機開幾個終端,依次輸入ftp 10.83.33.100,咱們能夠從歡迎詞上看到,每次登陸的FTP服務器都不是固定的,它會在FTP1和FTP2上互相交替,試驗成功!

負載均衡軟件實現方式之四 - 專業負載均衡軟件


看一下專業的負載均衡軟件是什麼樣的:PCL負載均衡軟件

詳細內容,你們能夠本身去看。簡單講,專業負載均衡軟件大概有如下特色:


一、它是基於IP隧道的,而不是象URL重定向方式那樣。因此,它是獨立於應用的

二、它支持不一樣平臺,即應用能夠是基於LINUX,WINDOWS或SOLARIS的,而不是象LVS只能在LINUX上


三、它是實時的,這點與DNS方式有極大的差異。


四、它可以根據系統、應用的狀況來決定負載,這一點與硬件負載均衡設備有很大差異。

五、專業負載均衡軟件,適用於企業級應用,不管從其可靠性,仍是從其服務保障上,都不是象LVS那樣的開源軟件可比的。


總結一下,若是是象YAHOO那樣的網站應用,能夠考慮DNS方式,參見:負載均衡軟件實現方式之二 - 基於DNS


若是是特別簡單的應用,能夠考慮URL重定向方式,參見:負載均衡軟件實現方式之一 - URL重定向方式


若是是不過重要的純LINUX應用,能夠考慮LVS,參見:負載均衡軟件實現方式之三 - LVS

若是是重要、流量大、應用簡單、預算充足的狀況,能夠考慮硬件方式(好比用F5)(必定要作雙機啊!),參見:軟件與硬件負載均衡的比較


而若是是重要的企業應用,兩臺或幾十臺服務器,應用比較複雜,包括有可能跨平臺,則應該考慮專業的負載均衡軟件。參見:PCL負載均衡軟件-應用集羣的理想選擇。

相關文章
相關標籤/搜索