LVS-DR+Ldirectord+FreeNas實現負載均衡羣集

LVS-DR+Ldirectord+FreeNas實現負載均衡羣集

202642354.jpg

圖中的VIP指的是虛擬IP地址,還可以叫做LVS集羣的服務IP,在DR、TUN模式中,用戶的請求由Directory Server轉交給Real Server,返回的數據包是由Real Server直接返回給用戶的,所以,在Director Server上以及集羣的每個節點上都需要設置這個地址。此IP在Real Server上一般綁定在迴環地址上,例如lo:0,同樣,在Director Server上,虛擬IP綁定在真實的網絡接口設備上,例如eth0:0。

各個Real Server可以是在同一個網段內,也可以是相互獨立的網段,還可以是分佈在internet上的多個服務器.


服務器名

IP地址

網關

虛擬設備名

虛擬IP

Directory Server

192.168.30.2

192.168.30.1

eth0:0

192.168.30.100

Real Server1

192.168.30.3

192.168.30.1

lo:0

192.168.30.100

Real Server2

192.168.30.4

192.168.30.1

lo:0

192.168.30.100

安裝前準備:

Redhat Enterprise Linux 5.4內核默認支持lvs,爲了方便編譯安裝IPVS管理軟件,在安裝操作系統時,建議選擇如下這些安裝包:

開發工具:development tools、x software development、gnome software、development、kde software development。

系統安裝完畢,可以通過如下命令檢查kernel是否已經支持LVS的ipvs模塊:

[root@localhost~]#modprobe -l |grep ipvs

202855696.jpg

如果有類似上面的輸出,表明系統內核已經默認支持了IPVS模塊。接着就可以安裝IPVS管理軟件了。

一、安裝Lvs軟件

1、在Director Serve上安裝IPVS管理軟件

IPVS提供的軟件包有源碼方式的也有rpm方式的,這裏介紹下源碼方式安裝IPVS,首先從http://www.linuxvirtualserver.org/software/ipvs.html下載對應版本的ipvs源碼,由於我們這裏採用的操作系統爲rhel5.4版本,因此,下載對應的ipvsadm-1.24版本,接着進行安裝:

[root@localhost~]#tar zxvf ipvsadm-1.24.tar.gz -C /usr/local/src/

[[email protected]]# cd /usr/local/src/ipvsadm-1.24/

[[email protected]]# make

[[email protected]]# make install

注意:在make時可能會出現錯誤編譯信息,這是由於編譯程序找不到對應內核的原因,按照如下操作就可以正常編譯:

[root@localhost~]#ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux

//創建以個系統內核的軟鏈接到/usr/src/linux中

也可以下載rpm安裝包,通過rpm方式進行安裝:

[root@localhost~]#rpm –ivh ipvsadm-1.24-6.1.i386.rpm

//rpm包安裝會比較方便,網上也有rpm格式的。

安裝完成之後,執行命令:

[root@localhost~]# ipvsadm --help |less

//分頁查看ipvsadm的命令幫助手冊,如果無法執行,說明安裝失敗。

202931489.jpg

203110238.jpg

203129231.jpg

使用舉例如下:

[root@localhost ~]#ipvsadm -A -t 192.168.30.2:80 -s rr -p 600

以上表示在內核的虛擬服務器列表中添加一條192.168.30.2的虛擬服務器記錄,並且指定此虛擬服務器的服務端口爲80,然後指定此虛擬服務器的調度策略爲輪詢調度,並且在每個real server上的持續服務時間爲600秒,即10分鐘

[root@localhost ~]#ipvsadm -A -t 192.168.30.2:21 -s wlc

以上表示在內核的虛擬服務器列表中又添加了一條192.168.30.2的虛擬服務器,此虛擬服務器的服務端口爲21,即FTP服務。使用的調度策略爲wlc,即加權最少鏈接算法。

[root@localhost ~]#ipvsadm -a -t 192.168.30.2:80 -r 192.168.30.3:80 –g

[root@localhost ~]#ipvsadm -a -t 192.168.30.2:80 -r 192.168.30.4:80 –g

以上兩條設置表示在虛擬服務器192.168.30.2中添加兩條新的Real Server記錄,兩個Real Server的IP分別爲192.168.30.4和192.168.30.4,參數“-g”指定了虛擬服務器的工作模式爲直接路由模式,即DR模式。

二、配置LVS羣集

本次試驗基於DR模型的LVS集羣來搭建www服務,實現負載均衡。

