首先我們要瞭解LVS的工作機制:
LVS裡Director本身不響應請求,只是接受轉寄請求到後方,Realservers才是後台真正響應請求。
LVS 工作原理基本類似DNAT,又不完全相像,它是一種四層交換,預設情況下來通過使用者請求的的地址和連接埠,來判斷使用者的請求,從而轉寄到後台真正提供服務的主機,而判斷這種請求的是通過通訊端來實現,所以四層就可以實現。而且這個轉寄的過程對使用者而言是透明的(簡單的講,就是使用者訪問的是DR的IP,而DR轉寄給RSS,而使用者不知道這個過程)
LVS的工作模式
1.DNAT
2.直接路由
3.隧道
提供的優點:
1.高並發
2.高冗餘
3.適用性,擴充伺服器,縮減伺服器,方便伺服器擴充和收縮
LVS 的IP地址類型
1.VIP:虛擬IP地址,並不提供服務,而是將使用者的請求轉寄到後方
2 RIP:真正IP地址,用戶端真正提供服務的IP地址
3.DIP:調度IP地址,通常是和RIP相連的LVS的IP地址
4.CIP:用戶端IP地址,使用者請求時,使用者的IP
流程:如
===============================分 割 線==============================
LVS叢集的類型:
1.LVS-NAT DNAT
2.LVS-DR 直接路由
3.LVS-TUN 隧道
下面我們詳細說明這三種類型:
LVS-NAT模型原理
使用者的請求和響應都需要經過Director
源地址,目標地址都需要經過轉換,而目標地址轉換是透明的
這種架構的擴充有限調度器,Director將處理所有的請求,壓力比較大,擴充到10個結點就不行了
要求:
1.叢集節點必須在同一個物理網路中,同一個子網或者VLAN
2.DIP和RIP只能在同一個網路(子網)中,不能跨越網段
3.RIP地址通常是私人地址
4.所有的RIP,必須以DIP為網關(地址轉換)
5.NAT的地址可以做連接埠轉換(比如80--à8080)
6.任何作業系統都可以做RIP
7.Director有可能成為整個系統的瓶頸
資料轉送:
通過二層(資料連結層)轉寄(ARP)將DR的MAC地址轉換成RIP的MAC地址(不是轉變,而是轉寄),這樣就實現了資料的傳輸,在RSS響應後,再將RSS的MAC地址轉換成RIP的MAC地址。
===============================分 割 線==============================
LVS-DR模型原理
使用者的請求必須經過Director,而realserver在響應的使用直接返回請求(圖有問題,有可能設的網關不同,還存在一台路由器)
需要配置iptables規則,拒絕響應MAC地址轉換,或者通過修改LINUX核心響應
優點:由於它比NAT少了一個地址轉換,響應速度更快
特點
1.必須處於同一個物理網路中(連在同一個交換器上)
2.RIP可以使用公網地址(建議使用)
3.Director只轉寄請求,而realserver直接響應請求而不轉寄
4.叢集節點的網關,不能指向DIP
5.不能做連接埠轉換(不支援)
6.絕大多數的作業系統都可以實現realserver,而realserver需要同一個網卡配置多個Ip地址
7.DR模式的Director比NAT模式能夠帶動更多的節點
資料轉送:
解決資料進入:
為了避免RS直接響應,給伺服器的lo:0設定VIP地址,給本地網卡設定成CIP,這樣RS就不會直接響應了,隱藏了RS
解決資料出去:
而預設情況下,Linux設定資料包從哪塊網卡出去,源地址設為該網卡地址,通過添加一條特殊路由資訊,如果目標地址是lo的VIP地址,那麼出去的時候源地址設定為lo的地址。
路由資訊的原理:
添加一條主機路由,將VIP的地址自己設定成一個網段,既子網路遮罩為255.255.255.255,這樣VIP出去的時候沒有比VIP更優的了,就成為最佳IP
在互連網上效能最佳的就是DR應用,但是有一個缺點,必須要求主機間距離比較近(比如一個機房),如果發生天災人禍,叢集就完了,所以我們為了實現異地分布,要採用隧道比如VPN
===============================分 割 線==============================
LVS-TUN模型原理:
虛擬隧道實現:
1.專線(加密)
2.二層:在MAC之外再加一層MAC
3.三層:源IP目標IP之外再加一層IP
隧道目的: 隱藏意圖,通過轉換來(ip套ip)隱藏目的
特徵:
1.叢集節點和Director不必在同一個網路
2.RIP必須使用公網地址
3.Director只需要處理進來的請求,不需要處理出去的請求
4.響應的請求一定不能經過Direcor.
5.Directory不支援連接埠映射
6.只能使用那些支援IP 隧道協議的作業系統做realserver
優點:LVS-TUN可以實現基於網路的叢集,這樣就脫離了LVS-DR的realserver之間的距離限制。
===============================分 割 線==============================
LVS的負載平衡要依賴演算法(Scheduling methods :調度方法)來實現,根據特點它們分為如下兩類:
1.fiexd scheduling 靜態(固定)
2.dnamic scheduling 動態
FIEXDSCHEDULING靜態演算法
特點:不考慮後端realserver的串連狀態,而動態要考慮後端的連結數為標準
1. Round-robin (RR) 輪詢
既第一次訪問A,第二次訪問B,第三次再訪問A…..迴圈下去
2. Weighted Round-Robin WRR
加強論調:提高後台伺服器的響應能力
根據後方伺服器的響應能力,來定義權重,根據權重來轉寄請求,權重大的優先訪問
3.Destination hashing DH
目的:實現針對目標地址的請求做固定轉寄
將來自同一個使用者的特定請求轉寄到固定的指定的主機(比如提供web服務),以提高緩衝(網頁檔案快取)利用率(命中率)。
4.Souce hashing SH
目的:將來自同一個使用者的地址,始終轉寄到router或者firewall
應用情境:
將使用者的請求按照平均指定到不同的防火牆,實現平均內網負載,通過特定防火牆(網關)出去(上網)
靜態演算法的缺陷:不考慮後台real-server的負載,串連狀態
動態演算法:DynamicScheduling Mehtod
這裡有兩個概念:
活動串連:後台real-server當前處於活動狀態(active)和ESTABLISHEDstate(想關聯)的串連,像ssh,或者telnet會一直處於活動狀態。
非活動串連:非活動的狀態(inactive)或者非FIN的資料包,比如httpd(未開啟keepalive), 而httpd除非啟用keepalive, 發送完成後直接斷開,處於inactive的狀態
相關動態演算法
1. LC least-connection 最少串連
LC同時檢查一台主機上的活動串連數和非活動串連數,串連數最少(活動狀態的串連數少)的將會接受下一個串連請求。
LC同時考察活動串連和非活動串連,它用活動串連*256+非活動串連作為 overhead 通過overhead誰的小,轉寄給誰
但是非活動連結也會影響串連,當活動串連的比數比較大的時候,會影響結果
2.WLC Weighted Least-Connection 加權最少串連數
加權按照機器的效能劃分。Overhead/加權請求要轉寄給小得那個
加權演算法,是叢集應用上的最好的演算法之一,比較公平
2. SED Shortest Expected Delay 最短延遲
在WLC基礎上改進
Overhead = (ACTIVE+1)*256/加權
不再考慮非使用中,把當前處於活動狀態的數目+1來實現,數目最小的,接受下次請求
+1的目的是為了考慮加權的時候,非活動串連過多
缺陷:當許可權過大的時候,會倒置空閑伺服器一直處於無串連狀態
NQ演算法永不排隊
保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑
不考慮非活動串連,才用NQ,SED要考慮活動狀態串連
對於DNS的UDP不需要考慮非活動串連,而httpd的處於保持狀態的服務就需要考慮非活動串連給伺服器的壓力
LBLC 基於本地的最少串連演算法
和DH的區別:考慮背景負載能力和串連情況
支援權重,它在WLC基礎上改進
LBLCR 基於本地的帶複製的最少串連數
是對LBLC的一個改進,能夠在LBLC的基礎上實現負載平衡
判斷後端,到底誰的串連少,當A的串連很多,而B的很空閑,會將A的部分串連分配到B上(打破原有規則,避免大範圍的不公平)