LVS(Linux Virtual Server)學習筆記
此文主要對lvs負載均衡學習的總結,一為記錄,二為鞏固。主要介紹:1、lvs基礎;2、lvs的配置;3、lvs的實現
前提:負載均衡(LB Cluster) 負載均衡實現方法有兩種:硬件實現和軟件實現; 硬件比較常見的有: 1) F5 Big-IP;2)Citrix Netscaler;3)A TEN 軟件比較常見的有: 1)LVS(Linux Virtual Server);2)nginx;3)HAProxy;4)ATS(Apache Traffic Server)
一、LVS基礎
1.1 什么是lvs
LVS是Linux Virtual Server的縮寫,顧名思義是一個虛擬的服務器集群系統,項目在1998年5月由張文嵩博士成立,在linux 2.6版本后,LVS被收錄到內核中。
1.2 lvs能拿來干什么
LVS作為一個調度器,能把用戶的大量并發請求負載均衡至后端服務器,使得網站在高并發下還能提供服務,而不至于癱瘓。LVS技術要達到的目標是:通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。 LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了??梢岳肔VS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。
1.3 lvs的工作模式
LVS是四層負載均衡,也就是說建立在OSI模型的第四層——傳輸層之上,傳輸層上有我們熟悉的TCP/UDP,LVS支持TCP/UDP的負載均衡。因為LVS是四層負載均衡,因此它相對于其它高層負載均衡的解決辦法,比如DNS域名輪流解析、應用層負載的調度、客戶端的調度等,它的效率是非常高的。
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、DR、TUN及FULLNAT。
1.3.1 lvs-nat工作模式
NAT(Network Address Translation 網絡地址轉換)是一種外網和內外地址映射的技術,內網可以是私有網址,外網可以使用NAT方法修改數據報頭,讓外網與內網能夠互相通信。NAT模式下,網絡數據報的進出都要經過LVS的處理。LVS需要作為RS(真實服務器)的網關。當包到達LVS時,LVS做目標地址轉換(DNAT),將目標IP改為RS的IP。RS接收到包以后,仿佛是客戶端直接發給它的一樣。RS處理完,返回響應時,源IP是RS IP,目標IP是客戶端的IP。這時RS的包通過網關(LVS)中轉,LVS會做源地址轉換(SNAT),將包的源地址改為VIP,這樣,這個包對客戶端看起來就仿佛是LVS直接返回給它的??蛻舳藷o法感知到后端RS的存在。
(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP; (2)請求報文和響應報文都必須經由Director轉發;Director易于成為系統瓶頸; (3)支持端口映射,可修改請求報文的目標PORT; (4)vs必須是Linux系統,rs可以是任意系統;
缺點:在整個過程中,所有輸入輸出的流量都要經過LVS 調度服務器。顯然,LVS 調度服務器的網絡I/O壓力將會非常大,因此很容易成為瓶頸,特別是對于請求流量很小,而響應流量很大的Web類應用來說尤為如此。
優點: NAT模式的優點在于配置及管理簡單,由于了使用NAT技術,LVS 調度器及應用服務器可以在不同網段中,網絡架構更靈活,應用服務器只需要進行簡單的網絡設定即可加入集群。
1.3.2 lvs-dr工作模式(最為常用)
DR(Direct Routing 直接路由模式)此模式時LVS 調度器只接收客戶發來的請求并將請求轉發給后端服務器,后端服務器處理請求后直接把內容直接響應給客戶,而不用再次經過LVS調度器。LVS只需要將網絡幀的MAC地址修改為某一臺后端服務器RS的MAC,該包就會被轉發到相應的RS處理,注意此時的源IP和目標IP都沒變。RS收到LVS轉發來的包時,鏈路層發現MAC是自己的,到上面的網絡層,發現IP也是自己的,于是這個包被合法地接受,RS感知不到前面有LVS的存在。而當RS返回響應時,只要直接向源IP(即用戶的IP)返回即可,不再經過LVS。
注意: (1) 確保前端路由器將目標IP為VIP的請求報文發往Director: (a) 在前端網關做靜態綁定; (b) 在RS上使用arptables; (c) 在RS上修改內核參數以限制arp通告及應答級別; arp_announce arp_ignore (2) RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director; (3) RS跟Director要在同一個物理網絡; (4) 請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client; (5) 此模式不支持端口映射;
缺點:唯一的缺陷在于它要求LVS 調度器及所有應用服務器在同一個網段中,因此不能實現集群的跨網段應用。
優點:可見在處理過程中LVS Route只處理請求的直接路由轉發,所有響應結果由各個應用服務器自行處理,并對用戶進行回復,網絡流量將集中在LVS調度器之上。
1.3.3 lvs-tun 工作模式
TUN(virtual server via ip tunneling IP 隧道)調度器把請求的報文通過IP隧道轉發到真實的服務器。真實的服務器將響應處理后的數據直接返回給客戶端。這樣調度器就只處理請求入站報文。此轉發方式不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP),由于一般網絡服務應答數據比請求報文大很多,采用lvs-tun模式后,集群系統的最大吞吐量可以提高10倍
注意: (1) DIP, VIP, RIP都應該是公網地址; (2) RS的網關不能,也不可能指向DIP; (3) 請求報文要經由Director,但響應不能經由Director; (4) 此模式不支持端口映射; (5) RS的操作系統得支持隧道功能
缺點:由于后端服務器RS處理數據后響應發送給用戶,此時需要租借大量IP(特別是后端服務器使用較多的情況下)。
優點:實現lvs-tun模式時,LVS 調度器將TCP/IP請求進行重新封裝并轉發給后端服務器,由目標應用服務器直接回復用戶。應用服務器之間是通過IP 隧道來進行轉發,故兩者可以存在于不同的網段中。
1.3.4 lvs-fullnat模式(此類型默認不支持)
此模式類似DNAT,它通過同時修改請求報文的源IP地址和目標IP地址進行轉發
注意: (1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP; (2) RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client; (3) 請求和響應報文都經由Director; (4) 支持端口映射;
1.4 LVS 的調度算法
根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法和動態方法兩種。
靜態方法: 僅根據算法本身進行調度; RR:roundrobin,輪詢調度,即簡單在各主機間輪流調度; WRR:Weighted RR,加權輪詢調度,根據各主機的權重進行輪詢; SH:Source Hashing,實現session sticy,源IP地址hash;將來自于同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定; DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡; 動態方法: 主要根據每RS當前的負載狀態及調度算法進行調度; Overhead= LC:least connections最小連接調度,; lvs根據Overhead=activeconns*256+inactiveconns計算服務器的負載狀態,每次選擇overhead最小的服務器 WLC:Weighted LC 加權最小連接調度; lvs根據Overhead=(activeconns*256+inactiveconns)/weight來計算服務器負載,每次選擇overhead最小的服務器,它是lvs的默認調度算法; SED:Shortest Expection Delay最短期望延遲, 它不對 inactive 狀態的連接進行計算,根據Overhead=(activeconns+1)*256/weight計算服務器負載,選擇 overhead 最小的服務器進行調度 NQ:Never Queue 當有空閑服務器時,直接調度至空閑服務器,當沒有空閑服務器時,使用 SED 算法進行調度 LBLC:Locality-Based LC,動態的DH算法,基于局部性最少連接,相當于 dh + wlc,正常請求下使用 dh 算法進行調度,如果服務器超載,則使用 wlc 算法調度至其他服務器; LBLCR:LBLC with Replication,帶復制功能的LBLC,與 LBLC 不同的是 LVS 將請求 IP 映射至一個服務池中,使用 dh 算法調度請求至對應的服務池中,使用 lc 算法選擇服務池中的節點,當服務池中的所有節點超載,使用 lc 算法從所有后端 Realserver 中選擇一個添加至服務吃中。
1.5 ipvsadm lvs負載均衡管理命令
核心功能: 集群服務管理(lvs調度器):增、刪、改; 集群服務的RS管理:增、刪、改; 查看; 管理集群服務:增、改、刪; 增、改: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] 刪: ipvsadm -D -t|u|f service-address service-address: -t|u|f: -t: TCP協議的端口,VIP:TCP_PORT -u: TCP協議的端口,VIP:UDP_PORT -f:firewall MARK,是一個數字; [-s scheduler]:指定集群的調度算法,默認為wlc; 例子: # ipvsadm -A -t 172.16.33.116:80 -s rr 管理集群上的RS:增、改、刪; 增、改: ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] 刪: ipvsadm -d -t|u|f service-address -r server-address server-address: rip[:port] 選項: lvs類型: -g: gateway, dr類型 -i: ipip, tun類型 -m: masquerade, nat類型 -w weight:權重; 例子: # ipvsadm -a -t 172.16.33.117:80 -r 192.168.100.1 -m # ipvsadm -a -t 172.16.33.118:80 -r 192.168.100.2 -m 清空定義的所有內容: ipvsadm -C 查看: ipvsadm -L|l [options] --numeric, -n:numeric output of addresses and ports --exact:expand numbers (display exact values) --connection, -c:output of current IPVS connections --stats:output of statistics information --rate :output of rate information 保存和重載: ipvsadm -S = ipvsadm-save ipvsadm -R = ipvsadm-restore
原創文章,作者:yaoqin.liang,如若轉載,請注明出處:http://www.www58058.com/68327