搭建LVS負(fù)載均衡測試環(huán)境
實(shí)現(xiàn)負(fù)載均衡有很多種方式
土豪直接F5,性能最好,價(jià)格最貴
沒錢也可以使用Apache,Nginx 工作在網(wǎng)絡(luò)的第四層,雖然性能一般,但是很靈活,比如可以將80端口映射到真實(shí)服務(wù)器的8080端口.
還有一種選擇LVS ,它工作在網(wǎng)絡(luò)的第三層,性能較好,非常穩(wěn)定.
但是它不能實(shí)現(xiàn)端口的重新映射.因?yàn)樵诰W(wǎng)絡(luò)的第三層,并不清楚端口的信息。
下面的實(shí)驗(yàn)搭建了一個(gè)LVS負(fù)載均衡測試環(huán)境,采用DR的方式。
客戶端訪問LVS前置機(jī)
這個(gè)請求如下
源MAC(client mac) 目標(biāo)MAC(DR mac) 源IP(client IP) 目標(biāo)IP(DR IP,VIP)
LVS前置機(jī)會(huì)將報(bào)文改寫之后轉(zhuǎn)發(fā)真實(shí)的服務(wù)器
改寫如下
源MAC(client mac) 目標(biāo)MAX(真實(shí)服務(wù)器MAC) 源IP(client IP) 目標(biāo)IP(DR IP,VIP)
因?yàn)檎鎸?shí)的服務(wù)器將VIP綁定到了環(huán)回地址,所以會(huì)處理這個(gè)請求,并返回響應(yīng)的報(bào)文.
網(wǎng)絡(luò)層的源目對掉
源MAC(真實(shí)服務(wù)器MAC) 目標(biāo)MAC(client mac) 源IP(DR IP,VIP) 目標(biāo)IP(client IP)
所以LVS DR的本質(zhì)就是網(wǎng)絡(luò)層的欺騙。
實(shí)驗(yàn)采用VirtualBox虛擬機(jī),并且配置內(nèi)部網(wǎng)絡(luò),關(guān)閉SELinux和防火墻
首先,在LVS DR前置機(jī)上安裝ipvsadm命令
yum install ipvsadm -y
然后配置兩臺(tái)真實(shí)服務(wù)器(RealServer)的Http服務(wù)
yum install httpd -y
service httpd start
chkconfig httpd on
并分別改寫/var/www/html/index.html的內(nèi)容為"real server 1"和"real server 2"
然后在兩臺(tái)真實(shí)服務(wù)器上執(zhí)行如下的腳本
vim lvs_real.sh #!/bin/bash # description: Config realserver lo and apply noarp SNS_VIP=192.168.16.199 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 |
最后,在DR前置機(jī)上執(zhí)行如下腳本
vim lvs_dr.sh #!/bin/bash VIP1=192.168.16.199 RIP1=192.168.16.3 RIP2=192.168.16.4 case "$1" in start) echo " start LVS of DirectorServer" /sbin/ifconfig eth1:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 broadcast $VIP1 up /sbin/route add -host $VIP1 dev eth1:0 echo "1" >/proc/sys/net/ipv4/ip_forward /sbin/ipvsadm -C /sbin/ipvsadm -A -t $VIP1:80 -s rr /sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g -w 1 /sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g -w 1 /sbin/ipvsadm ;; stop) echo "close LVS Directorserver" echo "0" >/proc/sys/net/ipv4/ip_forward /sbin/ipvsadm -C /sbin/ifconfig eth1:0 down ;; *) echo "Usage: $0 {start|stop}" exit 1 esac |
通過client訪問LVS前置服務(wù)器,可以看到已經(jīng)實(shí)現(xiàn)了負(fù)載均衡的效果。
關(guān)于LVS的調(diào)度算法,轉(zhuǎn)載自張逸群的博客
http://www.zhangyiqun.net/56.html
1. 大鍋飯調(diào)度(Round-Robin Scheduling RR)
rr – 純輪詢方式,比較垃圾。把每項(xiàng)請求按順序在真正服務(wù)器中分派。
2. 帶權(quán)重的大鍋飯調(diào)度(Weighted Round-Robin Scheduling WRR)
wrr -帶權(quán)重輪詢方式。把每項(xiàng)請求按順序在真正服務(wù)器中循環(huán)分派,但是給能力較大的服務(wù)器分派較多的作業(yè)。
3. 誰不干活就給誰分配(Least-Connection LC)
lc – 根據(jù)最小連接數(shù)分派
4. 帶權(quán)重的誰不干活就給誰分配(Weighted Least-Connections WLC 默認(rèn))
wlc – 帶權(quán)重的。機(jī)器配置好的權(quán)重高。
5. 基于地區(qū)的最少連接調(diào)度(Locality-Based Least-Connection
Scheduling LBLC)
lblc – 緩存服務(wù)器集群。基于本地的最小連接。把請求傳遞到負(fù)載小的服務(wù)器上。
6. 帶有復(fù)制調(diào)度的基于地區(qū)的最少連接調(diào)度(Locality-Based Least-Connection Scheduling with Replication Scheduling LBLCR)
lblcr – 帶復(fù)制調(diào)度的緩存服務(wù)器集群。某頁面緩存在服務(wù)器A上,被訪問次數(shù)極高,而其他緩存服務(wù)器負(fù)載較低,監(jiān)視是否訪問同一頁面,如果是訪問同一頁面則把請求分到其他服務(wù)器。
7. 目標(biāo)散列調(diào)度(Destination Hash Scheduling DH)
realserver中綁定兩個(gè)ip。ld判斷來者的ISP商,將其轉(zhuǎn)到相應(yīng)的IP。
8. 源散列調(diào)度(Source Hash Scheduling SH)
源地址散列。基于client地址的來源區(qū)分。(用的很少)
9. 最短的期望的延遲(Shortest Expected Delay Scheduling SED)
基于wlc算法。這個(gè)必須舉例來說了
ABC三臺(tái)機(jī)器分別權(quán)重123 ,連接數(shù)也分別是123。那么如果使用WLC算法的話一個(gè)新請求進(jìn)入時(shí)它可能會(huì)分給ABC中的任意一個(gè)。使用sed算法后會(huì)進(jìn)行這樣一個(gè)運(yùn)算
A:(1+1)/1
B:(1+2)/2
C:(1+3)/3
根據(jù)運(yùn)算結(jié)果,把連接交給C 。
10.最少隊(duì)列調(diào)度(Never Queue Scheduling NQ)
無需隊(duì)列。如果有臺(tái)realserver的連接數(shù)=0就直接分配過去,不需要在進(jìn)行sed運(yùn)算。
遇到的問題..
這個(gè)實(shí)驗(yàn)看著簡單,做了足足半個(gè)月,但是還有一些不明白的問題,可能和網(wǎng)絡(luò)知識的匱乏有關(guān)系。
在DR前置機(jī)上不能通過VIP訪問真實(shí)的服務(wù)器
在DR前置機(jī)上執(zhí)行命令,報(bào)錯(cuò)如下
查看ipvsadm,連接狀態(tài)是SYN_RECV
一開始我使用了三臺(tái)虛擬機(jī),卡在這個(gè)地方很長時(shí)間。
后來偶然發(fā)現(xiàn),用第四臺(tái)虛擬機(jī)就可以正常訪問了..
posted on 2014-09-12 10:05 順其自然EVO 閱讀(424) 評論(0) 編輯 收藏 所屬分類: 測試學(xué)習(xí)專欄