LVS介紹 LVS LVS體系架構 LVS的基本原理 LVS的四種負載均衡模式 LVS的十種調度演算法 LVS的優缺點 ...
LVS介紹
LVS
LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器, 是一個由章文嵩博士發起的自由軟體項目,它的官方站點是www.linuxvirtualserver.org。
現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。
使用LVS技術要達到的目標是:
通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的伺服器群集,它具有良好可靠性、可擴展性和可操作性,從而以低廉的成本實現最優的服務性能。
以低廉的成本實現最優的服務性能。
LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了,可以利用LVS技術實現高可伸縮的、高可用的網路服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等。
LVS是一套開源組件,用於實現負載均衡,其工作於內核空間,四層轉發或四層路由,即在傳輸層轉發。
由於LVS工作在內核空間,突破了套接字數量限制,所以工作性能極強。
若內核優化得當,經測試最高能併發轉發400w條各種請求。
LVS體系架構
最前端的為負載均衡層(loader balancer)
由一臺或多台負載調度器(director server)組成,LVS模塊就安裝在其上面,主要作用類似一個路由器,將用戶請求分發給server array層的real server。
director server上還安裝著對real server服務的監控模塊ldirectord,來檢測各個real server的健康狀態,在其不可用時在LVS路由表上刪除,在其可用時在LVS路由表上重新加入。
中間的伺服器集群層(server array)
由一組實際運行應用服務的機器組成,real server可以是web伺服器、mail伺服器、ftp伺服器、dns伺服器等中的一個或多個,real server之間通過LAN或分別在各地的WLAN連接。
最底層的數據共用存儲層(shared storage)
由磁碟陣列等存儲設備組成,是為所有的real server提供共用存儲空間和內容一致性的存儲區域。
可採用集群文件系統來共用數據。
總體來看
負載調度器(director server)是整個LVS的核心,支持其的操作系統有Linux和Free BSD。
LVS的基本原理
LVS根據請求報文的目標IP 和目標協議及埠將其調度轉發至某RS,根據調度演算法來挑選RS。
RS間可通過區域網或廣域網連接。
當用戶的請求發送到虛擬伺服器,LB根據設定的包轉發策略和負載均衡調度演算法將用戶請求轉發給RS。
RS再將用戶請求結構返回給用戶。
同請求包一樣,應答包的返回方式也與包轉發策略有關。
LVS的這種結構對用戶來說是透明的,用戶只能看見一臺作為LB的虛擬伺服器(Virtual Server),而看不到提供的服務的RS群。
LVS不需要打開文件,直接在內核轉發,沒有套接字(16位,65535個最大連接)的限制,不用維護套接字文件,不用維護套接字。
LVS的四種負載均衡模式
NAT 模式:網路地址轉換
DR 模式:直接路由
TUN模式:封裝新IP頭實現轉發
FULLNAT模式:修改請求報文的源和目標IP
lvs-nat 與lvs-fullnat :請求和響應報文都經由Director
lvs-nat :RIP 的網關要指向DIP,修改請求報文的目標IP, 多目標IP的DNAT(目標地址轉換)
lvs-fullnat :RIP 和DIP 未必在同一IP 網路,但要能通信,修改請求報文的源和目標IP
lvs-dr 與lvs-tun :請求報文要經由Director,但響應報文由RS直接發往Client
lvs-dr :通過封裝新的MAC 首部實現,通過MAC 網路轉發
lvs-tun :通過在原IP 報文外封裝新IP頭實現轉發,支持遠距離通信
LVS的十種調度演算法
靜態調度
RR(Round Robin):輪詢調度
WRR:weight,加權輪詢(以權重之間的比例實現在各主機之間進行調度)
SH:source hashing,源地址散列。主要實現會話綁定,能夠將此前建立的session信息保留了
DH:Destination hashing:目標地址散列。把同一個IP地址的請求,發送給同一個server。
動態調度
LC(Least-Connection):最少連接
WLC(Weighted Least-Connection Scheduling):加權最少連接。
SED(Shortest Expected Delay):最短期望延遲
NQ(never queue):永不排隊(改進的sed)
LBLC(Locality-Based Least Connection):基於局部性的最少連接
LBLCR(Locality-Based Least Connections withReplication):帶複製的基於局部性最少鏈接
LVS的優缺點
LVS的優點是:
1、抗負載能力強。
是工作在網路4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟體里的性能最強的,對記憶體和cpu資源消耗比較低。
2、配置性比較低。
這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率。
3、工作穩定。
因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived。
4、無流量。
LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的性能不會收到大流量的影響。
5、應用範圍比較廣。
因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、資料庫、線上聊天室等等。
LVS的缺點是:
1、軟體本身不支持正則表達式處理,不能做動靜分離。
而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。
2、如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了,特別後面有Windows Server的機器的話,如果實施及配置還有維護過程就比較複雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。