理解LVS工作原理
??
??LVS是Linux虛擬服務(Linux Virtual Server)的簡稱,是一個虛擬的服務器集群系統,是國內最早的一批自由軟件項目,由章文嵩博士發起。現在LVS項目已經被Linux內核收錄,成為Linux表針內核的一個重要組成部分。
??隨著互聯網大潮的不斷發展,縱向拓展的高額成本和逐漸降低的性能提升不足以滿足用戶的正常訪問,因此橫向拓展便成為主要的發展方向。通過使用LVS提供的負載均衡技術和Linux操作系統進而實現一個高性能,高可用的服務器集群,它具有著良好的可靠性,可拓展性和可操作性,從而能夠以較低廉的成本價格來提供更好的性能提升。
??LVS項目自從1998年提出開始,隨機不斷的發展,現在已經成為了一個相當成熟的技術項目。可以利用LVS技術來實現高度的可伸縮性和高可用性的網絡服務;有效的可管理性提供了便捷的異地管理主機;價格的有效性實現了整個系統的經濟性和成本的可控性。
??
??
二.LVS的結構
??
??LVS構建的集群系統大致可分為三個部分組成:前端的負載均衡層,中間的服務器集群層和最底層的共享數據層。負載調度器能夠無縫隙的將網絡請求調度到後端的真實提供服務的服務器上,從而使得服務器集群的結構是透明的,用戶在訪問整個集群的服務時就像是在訪問一臺高性能,高可用性的真實服務器一樣。客戶端的程序不會受到服務器集群的修改而受到影響,服務器集群的可伸縮性在於可以通過向集群中加入或者刪除節點來實現,通過對應的節點故障檢測和系統重置可以實現高度的可用性。
??
??
??LVS體系圖例
??
??
LVS各層次的具體劃分
??負載均衡層:
????處於整個集群的最前端,由一臺或者多臺調度器構成,LVS模塊部署在調度器上,調度器根據既定的算法來實現將網絡請求調度到不同後端服務器,完成對應的功能。
??服務器集群層:
????由一組實際運行著應用服務的服務器構成,後端服務器支持的服務包括,web服務,郵件服務,FTP服務,DNS服務等一個或者多個,每個服務器之間可以通過LAN或者更大範圍的WAN相連,在實際的應用場景中,調取服務器也可以作為應用服務器提供服務。
??
??共享數據層:
????向服務器集群中的所有real server提供共享存儲空間和內容一致性的存儲區域。一般是由磁盤陣列組成,提供數據的一致性。也可以由NFS提供。目前來說磁盤陣列更為適合,NFS受網絡影響較大,不太穩定。
註意:調度器在整個LVS體修中最為關鍵,是整個系統的核心部分。目前來說調度器系統僅僅支持Linux,內核2.6之後已經無需設置就原生支持LVS,但是reasl server的系統並不受限制,大多數常見的系統均可作為應用服務器提供服務。
??
三.負載均衡技術與LVS調度機制
??
??當前負載均衡技術有很多實現方案,例如基於DNS域名依次輪流解析、基於客戶端調度訪問、基於應用層系統負載的調度,還有基於IP地址的調度等,相比較而言IP負載均衡技術更為成熟和效率。LVS的IP負載均衡技術是依賴於ipvs內核模塊來實現的,ipvs是LVS集群系統的核心軟件,它的主要作用是:安裝在調度器上,同時在調度器上虛擬出一個IP地址(這個地址可以正常訪問互聯網),用戶必須通過這個虛擬的IP地址訪問集群服務。這個虛擬IP一般稱為LVS的VIP。訪問的請求首先經過VIP到達負載調度器,然後由負載調度器從Real Server列表中根據不同的調度算法計算選取一個服務節點響應用戶的請求。
??
常用的調度機制
??
??VS/NAT機制(Virtual Server via Network Address Translation)
??通過網絡地址轉換技術。當用戶的請求報文發送到調度器時,調度器重寫請求報文的目標地址為調度器通過算法得出的後端real server的IP地址,同時請求報文的目標端口號也會被重寫為後端服務器提供服務的端口號,之後將重新構建的報文分派給後端的真實服務器;真實服務器的在返回數據報文給用戶時,響應報文在通過調度器時,調度器會再次將報文的源地址和源端口重寫為虛擬IP地址和端口,再返回給客戶,完成整個負載調度過程。
??多目標的DNAT(iptables);它通過修改請求報文的目標IP地址(同時可能會修改目標端口)至挑選出某RS的RIP地址實現轉發;
??
註意:
????(1) RS應該和DIP應該使用私網地址,且RS的網關要指向DIP;
????(2) 請求和響應報文都要經由director轉發;極高負載的場景中,director可能會成為系統瓶頸;
????(3) 支持端口映射;
????(4) RS可以使用任意操作系統;
????(5) RS的RIP和Director的DIP必須在同一IP網絡;
??
??VS/TUN機制(Virtual Server via IP Tunneling)
??采用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成為瓶頸。采用IP隧道技術實現LVS,它的調度方法與NAT方式一樣,但是TUN的報文轉發方式不同,TUN方式中,調度器使用IP隧道技術將用戶的請求轉發到某個real server上,這個real server可以直接通過網絡響應用戶的請求,不必經過調度器再次調度,因此調度器和real server的地域限制不再存在,可以與調度器在同一網段,也可以在不同的網絡中。因此,在TUN中調度器僅僅負責處理用戶的報文請求,而不必處理響應報文,采用 VS/TUN技術後,集群系統的最大吞吐量可以提高10倍。
??
註意:
??TUN不修改請求報文的ip首部,而是通過在原有的ip首部(cip<-->vip)之外,再封裝一個ip首部&(dip<-->rip);
????(1) RIP, DIP, VIP全得是公網地址;
????(2) RS的網關的不能指向DIP;
????(3) 請求報文必須經由director調度,但響應報文必須不能經由director;
????(4) 不支持端口映射;
????(5) RS的OS必須支持隧道功能;
??
??
??VS/DR(Virtual Server via Direct Routing)
??通過直接路由技術構建,調度和管理與之前兩個相同,但是報文的轉發方式不同,DR模型通過修改請求報文的MAC地址,將請求發送到real server上,real server在完成請求後直接將響應回應給用戶,減少了IP隧道的成本,也不必要求必須支持隧道協議;但是要求調度器和real server都有一塊網卡在同一物理網絡中。同樣DR模型也可以極大地 提高集群系統的伸縮性。
??
註意:
??(1) 保證前端路由器將目標IP為VIP的請求報文發送給director;
????解決方案:
????靜態綁定
????arptables
????修改RS主機內核的參數
??(2) RS的RIP可以使用私有地址;但也可以使用公網地址;
??(3) RS跟Director必須在同一物理網絡中 ;
??(4) 請求報文經由Director調度,但響應報文一定不能經由Director;
??(5) 不支持端口映射;
??(6) RS可以大多數OS;
??(7) RS的網關不能指向DIP;
??
四.調度算法
靜態方法:僅根據算法本身進行調度;
??RR:round robin,輪叫
??“輪叫”調度也叫作“1:1”調度,調度器通過“輪叫”調度算法將外部用戶請求順序按照順序1:1的分配到集群中的每個real server上,這種算法平等的對待每一臺real server,不考慮不同機器的性能差異與系統當前的負載情況。
??WRR:weighted rr, 加權輪叫
??加權輪叫算法是根據real server的不同的處理性能來調度訪問請求,可以對每臺real server設置不同的權重值,對於性能好的機器可以設置較高的去權重值,而對於性能較弱的機器,設置較低的權重值,這樣可以保證性能強的機器能夠分配到較多的用戶請求,性能較差的機器分配較少的用戶請求,合理的利用現有的資源,同時,調度器還可以自動查詢real server的負載情況,動態的進行權重來進行合理的分配資源。
??SH: source hash, 實現session保持的機制;將來自於同一個IP的請求始終調度至同一RS;
??“源地址散列“調度算法根據用戶請求的來源地址,作為散列鍵(Hash key)從靜態分配的散列表內找出相對應的服務器,若被找出的服務器是可用且未超載,則調度器將請求發送到這臺服務器否則返回空。
??DH:destination hash, 將對同一個目標的請求始終發往同一個RS;
??“目標地址散列”調度算法,調度器根據請求的目標IP地址,作為散列鍵從靜態分配的散列表中找出對應的服務器,若被找出的服務器是可用且未超載,則將請求發送到這臺服務器。
??
動態方法:根據算法及各RS的當前負載狀態進行調度;
????Overhead=當前負載狀態
??LC:Least Connection 最少連接數
????Overhead=Active256+Inactive
??“最少連接數”調度算法動態的將網絡請求調度到已經建立的連接數最少服務器上,假設集群中的服務器都具有相近的運算性能,那麽使用“最小連接數”調度算法可以很好的去均衡集群的負載。
??WLC: Weighted LC 加權最少連接
????Overhead=(Active256+Inactive)/weight
??“加權最少連接”調度算法是“最少連接”算法的進一步優化,每個處理節點可以設置不同的權重值來表示其不同的處理性能,網絡管理人員可以動態調整這些權值。默認值是1.加權最小連接調度算法在調度時候盡可能的去調度服務節點與權重值成正向比例。
??SED: Shortest Expection Delay 最短期望延遲
????Overhead=(Active+1)*256/weight
??NQ:Never Queue 永不排隊
??“永不排隊”調度算法在負載較低時,會將請求直接分配到空閑的服務器之上,不會進行額外的算法調度,當整個集群負載較高時,則會進行輪叫。
????SED算法的改進;
??LBLC:Locality-Based LC,即為動態的DH算法;
????正向代理情形下的cache server調度;
??“基於局部的最少連接”調度算法,本質上是為了實現基於目標IP地址的負載均衡。這個算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器可用且未超載,那麽進行調度;假如服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用"最少鏈接"的原則選出一個可用的服務 器,將請求發送到該服務器。
??LBLCR:Locality-Based Least-Connection with Replication,帶復制功能的LBLC算法;
??"帶復制的基於局部性最少鏈接"調度算法也是針對目標IP地址的負載均衡,應用與LBLC相同,不同之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小連接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小連接"原則從這個集群中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。
五.LVS適用環境與安裝使用
??
適用環境
??調度器目前支持Linuxhe FreeBSD
??支持的TCP:HTTP,HTTPS,FTP,SMTP,POP3,IMAP4,PROXY,LDAP,SSMTP
??支持的UDP:DNS,NTP,ICP,視頻和音頻流播放協議。
??
??LVS對應real server沒有限制,real server可以運行在所有的支持TCP/IP的操作系統之上。
??
管理軟件ipvsadm與常見配置選項
yum install ipvsadm -y
??管理集群服務
??ipvsadm -A|E -t|u|f service-address [-s scheduler]
??ipvsadm -D -t|u|f service-address
??
??service-address:
????tcp: -t ip:port
????udp: -u ip:port
????fwm: -f mark
??
??-s scheculer:
????默認為wlc
??
??管理集群服務中的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:
??ip[:port]
??
??lvs-type:
??-g: gateway, dr
??-i: ipip, tun
??-m: masquerade, nat
??
??清空和查看:
??ipvsadm -C
??ipvsadm -L|l [options]
????-n: numeric,基於數字格式顯示地址和端口;
????-c: connection,顯示ipvs連接;
????--stats:統計數據
????--rate: 速率
????--exact: 精確值
??
??保存和重載:
??ipvsadm -R
??ipvsadm -S [-n]
??置零計數器:
??ipvsadm -Z [-t|u|f service-address]
??
??註釋:
????-A 添加一個新的集群服務;
????-E 修改一個己有的集群服務;
????-D 刪除指定的集群服務;
????-a 向指定的集群服務中添加RS及屬性;
????-e 修改RS屬性;
????-t 指定為tcp協議;
????-u 指定為udp協議;
????-f 指定防火墻標記碼,通常用於將兩個或以上的服務綁定為一個服務進行處理時使用;
????-s 調度方法,默認為wlc;
????-w 指定權重,默認為1;
????-p timeout persistent connection, 持久連接超時時長;
????-g Gateway, DR模型;
????-i ipip, TUN模型;
????-m masquerade, NAT模型;
????-S 保存ipvsadm設定的規則策略,默認保存在/etc/sysconfig/ipvsadm中;
????-R 載入己保存的規則策略,默認加載/etc/sysconfig/ipvsadm;
????-C 清除所有集群服務;
????-Z 清除所有記數器;
????-L 顯示當前己有集群服務,能通過相應的options查看不同狀態信息;
理解LVS工作原理