青蛙学Linux—高性能负载均衡集群软件LVS
LVS,即Linux Virtual Server的簡寫,是目前非常流行的一款實現負載均衡集群的軟件。該項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。LVS官網http://www.linuxvirtualserver.org/。
1、LVS體系架構
LVS負載均衡集群由三部分組成:最前端的負載均衡層,即Load Balancer;中間的服務器群組層,即Server Array;最后端的數據共享存儲層,即Shared Storage。在用戶看來,所有的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。
- Load Balancer:位于整個集群的最前端,由一臺或多臺負載調度器(Director Server)組成,LVS模塊就安裝在Director Server上,Director Server的作用類似于一個路由器,它含有完成LVS功能所需要的路由表,通過這些路由表把用戶的請求分發給Server Array的應用服務器(Real Server)。同時,在Director Server上還要安裝監控模塊Ldirectord,用于監控后端Real Server的健康狀況,在Real Server不可用時將其從LVS的路由表中剔除,恢復時重新加入;Director Server是整個LVS的核心,操作系統只支持Linux或FreeBSD,Linux從2.6內核起不用重新編譯就可以支持LVS功能
- Server Array:由一組實際運行的應用服務器(Real Server)組成,每個Real Server之間通過高速的LAN或分布在各地的WAN相連,在實際應用中Director Server也可以同時兼任Real Server的角色;對于Real Server,可以是任意平臺的操作系統,如Linux、Windows、AIX等
- Shared Storage:為所有的Real Server提供共享存儲空間和內容一致性的存儲區域。在物理上,一般由磁盤陣列設備組成;為了提供內容的一致性,一般可以通過NFS進行數據共享,但NFS在繁忙的業務系統中性能并不是很好,此時可以采用集群文件系統,如RedHat的GFS、Oracle的OCFS2等
整個架構具體如下圖所示:
2、LVS IP負載均衡機制的實現
負載均衡技術有多種實現方案,如基于DNS域名輪流解析的方法、基于客戶端調度訪問的方法、基于應用層系統負載的調度方法、基于IP地址的調度方法。在這些調度方法中,基于IP地址的方法是執行效率最高的。
LVS的IP負載均衡技術是通過IPVS模塊來實現的,IPVS是LVS的核心模塊。
在LVS中,訪問請求首先經過VIP到達負載均衡調度器,然后由負載均衡調度器從Real Server列表中選取一個Real Server響應用戶的請求。Real Server如何將請求的數據返回給用戶,是IPVS實現的重點,IPVS實現負載均衡的機制有以下幾種:
2.1、DR模式
DR即Virtual Server via Direct Routing,使用直接路由技術實現虛擬服務器。VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶端。這種調度方式的性能是最好的。DR模式架構如下圖所示:
- DR模式是通過在負載均衡調度器LB上修改數據包的目的MAC地址實現轉發。因此數據包來源地址保持不變,目的地址仍然是VIP
- 請求的報文經過LB,而后端RS響應處理后的報文無需經過LB,因此并發訪問量大時效率很高(與NAT模式相比)
- 因為DR模式通過MAC地址改寫機制實現轉發,因此所有RS和LB只能在一個局域網中
- RS上需要綁定VIP地址到lo接口上,并且需要配置ARP抑制
- RS的默認網關不需要配置成LB,而是直接配置為上層路由網關,只要能讓RS直接與客戶端通訊即可
- 由于DR模式的LB僅作MAC地址改寫,所以LB就不能改寫目標端口,那么RS就能使用和VIP相同的端口提供服務
2.2、NAT/FULL NAT模式
NAT,即Virtual Server via Network Address Translation,使用網絡地址翻譯技術實現虛擬服務器。當用戶的請求到達LB時,LB將請求報文的目的地址改成選定的RS地址,同時將報文的目標端口也改成選定的RS的相應端口;RS將返回的數據提交給LB,LB再將報文源地址和源端口修改成VIP和相應的端口后將數據返回給用戶,完成整個負載調度過程。NAT/FULL NAT模式架構如下圖所示:
- NAT模式不需要LB和RS在同一個網段
- NAT模式將請求的報文和響應的報文都經過LB進行轉發和地址改寫,因此訪問量大時,LB有較大的瓶頸,一般一臺LB最多只能帶10-20臺RS
- 只需要在LB上配置一個公網IP即可
- 每臺RS的網關地址必須是LB的IP
- 支持IP地址和端口的轉換,即前端LB和后端RS提供服務的端口可以不一致
- LB節點上必須開啟數據轉發功能,否則返回的數據無法到達客戶端。在Linux下使用以下方法打開數據轉發功能 # 在/etc/sysctl.conf中添加以下內容 net.ipv4.ip_forward = 1 # 值為0表示不開啟轉發功能,1表示開啟轉發功能 # 修改完成后執行以下命令使配置生效 sysctl -p
FULL NAT與NAT的區別
FULL NAT與NAT的區別主要在對報文的處理方面:
- FULL NAT在客戶端請求VIP時,不僅替換了報文中的目的IP,還替換了源IP;VIP返回給客戶端時也替換了源IP
- FULL NAT因為要替換源IP所以性能比NAT下降10%
2.3、TUN模式
TUN,即Virtual Server via IP Tunneling,通過IP隧道技術實現虛擬服務器。LB采用IP隧道技術將用戶的請求轉發到某個RS,RS直接將數據返回給用戶,不需要再經過LB。在TUN模式中,LB與RS不需要在同一個網段;同時LB只處理用戶請求報文,使得集群吞吐量大大提高。TUN模式架構如下圖所示:
- TUN模式中LB和RS之間的傳輸不需要修改報文,而是通過單獨建立的IP隧道傳輸
- TUN模式必須在所有的RS上綁定VIP
- TUN模式使用IP隧道,在增加了運維方面的難度
3、LVS的負載調度算法
LVS的負載調度算法可以分為靜態和動態兩種。靜態算法是僅根據算法進行調度,而不考慮后端RS的實際連接和負載情況;動態算法可以根據后端RS的實際連接和負載來進行請求調度。
靜態算法有四種,分別是RR、WRR、DH和SH。
- RR輪詢算法:LB將請求按照順序輪流分配到后端RS,它均等對待后端每一臺RS,適用于后端RS節點處理性能差不多的場景
- WRR加權輪詢算法:LB根據RS的權重分配任務
- DH目的地址哈希調度算法:以目的IP地址為關鍵字查找一個靜態哈希表來獲取需要的RS
- SH源地址哈希調度算法:以源IP地址為關鍵字查找一個靜態哈希表來獲取需要的RS
動態算法有六種,分別是LC、WLC、SED、NQ、LBLC和LBLCR
- LC最少連接算法:LB將請求動態的調度到已建立連接最少的后端RS上。在后端RS性能相近的情況下適用該算法可以較好的平衡負載
- WLC加權最少連接算法:在LC的基礎上根據權重來將請求動態的調度到后端的RS上,用于在后端RS性能相差較大的環境中
- SED最短延遲調度算法:基于WLC算法。如果ABC三臺RS的權重分別為1、2、3,則使用SED時會進行以下計算,A - (1+1)/1;B - (2+1)/2;C - (3+1)/3,LB會將請求交給運算結果最小的RS
- NQ永不排隊/最少隊列算法:無需排隊,如果有RS的連接數為0則直接將請求調度給該RS而不進行SED計算
- LBLC基于地址的最小連接數調度算法:將來自同一個目的IP地址的請求分配給同一臺RS,如果該RS的負載已滿,則將請求分配給連接數最小的RS,并將該RS做為下一次分配的首選RS
- LBLCR帶復制的基于地址的最小連接數調度算法:與LBLC不同的是,該算法維護的是從同一個目的IP地址到一組RS的映射,請求的RS會從該組RS中選擇得出
| 常用服務 | 調度算法 |
| Web、mali、MySQL | RR、WLC、WRR |
| web cache、DB cache | LBLC、LBLCR |
| 防火墻集群 | SH、DH |
轉載于:https://www.cnblogs.com/yu2006070-01/p/10391475.html
總結
以上是生活随笔為你收集整理的青蛙学Linux—高性能负载均衡集群软件LVS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL--常见ALTER TABLE
- 下一篇: linux在执行时提示无此文件的一个处理