搭建LVS負載均衡測試環境
土豪直接F5,效能最好,價格最貴
沒錢也可以使用Apache,Nginx 工作在網路的第四層,雖然效能一般,但是很靈活,比如可以將80埠對映到真實伺服器的8080埠.
http://blog.itpub.net/29254281/viewspace-1070221/
還有一種選擇LVS ,它工作在網路的第三層,效能較好,非常穩定.
但是它不能實現埠的重新對映.因為在網路的第三層,並不清楚埠的資訊。
下面的實驗搭建了一個LVS負載均衡測試環境,採用DR的方式。

客戶端訪問LVS前置機
這個請求如下
源MAC(client mac) 目標MAC(DR mac) 源IP(client IP) 目標IP(DR IP,VIP)
LVS前置機會將報文改寫之後轉發真實的伺服器
改寫如下
源MAC(client mac) 目標MAX(真實伺服器MAC) 源IP(client IP) 目標IP(DR IP,VIP)
因為真實的伺服器將VIP繫結到了環回地址,所以會處理這個請求,並返回響應的報文.
網路層的源目對掉
源MAC(真實伺服器MAC) 目標MAC(client mac) 源IP(DR IP,VIP) 目標IP(client IP)
所以LVS DR的本質就是網路層的欺騙。
實驗採用VirtualBox虛擬機器,並且配置內部網路,關閉SELinux和防火牆

首先,在LVS DR前置機上安裝ipvsadm命令
yum install ipvsadm -y
然後配置兩臺真實伺服器(RealServer)的Http服務
yum install httpd -y
service httpd start
chkconfig httpd on
並分別改寫/var/www/html/index.html的內容為"real server 1"和"real server 2"
然後在兩臺真實伺服器上執行如下的指令碼
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前置機上執行如下指令碼
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前置伺服器,可以看到已經實現了負載均衡的效果。

關於LVS的排程演算法,轉載自張逸群的部落格
http://www.zhangyiqun.net/56.html
1. 大鍋飯排程(Round-Robin Scheduling RR)
rr – 純輪詢方式,比較垃圾。把每項請求按順序在真正伺服器中分派。
2. 帶權重的大鍋飯排程(Weighted Round-Robin Scheduling WRR)
wrr -帶權重輪詢方式。把每項請求按順序在真正伺服器中迴圈分派,但是給能力較大的伺服器分派較多的作業。
3. 誰不幹活就給誰分配(Least-Connection LC)
lc – 根據最小連線數分派
4. 帶權重的誰不幹活就給誰分配(Weighted Least-Connections WLC 預設)
wlc – 帶權重的。機器配置好的權重高。
5. 基於地區的最少連線排程(Locality-Based Least-Connection
Scheduling LBLC)
lblc – 快取伺服器叢集。基於本地的最小連線。把請求傳遞到負載小的伺服器上。
6. 帶有複製排程的基於地區的最少連線排程(Locality-Based Least-Connection Scheduling with Replication Scheduling LBLCR)
lblcr – 帶複製排程的快取伺服器叢集。某頁面快取在伺服器A上,被訪問次數極高,而其他快取伺服器負載較低,監視是否訪問同一頁面,如果是訪問同一頁面則把請求分到其他伺服器。
7. 目標雜湊排程(Destination Hash Scheduling DH)
realserver中繫結兩個ip。ld判斷來者的ISP商,將其轉到相應的IP。
8. 源雜湊排程(Source Hash Scheduling SH)
源地址雜湊。基於client地址的來源區分。(用的很少)
9. 最短的期望的延遲(Shortest Expected Delay Scheduling SED)
基於wlc演算法。這個必須舉例來說了
ABC三臺機器分別權重123 ,連線數也分別是123。那麼如果使用WLC演算法的話一個新請求進入時它可能會分給ABC中的任意一個。使用sed演算法後會進行這樣一個運算
A:(1+1)/1
B:(1+2)/2
C:(1+3)/3
根據運算結果,把連線交給C 。
10.最少佇列排程(Never Queue Scheduling NQ)
無需佇列。如果有臺realserver的連線數=0就直接分配過去,不需要在進行sed運算。
遇到的問題..
這個實驗看著簡單,做了足足半個月,但是還有一些不明白的問題,可能和網路知識的匱乏有關係。
在DR前置機上不能通過VIP訪問真實的伺服器
在DR前置機上執行命令,報錯如下
檢視ipvsadm,連線狀態是SYN_RECV
一開始我使用了三臺虛擬機器,卡在這個地方很長時間。
後來偶然發現,用第四臺虛擬機器就可以正常訪問了..
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1267388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LVS 負載均衡負載
- Linux LVS 負載均衡Linux負載
- LVS負載均衡群集負載
- LVS負載均衡群集概念、NAT模式LVS負載均衡實戰部署負載模式
- 負載均衡LVS+NAT負載
- 負載均衡環境搭建實戰之apache和tomcat負載ApacheTomcat
- Linux環境搭建Nginx+Tomcat負載均衡叢集LinuxNginxTomcat負載
- 負載均衡之--Nginx、LVS、HAProxy負載Nginx
- LVS負載均衡群集--NAT模式負載模式
- LVS 負載均衡之 VS/NAT 模式負載模式
- LVS 負載均衡之 VS/TUN 模式負載模式
- LVS 負載均衡之 VS/DR 模式負載模式
- LVS+KEEPALIVED負載均衡實驗負載
- Linux環境下Nginx及負載均衡LinuxNginx負載
- lvs+keepAlived→效率最高的負載均衡負載
- LVS#MySQL+Keepalived四層負載均衡MySql負載
- 伺服器群集LVS負載均衡-NAT伺服器負載
- 負載均衡之LVS與Nginx對比負載Nginx
- 伺服器群集—LVS負載均衡群集(LVS-NAT部署)伺服器負載
- 運維講堂:LVS負載均衡模式與F5負載均衡盤點運維負載模式
- LVS+Keepalived 實現高可用負載均衡負載
- LVS負載均衡配置與keepalive服務配置負載
- 在 kubernetes 環境中實現 gRPC 負載均衡RPC負載
- 動手實現一致性雜湊演算法,並搭建環境測試其負載均衡特性.演算法負載
- mysql負載均衡搭建(haproxy)MySql負載
- 叢集,lvs負載均衡的四種工作模式負載模式
- android測試環境搭建Android
- jmeter壓力測試實現負載均衡JMeter負載
- LVS和Nginx實現負載均衡功能的比較Nginx負載
- LVS+Keepalive 實現負載均衡高可用叢集負載
- 負載均衡簡介與搭建負載
- 新手搭建 kubernetes 測試環境
- kaldi環境搭建 | yesno 測試
- 面試之負載均衡面試負載
- linux搭建LVS+keepalive+nginx實現叢集高效能負載均衡配置詳解LinuxNginx負載
- MySQL Route負載均衡與讀寫分離Docker環境使用MySql負載Docker
- Nginx多種負載均衡策略搭建Nginx負載
- 搭建自動化測試環境
- griffin環境搭建及功能測試