以下是Director Server的配置:

在Director Server上配置LVS負載均衡集羣,有兩種方法:

通過ipvsadm命令行進行配置

通過Redhat提供的工具piranha來配置LVS

放法1、 通過ipvsadm命令行方式配置LVS

① 安裝IPVS後,就可以配置LVS集羣了,首先在Director Server上綁定一個虛擬IP(也叫VIP),此IP用於對外提供服務,執行如下命令:

[root@localhost~]#ifconfig eth0:0 192.168.30.100 netmask255.255.255.255 up

此處在eth0設備上綁定了一個虛擬設備eth0:0,同時設置了一個虛擬IP是192.168.30.100,也就是上面我們規劃的IP地址,需要特別注意的是,這裏的子網掩碼爲255.255.255.255。

203216653.jpg

以上的命令是臨時添加IP,如果系統重啓就會消失,所以最好再使用“setup”命令來永久添加,因爲eth0:0是虛擬網卡,所以在配置時要注意。

203250630.jpg

203515947.jpg

② 然後給設備eth0:0指定一條路由,執行如下指令:

[root@localhost~]#route add -host 192.168.30.100 dev eth0:0

//添加一條到192.168.30.100/32網絡的路由

[root@localhost~]#echo "1" >/proc/sys/net/ipv4/ip_forward

//開啓Linux的路由轉發功能

指令中,參數值爲1時啓用ip轉發,爲0時禁止ip轉發。其實在DR模式中,開啓系統的包轉發功能不是必須的,而在NAT模式下此操作是必須的。

203423261.jpg

③ 配置ipvs,命令如下:

[root@localhost~]#ipvsadm –C

//清除內核虛擬服務器列表中的所有記錄

[root@localhost~]#ipvsadm -A -t 192.168.30.100:80 -s rr

//添加一條新的虛擬IP記錄,192.168.30.100

[root@localhost ~]#ipvsadm -a -t 192.168.30.100:80-r 192.168.30.3:80 -g

[root@localhost~]#ipvsadm -a -t 192.168.30.100:80 -r 192.168.30.4:80 -g

//新加虛擬IP記錄中添加兩條新的Real Server記錄,並且指定LVS 的工作模式爲直接路由模式。(-g表示dr模型,默認的模式,-I表示tunel模型,-m表示nat模型)

④ 最後,啓動LVS服務,執行如下操作:

[root@localhost~]#ipvsadm

這樣,LVS在Director Server上的配置就完成了.

203614432.jpg

方法2、 通過Redhat提供的工具piranha來配置LVS

Piranha是REDHAT提供的一個基於Web的LVS配置軟件,可以省去手工配置LVS的繁瑣工作,同時,也可單獨提供cluster功能,例如,可以通過Piranha激活Director Server的後備主機,也就是配置Director Server的雙機熱備功能。

① Piranha工具的安裝非常簡單,下載Piranha的rpm包,進行安裝即可:

[root@localhost ~]#rpm –ivh piranha-0.8.2-1.i386.rpm

Piranha安裝完畢後,會產生/etc/sysconfig/ha/lvs.cf文件,默認此文件是空的,可以通過Piranha提供的web界面配置此文件,也可以直接手動編輯此文件,編輯好的lvs.cf文件內容類似如下:

[root@localhost~]# more /etc/sysconfig/ha/lvs.cf

serial_no= 18 #序號。

primary= 192.168.30.2 #指定主Director Server的真實IP地址,是相對與有備用的Director Server而言的,也就是給Director Server做HA Cluster。

service= lvs #指定雙機的服務名。

backup_active= 0 #是否激活備用Director Server。“0”表示不激活,“1”表示激活。

backup= 0.0.0.0 #這裏指定備用Director Server的真實IP地址,如果沒有備用Director Server,可以用“0.0.0.0”代替。

heartbeat= 0 #是否開啓心跳,1表示開啓,0表示不開啓。

heartbeat_port= 539 #指定心跳的UDP通信端口。

keepalive= 5 #心跳間隔時間,單位是秒。

deadtime= 10 #如果主Director Server在deadtime(秒)後沒有響應,那麼備份Director

Server就會接管主Director Server的服務。

network= direct #指定LVS的工作模式,direct表示DR模式,nat表示NAT模式,tunnel表示TUNL模式。

debug_level= NONE #定義debug調試信息級別。

