LB 集羣的架構以下圖,原理也很簡答,就是當用戶的請求過來時,會直接發到分發器
(Director Server)上,而後它把用戶的請求根據預先設置好的算法,智能均衡地分發到後
端的真正服務器(real server)上。若是不一樣的機器,可能用戶請求到的數據不同,爲了
避免這樣的狀況發生,因此用到了共享存儲,這樣保證全部用戶請求的數據是同樣的。 html
LVS 是一個實現負載均衡集羣的開源軟件項目,LVS 架構從邏輯上可分爲調度層
(Director)、server集羣層(Real server)和共享存儲。LVS 從實現上分爲下面三種模式。
(1)NAT(調度器將請求的目標 ip 即 vip地址改成Real server的ip, 返回的數據包也
通過調度器,調度器再把源地址修改成vip)。 nginx
(2)TUN(調度器將請求來的數據包封裝加密經過 ip 隧道轉發到後端的 real server上,
而real server會直接把數據返回給客戶端,而再也不通過調度器)。
(3)DR(調度器將請求來的數據包的目標mac地址改成real server的mac 地址,返回
的時候也不通過調度器,直接返回給客戶端)。
參考資料 http://www.it165.net/admin/html/201401/2248.html web
其中DIP(driector ip)爲分發器的 IP,NAT模式下它必須爲公網IP,要對外服務。VIP(virtual ip)爲虛擬IP,用在TUN 和DR 模式中,需
要同時配置在分發器和後端真實服務器上。RIP(Real IP)爲後端真實服務器的IP,在TUN和DR 模式中,RIP 爲公網 IP。
要想把用戶的請求調度給後端的 RS,是須要通過調度算法來實現的,那麼關於 LVS 的調度算法,都有哪些?
輪詢 Round-Robin rr
加權輪詢 Weight Round-Robin wrr
最小鏈接 Least-Connection lc
加權最小鏈接 Weight Least-Connection wlc
基於局部性的最小鏈接 Locality-Based Least Connections lblc
帶複製的基於局部性最小鏈接 Locality-Based Least Connections with Replication lblcr
目標地址散列調度 Destination Hashing dh
源地址散列調度 Source Hashing sh算法
(1)環境說明
三臺服務器一臺做爲 director, 兩臺做爲real server,Director 有一個外網 ip
(192.168.31.166) 和一個內網 ip(192.168.21.166), 兩個real server上只有內網
ip(192.168.21.100)和(192.168.21.101) 而且須要把兩個 real server的內網網關設置爲 director
的內網ip(192.168.21.166)。
(2)安裝和配置
兩個real server 上都安裝 nginx服務
#yum install -y nginx
Director上安裝ipvsadm
#yum install -y ipvsadm
Direcotr 上編輯nat實現腳本
#vim /usr/local/sbin/lvs_nat.sh
寫入以下內容:
#! /bin/bash
#director 服務器上開啓路由轉發功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
#關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects vim
#director 設置nat防火牆
iptables -t nat –F
iptables -t nat –X
iptables -t nat -A POSTROUTING -s 192.168.21.0/24 -j MASQUERADE
#director設置ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM –C
$IPVSADM -A -t 192.168.31.166:80 -s lc -p 300
$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.100:80 -m -w 1
$IPVSADM -a -t 192.168.31.166:80 -r 192.168.21.101:80 -m -w 1
保存後,在Director上直接運行這個腳本就能夠完成lvs/nat的配置了。
#/bin/bash /usr/local/sbin/lvs_nat.sh 後端
(3)測試
經過瀏覽器測試兩臺機器上的 web內容http://192.168.31.166。爲了區分開,咱們能夠
把nginx的默認頁修改一下:
在 RS1 上執行
#echo "rs1rs1" >/usr/share/nginx/html/index.html
在 rs2 上執行
#echo "rs2rs2" >/usr/share/nginx/html/index.html
注意,切記必定要在兩臺RS上設置網關的IP 爲 director的內網IP。 瀏覽器