首先我們要了解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應用,但是有一個缺點,必須要求主機間距離比較近(比如一個機房),如果發生天災人禍,集羣就完了,所以我們爲了實現異地分佈,要採用隧道比如***
===============================分 割 線==============================
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 動態
FIEXD SCHEDULING靜態算法
特點:不考慮後端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的負載,連接狀態
動態算法:Dynamic Scheduling Mehtod
這裏有兩個概念:
活動連接:後臺real-server當前處於活動狀態(active)和ESTABLISHED state(想關聯)的連接,像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的目的是爲了考慮加權的時候,非活動連接過多
缺陷:當權限過大的時候,會倒置空閒服務器一直處於無連接狀態
3.NQ算法永不排隊
保證不會有一個主機很空間。在SED基礎上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閒
不考慮非活動連接,才用NQ,SED要考慮活動狀態連接
對於DNS的UDP不需要考慮非活動連接,而httpd的處於保持狀態的服務就需要考慮非活動連接給服務器的壓力
4.LBLC 基於本地的最少連接算法
和DH的區別:考慮後臺的負載能力和連接情況
支持權重,它在WLC基礎上改進
5.LBLCR 基於本地的帶複製的最少連接數
是對LBLC的一個改進,能夠在LBLC的基礎上實現負載均衡
判斷後端,到底誰的連接少,當A的連接很多,而B的很空閒,會將A的部分連接分配到B上(打破原有規則,避免大範圍的不公平)