virtualwww.ixdba.net{ #指定虛擬服務的名稱。

active= 1 #是否激活此服務。

address= 192.168.30.100 eth0:0 #虛擬服務綁定的虛擬IP以及網絡設備名。

port= 80 #虛擬服務的端口。

send= "GET / HTTP/1.0\r\n\r\n" #給real server發送的驗證字符串。

expect= "HTTP" #服務器正常運行時應該返回的文本應答信息,用來判斷real server是否工作正常。

use_regex= 0 # expect選項中是否使用正則表達式,0表示不使用,1表示使用。

load_monitor= none #LVS中的Director Server能夠使用 rup 或 ruptime 來監視各個realserver的負載狀態。該選項有3個可選值,rup、ruptime和none,如果選擇rup,每個real server就必須運行rstatd服務。如果選擇了ruptime,每個real server就必須運行 rwhod 服務。

scheduler= rr #指定LVS的調度算法。

protocol= tcp #虛擬服務使用的協議類型。

timeout= 6 #real server失效後從lvs路由列表中移除失效real server所必須經過的時間,以秒爲單位。

reentry= 15 #某個real server被移除後,重新加入lvs路由列表中所必須經過的時間,以秒爲單位。

quiesce_server= 0 #如果此選項爲1.那麼當某個新的節點加入集羣時,最少連接數會被重設

爲零,因此LVS會發送大量請求到此服務節點,造成新的節點服務阻塞,

建議設置爲0。

serverRS1 { #指定real server服務名。

address= 192.168.30.3 #指定real server的IP地址。

active= 1 #是否激活此real server服務。

weight= 1 #指定此real server的權值,是個整數值,權值是相對於所有real server節點而言的,權值高的real server處理負載的性能相對較強。

}

serverRS2 {

address= 192.168.30.4

active= 1

weight= 1

}

}

② 編輯完成,然後啓動pulse服務,即啓動lvs服務

[root@localhost~]#service pulse start

同理,此種方式下也要啓用系統的包轉發功能:

[root@localhost~]#echo "1" >/proc/sys/net/ipv4/ip_forward

到此爲止,Piranha工具方式配置Director Server完畢。

三、配置Real Server

在lvs的DR和TUn模式下,用戶的訪問請求到達真實服務器後,是直接返回給用戶的,而不再經過前端的Director Server,因此,就需要在每個Real server節點上增加虛擬的VIP地址,這樣數據才能直接返回給用戶。

由於Real Server中的配置相同,這裏只以Server1爲例:

1、禁止本地的arp響應,由於虛擬ip,也就是上面的VIP地址,是Director

Server和所有的Real server共享的,如果有ARP請求VIP地址時,DirectorServer與所有Real server都做應答的話,就出現問題了,因此,需要禁止Real server響應ARP請求。修改系統配置文件:

vim /etc/sysctl.conf

# net.ipv4.conf.all.arp_announce = 2

# net.ipv4.conf.all.arp_ignore = 1

//防止響應arp包

[root@Server1~]# sysctl -p

//重新加載配置文件

203706514.jpg

1、修改IP地址

[root@Server1~]# ifconfig eth0 192.168.30.3

[root@Server1~]# ifconfig lo:0 192.168.30.100 netmask 255.255.255.255

[root@Server1~]# route add –host 192.168.2.100/32 dev lo:0

2、安裝httpd

因爲本次試驗只是利用www來進行負載均衡測試,所以使用rpm來安裝web服務。

[root@Server1~]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm

[root@Server1~]# echo “Server1” > /var/www/html/index.html

[root@Server1~]# server httpd start

說明:在Server2上做同樣的配置

四、測試負載均衡

在Director上安裝httpd服務,只需開啓服務即可。

使用一臺客戶機來訪問http:192.168.30.100,每刷新一次,就會訪問不同的站點。

203800558.jpg

203803498.jpg

此時說明已經實現了負載均衡。以上爲了試驗的效果,所以將數據分別存放在兩臺服務器中,但是在實際中,用戶訪問同一個IP應該得到相同的信息。爲了讓數據統一,我們應該使用共享存儲。

五、Ldirectord監控Real Server

1、以上是通過輪詢機制來實現負載均衡,但是如果某一臺Real Server宕掉後,

Director依然在LVS路由表中記錄着後方的每一臺Real Server,將請求輪流發送給後方的Real Server,這樣就會降低服務的效率。所以應該在Director中監控後方的Real Server的健康狀況,當某個服務器宕掉後,應該立即做出處理。

