1. 程式人生 > >LVS部署測試

LVS部署測試

linux lvs

防偽碼:沒有相當程度的孤獨是不可能有內心的平和。

1、概念

1.1 介紹

負載均衡技術有很多實現方案,如基於DNS域名輪流解析的方法、基於客戶端調度訪問的方法、基於應用層系統負載的調度方法,還有基於IP地址的調度方法,在這些負載調度算法中,執行效率最高的就是IP負載均衡技術。

LVS的IP負載均衡技術是通過ipvs內核模塊來實現的,ipvs是LVS集群系統的核心軟件,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須通過這個虛擬的IP地址訪問集群服務。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達負載調度器,然後由負載調度器從Real Server列表中選取一個服務節點響應用戶的請求。當用戶的請求到達負載調度器後,調度器如何將請求發送到提供服務的Real Server節點,而Real Server節點如何返回數據給用戶,是ipvs實現的重點技術,ipvs實現負載均衡機制有四種,分別是NAT

TUNDR以及後來經淘寶開發的FullNAT

LVS是Linux Virtual Server的簡寫,即Linux虛擬服務器,可以在UNIX/Linux平臺下實現負載均衡集群功能。該項目在1998年5月由章文嵩博士成立,是國內最早出現的自由軟件項目之一。

Linux內核2.4.24版本以後IPVS已經成為Linux官方標準內核的一部分。LVS在內核中的名字是IPVS。

LVS分為兩個部件:ipvs和ipvsadm

  • ipvs : 工作於內核空間,主要用於使用戶定義的策略生效;

  • ipvsadm : 工作於用戶空間,主要用於用戶定義和管理集群服務的工具;

不能直接配置內核中的IPVS,而需要使用IPVS的管理工具ipvsadm進行管理。也可以通過keepalived軟件直接管理ipvs。

ipvs工作於內核空間的INPUT鏈上,當收到用戶請求某集群服務時,經過PREROUTING鏈,經檢查本機路由表,送往INPUT鏈;在進入netfilter的INPUT鏈時,ipvs強行將請求報文通過ipvsadm定義的集群服務策略的路徑改為FORWORD鏈,將報文轉發至後端真實提供服務的主機。


1.2 結構

LVS 集群分為三層結構:

  • 負載調度器(load balancer):它是整個LVS 集群對外的前端機器,負責將client請求發送到一組服務器[多臺LB IP]上執行,而client端認為是返回來一個同一個IP【通常把這個IP 稱為虛擬IP/VIP】

  • 服務器池(server pool):一組真正執行client 請求的服務器,一般是我們的web服務器;除了web,還有FTP,MAIL,DNS

  • 共享存儲(shared stored):它為 server pool 提供了一個共享的存儲區,很容易讓服務器池擁有相同的內容,提供相同的服務


1.3 工作模式

VS/NAT(Virtual Server via Network Address Translation):網絡地址映射,通過網絡地址轉換,調度器LB重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文處理後,返回時必須通過調度器,經過調度器時報文的源地址被重寫,再返回給客戶,完成整改負載調度過程。

IP TUN(IP隧道):是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的數據報文能被封裝和轉發到另一個IP地址。IP隧道技術亦稱為IP封裝技術(IP encapsulation)。Director和RealServer必需在物理上有一個網卡通過不間斷的局域網相連。 RealServer上綁定的VIP配置在各自Non-ARP的網絡設備上(如lo或tunl),Director的VIP地址對外可見,而RealServer的VIP對外是不可見的。RealServer的地址即可以是內部地址,也可以是真實地址。

VS/DR(Virtual Server Direct Routing,直接路由):通過改寫請求報文的目標MAC地址,將請求發給真實服務器,而真實服務器將響應後的處理結果直接返回給客戶端用戶。但要求調度器LB和真實服務器RS都有一塊網卡連在同一物理網段上,即必須在同一個局域網環境。


1.4 常用的調度算法

