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
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 常用的調度算法
常用算法 | 使用說明 |
RR | Round Robin(輪詢調度),它將請求依次分配給不同的RS節點,也就是RS節點均攤請求,這種算法比較簡單,但只適合RS節點性能相差不大的情況。 |
WRR | Wighted Round Robin(加權輪詢調度),根據不同RS節點的權值分配任務,權值較高的RS將優先獲得任務,且分配到的連接數比權值低的要多。 |
DH | Destination Hashing(目標地址哈希調度),以目的地址為關鍵字查找一個靜態hash表來獲得需要的RS。 |
SH | Sourse Hashing(源地址哈希調度),以源地址為關鍵字查找一個靜態hash表來獲得需要的RS。 |
WLC | Weighted Least Connection(加權最小連接數調度),假設各臺RS的權值為Wi,當前的TCP連接數為Ti,選取Ti/Wi為最小的RS作為下一個分配的RS。 |
LC | Least Connection(最小連接數調度),將新的連接請求發送給當前TCP連接數最小的RS節點。 |
LBLC | Locality-Based Least Connection(基於地址的最少連接數調度),根據請求的目標IP地址找出該IP地址最近使用的RealServer,若該RealServer是可用且沒超載,則將請求發送給該服務器;若服務器不存在或超載,則用最少連接數的原則選出一個可用的RS,將請求發送到該RS。 |
LBLCR | Replicated and Locality-Based Least Connction(基於地址帶重復最小連接數調度),對於某個目的地址,對應有一個RS子集。若對此地址請求,則會分配子集中連接數最小的RS;若子集中所有RS都滿負荷,則從集群中選擇一個連接數最小的RS,將它加入到此子集中並分配連接;若一定時間內,未做任何修改,則刪除子集中負載最高的RS節點。 |
SED | Shortest Expected Delay scheduling SED(最短期望延遲),基於WLC算法,根據Ti+n/Wi最小值作為下一個分配的RS。 |
NQ | Nerver Queue Scheduling(最少隊列調度),如果有臺RS的連接數為0,則直接分配過去,不需要進行SED運算。 |
2、部署測試
2.1 環境準備
主機名 | IP | VIP | 系統 |
Director | 192.168.10.51 | 192.168.10.31 | CentOS release 6.9 (Final) |
RS-01 | 192.168.10.52 | CentOS release 6.9 (Final) | |
RS-02 | 192.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部署測試