在heartbeat中,ldirectord其實是作爲它的一個插件出現的,所以它默認包含在heartbeat軟件包中,Ldirectord的核心作用是監控Real Server節點狀態,當Real Server失效時,把它從虛擬服務器列表中刪除,恢復時重新添加到列表,同時,它還能調用ipvsadm自動創建LVS路由表。要通過ldirectord監控節點狀態,只需啓動ldirectord服務,整個集羣系統就可以運行起來。在前面我們是通過命令添加虛擬服務以及後方的Real Server,如果使用ldirectory的話,類似的命令是寫在配置文件中的。所以如果使用ldirectory服務的話,可以不使用前面的命令添加虛擬服務。需要說明的是,ldirectord和Piranha都具有監控Real Server的功能,如果是通過Piranha工具配置LVS,就無需使用ldirectord,Piranha工具對應的系統進程是pluse,此進程也會自動調用ipvsadm創建LVS路由表,同時會利用自身的nanny守護進程監控real server的狀態

2、安裝heartbeat-ldirector服務。

如果直接使用rpm來安裝的話,會有許多的依賴關係,安裝會失敗。

203958248.jpg

最好使用yum來進行安裝,我這裏使用的是本地yum來,安裝heartbeat的所有rpm包

軟件包:

heartbeat-2.1.4-9.el5.i386.rpm

heartbeat-devel-2.1.4-9.el5.i386.rpm

heartbeat-gui-2.1.4-9.el5.i386.rpm

heartbeat-ldirectord-2.1.4-9.el5.i386.rpm

heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-stonith-2.1.4-10.el5.i386.rpm

libnet-1.1.4-3.el5.i386.rpm

perl-MailTools-1.77-1.el5.noarch.rpm

//下載地址:http://yunpan.cn/QbFZ4REqCjP8w


[root@localhostHeartbeat]# yum localinstall *.rpm

204047415.jpg

204059709.jpg

3、修改ldirectord配置文件

安裝完成後,默認的安裝路徑爲/etc/ha.d,同時需要將模板配置文件拷貝到這個目錄下,執行如下命令:

[root@localhostroot]# rpm -q heartbeat-ldirectord -d

/usr/share/doc/heartbeat-ldirectord-2.1.4/COPYING

/usr/share/doc/heartbeat-ldirectord-2.1.4/README

/usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf

/usr/share/man/man8/ldirectord.8.gz

[root@localhostroot]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/

可以通過執行如下命令啓動或關閉ldirectord服務

[root@localhostroot]# /etc/init.d/ldirectord {start|stop}

或者使用命令:

[root@localhostroot]# serveice ldirectord start | stop

[root@localhostroot]# chkconfig ldirectord on

//將ldirectord服務添加到開機啓動

Ldirectord的配置文件是/etc/ha.d/ldirectord.cf,下面詳述下這個文件每個參數的含義:

204138110.jpg

checktimeout=3 #判定real server出錯的時間間隔。

checkinterval=1 #指定ldirectord在兩次檢查之間的間隔時間。

fallback=127.0.0.1:80

#當所有的real server節點不能工作時,web服務重定向的地址。

autoreload=yes

#是否自動重載配置文件,選yes時,配置文件發生變化,自動載入配置信息。

logfile="/var/log/ldirectord.log"

#設定ldirectord日誌輸出文件路徑。

quiescent=no

#當選擇no時,如果一個節點在checktimeout設置的時間週期內沒有響應,ldirectord將會從LVS的路由表中直接移除real server,此時,將中斷現有的客戶端連接,並使LVS丟掉所有的連接跟蹤記錄和持續連接模板,如果選擇爲yes,當某個real server失效時,ldirectord將失效節點的權值設置爲0,新的連接將不能到達,但是並不從LVS路由表中清除此節點,同時,連接跟蹤記錄和程序連接模板仍然保留在Director上。

注意:以上幾行爲ldirectord.cf文件的“全局”設置,它們可以應用到下面多個虛擬主機,下面是每個虛擬主機的配置。

204316838.jpg

virtual=192.168.30.100:80 #指定虛擬的IP地址和端口號,注意,在virtual行後面的行必

須縮進4個空格或以一個tab字符進行標記。

real=192.168.30.3:80gate #指定Real Server服務器地址和端口,同時設定LVS工作模式,

用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。

real=192.168.30.4:80gate

fallback=127.0.0.1:80gate

