LVS是一個開源的軟件,由畢業於國防科技大學的章文嵩博士於1998年5月創立,可以實現LINUX平臺下的簡單負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。它是中國向開源組織貢獻的最優秀的項目之一。
LVS主要工作是在內核中完成的,其工作模式和iptables/netfilter一樣。其核心組件是ipvs,ipvs是工作在內核中的處理框架,它如何工作需要我們自己定義一些集羣規則。而我們又不能和內核直接打交道,所以像iptables一樣,我們也有ipvsadm這樣一個工作於用戶空間的工具,用來與內核中的ipvs交互的。我們可以用ipvsadm來定義一些集羣規則,使ipvs可以正常工作,來提供負載均衡的能力。
簡單來說就是:工作在內核空間中的ipvs通過集羣規則實現負載均衡功能;工作在用戶空間中的ipvsadm用來定義集羣規則。
注:ipvs和netfilter是不可以同時使用的。在linux-2.4.23之前是沒有將LVS代碼直接包含在內核中的。
基於LVS構建的負載均衡集羣的一般模型如下圖所示:
Director:我們稱之爲負載均衡器,調度器。其本質就是安裝了LVS軟件,用來實現負載均衡功能的虛擬服務器。它是一個前端,通過集羣定義,將客戶端的請求按調度方法分發到後方的realserver上。
Realserver:用來提供真正服務的服務器,比如web服務器、MySQL數據庫等等。
另外,我們對於LVS架構的負載均衡集羣的IP地址還有以下定義:
Client:
CIP:客戶端的IP地址;
Director:
VIP:用來提供服務的IP,一般是公網地址;
DIP:用來與Realserver實現通信的IP;
Realserver:
RIP:其實就是realserver上的IP了,沒什麼好解釋的了。
請記住這些對於IP及服務器的定義,以便理解下面內容。
LVS三種不同的類型:
1、Network address translation(LVS-NAT):網絡地址轉換
工作模型:
工作流程:
客戶端向Director上的用來提供服務的IP(VIP)發起服務請求。Director(一般有兩塊網卡)通過調度算法並通過DIP向後方的真正提供服務的集羣節點(Realserver)轉發客戶端請求。Realserver通過RIP接收客戶端請求,處理後,再通過Director的VIP響應給客戶端。
工作屬性:
1、所有的集羣節點(Realserver)都需要和Director在同一個子網絡中;
2、Realserver的網關需要指向DIP;
3、RIP使用的是私有地址,僅用於與各集羣節點和DIP通信;
4、Director同時處理入站和出站請求,即客戶端的請求與服務器的響應數據包都需要經過Director;
5、可以實現服務的端口映射;
6、Realserver可以使用任意的操作系統;
7、Director很容易成爲負載均衡集羣的瓶頸。
2、Direct routing(LVS—DR):直接路由
工作模型:
工作流程:
客戶端向Director發送服務請求,然後Director通過調度算法轉發給後端的Realserver,Realserver處理後直接響應給客戶端,而不必通過Director響應給客戶端。當然這就需要我們在Realserver上同樣配置VIP了。
工作屬性:
1、集羣節點(Realserver)與Director需要在同一個物理網絡中;
2、RIP可以使用公網地址,且Realserver上還需要配置VIP;
3、Director僅處理入站請求;
4、Realserver直接將響應數據包響應給客戶端,並且realserver的網關不能指向Director;
5、不支持端口映射;
6、Realserver可以使用大多數的操作系統;
7、LVS-DR的Director的性能要優於LVS-NAT模型中的Director。
注:Realserver需要有兩塊網卡,一塊配置RIP,一塊配置VIP。因爲是要直接響應給客戶端的嘛。而在一個物理網絡中通信是通過mac進行通信的,而我們的Director與Realserver都配置了VIP,這就需要有一種機制來阻止Realserver響應ARP的廣播請求,只讓Director接收請求。
3、IP tunneling(LVS-TUN):隧道模型
工作模型:
工作流程:
客戶端向Director發起服務請求,Director利用隧道技術將請求通過調度算法轉發給Realserver。Realserver直接將響應請求迴應給客戶端。這裏需要說明的是Director與Realserver可以跨越互聯網的。
工作屬性:
1、集羣節點(realserver)和Director不需要在一個物理網絡中;
2、RIP一定不能使私有IP地址;
3、Director僅處理入站請求;
4、realserver的網關一定不能指向DIP;
5、不支持端口映射;
6、僅有那些支持IP隧道功能的操作系統才能作爲realserver。
LVS Scheduling Methods LVS的調度方法:
靜態調度方法:
1、Round-robin(RR):輪叫
其實就是在Director定義一個realserver的列表,按照列表的順序從上向下挨個分發客戶端請求;
2、Weighted round-robin(WRR):加權輪叫
這裏我們假定realserver的性能各不相同,所以我們肯定想將多一點的請求分配到性能好的服務器上,這個算法就是實現這種功能的,我們可以在定義集羣規則的時候將性能好的服務器的權重定義的大一些,這樣性能好的服務器就可以接收到多一點的請求了。
3、Destination hashing(DH):目標地址hash
4、Source hashing(SH):源地址hash
動態調度方法:
1、Least-connection(LC):最少連接
當一個新的連接請求時,Director會根據服務器的負載情況進行調度,負載情況是根據realserver的overhead的值來看的,overhead的值越小,就會將請求轉發給誰。
Overhead=active*256+inactive :active:活動的連接數;inactive:非活動連接數
2、Weighted Least-Connection(WLC):加權最少連接
與LC相似,不過在定義集羣規則的時候爲realserver定義權重。Overhead的算法也有些不同:Overhead=active*256+inactive /weight。
注:這個是默認的最優調度算法;
3、Shortest Expected Delay(SED):最少期望延遲
4、Never Queue(NQ):永不排隊
5、Locality-Based Least-Connection(LBLC):基於本地的最少連接
6、Locality-Based Least-Connection with Replication Scheduling(LBLCR):帶複製的基於本地的最少連接
還有待修改....