常用算法使用說明
RRRound Robin(輪詢調度),它將請求依次分配給不同的RS節點,也就是RS節點均攤請求,這種算法比較簡單,但只適合RS節點性能相差不大的情況。
WRRWighted Round Robin(加權輪詢調度),根據不同RS節點的權值分配任務,權值較高的RS將優先獲得任務,且分配到的連接數比權值低的要多。
DHDestination Hashing(目標地址哈希調度),以目的地址為關鍵字查找一個靜態hash表來獲得需要的RS。
SHSourse Hashing(源地址哈希調度),以源地址為關鍵字查找一個靜態hash表來獲得需要的RS。
WLCWeighted Least Connection(加權最小連接數調度),假設各臺RS的權值為Wi,當前的TCP連接數為Ti,選取Ti/Wi為最小的RS作為下一個分配的RS。
LCLeast Connection(最小連接數調度),將新的連接請求發送給當前TCP連接數最小的RS節點。
LBLCLocality-Based Least Connection(基於地址的最少連接數調度),根據請求的目標IP地址找出該IP地址最近使用的RealServer,若該RealServer是可用且沒超載,則將請求發送給該服務器;若服務器不存在或超載,則用最少連接數的原則選出一個可用的RS,將請求發送到該RS。
LBLCRReplicated and Locality-Based Least Connction(基於地址帶重復最小連接數調度),對於某個目的地址,對應有一個RS子集。若對此地址請求,則會分配子集中連接數最小的RS;若子集中所有RS都滿負荷,則從集群中選擇一個連接數最小的RS,將它加入到此子集中並分配連接;若一定時間內,未做任何修改,則刪除子集中負載最高的RS節點。
SEDShortest Expected Delay scheduling SED(最短期望延遲),基於WLC算法,根據Ti+n/Wi最小值作為下一個分配的RS。
NQNerver Queue Scheduling(最少隊列調度),如果有臺RS的連接數為0,則直接分配過去,不需要進行SED運算。


2、部署測試

2.1 環境準備

主機名IPVIP系統
Director192.168.10.51192.168.10.31CentOS release 6.9 (Final)
RS-01192.168.10.52
CentOS release 6.9 (Final)
RS-02192.168.10.53
CentOS release 6.9 (Final)


2.2 RS節點準備

兩臺RS均部署nginx

# 安裝pcre和openssl
yum install -y pcre-devel openssl-devel

# 編譯安裝nginx
useradd nginx -s /sbin/nologin -M
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar zxf nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure --user=nginx --prefix=/app/nginx-1.12.0/ --with-http_stub_status_module --with-http_ssl_module --with-http_relip_module
make && make install
ln -s /app/nginx-1.12.0 /app/nginx

# 啟動nginx
/app/nginx/sbin/nginx -t
/app/nginx/sbin/nginx


2.3 安裝LVS

# 安裝依賴包
yum install -y libnl* popt*

# 編譯安裝ipvsadm
cd /opt
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar zxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make && make install

# 加載ip_vs模塊
modprobe ip_vs
lsmod|grep ip_vs

# 添加VIP
ifconfig eth0:0 192.168.10.31/24 up
route add -host 192.168.10.31 dev eth0

# 配置ipvsadm
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t 192.168.10.31:80 -s rr -p 20
ipvsadm -a -t 192.168.10.31:80 -r 192.168.10.52 -g -w 1
ipvsadm -a -t 192.168.10.31:80 -r 192.168.10.53 -g -w 1
ipvsadm -L -n


2.4 配置RS

2.4.1 配置RS-01

# 添加RS-01節點測試頁面
echo "RS-01-192.168.10.52" >/app/nginx/html/index.html

# 添加路由
ifconfig lo:0 192.168.10.31/32 up
route add -host 192.168.10.31 dev lo

# arp_ignore:定義對目標地址為本地IP的ARP詢問的不同應答模式。
# arp_announce:對網絡接口上,本地IP地址發出的ARP回應做出相應級別的限制,回應限制。
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

2.4.2 配置RS-02

echo "RS-02-192.168.10.53">>/app/nginx/html/index.html
ifconfig lo:0 192.168.10.31/32 up
route add -host 192.168.10.31 dev lo
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


3、測試

在瀏覽器地址欄輸入http://192.168.10.31

技術分享


由於瀏覽器有緩存及LVS默認會話保持等影響,測試的時候要多次測試且間隔一定時間才能切換到另一臺,盡可能換不同的客戶端測試。


本文出自 “簡明Linux” 博客,請務必保留此出處http://easylinux.blog.51cto.com/9732761/1947398

LVS部署測試