service=http #指定服務的類型,這裏是對http服務做負載均衡。

request="index1.html" #ldirectord將根據指定的Real Server地址,結合該選項給出的請求路徑,發送訪問請求,檢查Real Server上的服務是否正常運行,確保這裏給出的頁面地址是可訪問的,不然ldirectord會誤認爲此節點已經失效,發生錯誤監控現象。

receive="TestPage" #指定請求和應答字串。

//在後方的Real Server的web站點下,要有一個index.html的頁面,內容是“Test Page”,用來檢測其服務是否正常。

virtualhost=www.wj.com #虛擬服務器的名稱,隨便指定。

scheduler=rr #指定調度算法,這裏是rr(輪叫)算法。

protocol=tcp #指定協議的類型,LVS支持TCP和UDP協議。

checktype=negotiate #指定Ldirectord的檢測類型,默認爲negotiate。

checkport=80 #指定監控的端口號。

1、創建測試頁面。

[root@Server1~]# echo “Test Page” >/var/www/html/index1.html

[root@Server2~]# echo “Test Page” >/var/www/html/index1.html

2、測試ldirectord服務

[root@localhost~]# ipvsadm -l

204340147.jpg

當某個服務器宕掉後,LVS中的表就會刪除該服務器的記錄,當該服務器恢復後,就自動添加該服務器的記錄。

204433526.jpg

如果ldirectord配置文件中的“quiescent=yes”,那麼在LVS表中不會刪除該服務器的記錄,只是Director Server不會將用戶的請求轉發給它。

六、FreeNas共享存儲

在實際生活中,用戶訪問同一個web服務器時,響應的內容應該一樣。這裏爲了試驗效果,所以將兩個服務器中的網頁內容設爲不同。爲了能夠實現用戶訪問的一致性,最好的方法是在後方實現共享存儲。這裏使用的Freenas來實現共享存儲。FreeNAS是網絡附加存儲(NAS)服務專用操作系統(FreeBSD的簡化版)。基於

m0n0wall防火牆,該系統通過提供磁盤管理及RAID軟件,可讓用戶將PC轉換爲NAS服務器。支持FTP/NFS/RSYNC/CIFS/AFP/UNISON/SSH協議。

1、新建一個虛擬機

204710710.jpg

204723464.jpg

204739296.jpg

204800410.jpg

204810532.jpg

204820657.jpg

204828380.jpg

204857895.jpg

2、啓動虛擬機

接下來就是安裝FreeNas,和安裝Linux系統差不多。

Step1Install/Upgrade

204951290.jpg

Step2:選擇安裝到哪塊硬盤,因爲只有一塊硬盤所以這裏只顯示一個,如果有多個,可以自由選擇。

205032946.jpg

Step3:格式化硬盤的警告信息。

205209400.jpg

Step4:取出光驅中的鏡像,重啓系統。

205307272.jpg

Step5:配置FressNas的IP

205404980.jpg

205417595.jpg

205419443.jpg

如果FreeNas服務器和Real Server不在同一個網段,需要配置FreeNas的網關即默認路由。

Step6:通過web來進行管理FreeNas

205527914.jpg

登錄後,爲了安全起見最好修改一些你的管理員密碼,爲了使用方便,可以將頁面的語言改爲中文。

205545603.jpg

205727137.jpg

Step7:創建NFS服務

205832766.jpg

205849552.jpg

205905107.jpg

Step8:創建一個共享文件夾

205935674.jpg

205947450.jpg

查看192.168.30.5上的共享文件

[root@Server1~]# showmount -e 192.168.30.5

//查看共享文件

[root@Server1~]# mount 192.168.30.5:/mnt/webroot /var/www/html/

//臨時掛載192.168.30.5上的共享文件到/var/www/html目錄中

210033473.jpg

[root@Server1~]# vim /etc/fstab

[root@Server1~]# mount –a

210112553.jpg

[root@Server1~]# mount

210214958.jpg

//永久掛載

掛載成功之後,你就可以在Real Server中操作後方FreeNas中NFS服務中共享的文件。將web頁面放到/mnt/webroot目錄中,以後用戶不論通過哪個Real Server都是訪問和操作同一個web頁面。這種方式文件級別的共享,缺點是效率比較低,優點是有鎖機制(同一時間只能有一個用戶編輯)和推送機制(用戶看到的內容是一樣的)

210251999.jpg

210258553.jpg


說明:FreeNas鏡像下載--》http://www.freenas.org/

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