Lvs+keepalived+nginx+php的session 保持的算法




●什么是會話保持,有什么作用

會話保持是指在負載均衡器上有一種機制,在作負載均衡的同時,還保證同一用戶相關連的訪問請求會被分配到同一台服務器上。

會話保持有什么作用呢,舉例說明一下

如果有一個用戶訪問請求被分配到服務器A,並且在服務器A登錄了,並且在很短的時間,這個用戶又發出了一個請求,如果沒有會話保持功能的話,這個用戶的請求很有可能會被分配到服務器B去,這個時候在服務器B上是沒有登錄的,所以你要重新登錄,但是用戶並不知道自己的請求被分配到了哪里,用戶的感覺就是登錄了,怎么又要登錄,用戶體驗很不好。

 

●nginx 的 upstream目前支持 4 種方式的分配
1)、輪詢(默認)
      每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
2)、weight
      指定輪詢幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。
2)、ip_hash
      每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。  
3)、fair(第三方)

      按后端服務器的響應時間來分配請求,響應時間短的優先分配。

4)、url_hash(第三方)

 

● 服務器負載均衡算法有很多,包括輪循算法、最少連接算法、響應時間算法、散列算法、最少連接失誤算法,鏈路帶寬算法等等。

非持續性算法:

     一個客戶端的不同的請求可能被分配到一個實際服務組中的不同的實服務器上進行處理。主要有輪循算法、最少連接算法、響應速度算法等。

1>輪循算法(Round Robin):

說明:每一次來自網絡的請求輪流分配給內部中的每台服務器,從1至N然后重新開始。

舉例:此種均衡算法適合於服務器組中的所有服務器都有相同的軟硬件配置並且平均服務請求相對均衡的情況;

 

2>最少連接算法(Least Connection):

說明: 客戶端的每一次請求服務在服務器停留的時間都可能會有較大的差異,隨着工作時間的加長,如果采用簡單的輪循或隨機均衡算法,每一台服務器上的連接進程可能會產生極大的不同,這樣的結果並不會達到真正的負載均衡。最少連接數均衡算法對內部中有負載的每一台服務器都有一個數據記錄,記錄的內容是當前該服務器正在處理的連接數量,當有新的服務連接請求時,將把當前請求分配給連接數最少的服務器,使均衡更加符合實際情況,負載更加均衡。

舉例:此種均衡算法適合長時間處理的請求服務。

 

3>響應速度算法(Response Time):

說明: 負載均衡設備對內部各服務器發出一個探測請求(例如Ping),然后根據內部中各服務器對探測請求的最快響應時間來決定哪一台服務器來響應客戶端的服務請求。

舉例:   

此種均衡算法能較好地反映服務器的當前運行狀態,但最快響應時間僅僅指的是負載均衡設備與服務器間的最快響應時間,而不是客戶端與服務器間的最快響應時間。

 

持續性算法:

     從一個特定的客戶端發出的請求都被分配到一個實服務組中的同一個實服務器上進行處理。主要包括:

A.基於IP的算法

-Persistent IP (pi):基於用戶IP地址來選擇服務器。

-Hash IP (hi) :基於用戶IP地址的HASH值,來選擇服務器

-Consistent Hash IP (chi):

B.基於報頭/請求的算法

-Hash Header (hh):基於用戶請求報中HTTP報頭來選擇服務器;

-Persistent Hostname (ph) :基於用戶請求報中HTTP報頭的Hostname的HASH值,來選擇服務器;

-Persistent URL (pu):基於對URI Tag 和值的靜態對應關系來選擇服務器。

-SSL Session ID (sslsid):基於SSL會話ID來選擇服務器。

C.基於Cookie的算法

-Persistent Cookie (pc) : 選擇服務器基於用戶請求包用Cookie Name / Value 的靜態對應關系;

-Hash Cookie (hc) :選擇服務器基於用戶請求包用Cookie Name / Value 的Hash 值對應關系;

-Insert Cookie (ic) :選擇服務器基於負載均衡器 向服務器響應包中插入Cookie;

-Re-write Cookie (rc):選擇服務器基於負載均衡器向服務器響應包中重寫Cookie值。(必須為重寫指定Cookie值的偏移量)

● 通過KeepAlived 來實現Nginx 負載均衡的雙機熱備。正常情況下,兩台Nginx 負載均衡服務器全部處於活動狀態,對外提供服務。通過兩台服務器之間的互相檢測機制,當主服務器上的檢測程序發現自身的Nginx 無法訪問時,停止綁定虛擬IP,改由備用服務器綁定虛擬IP,同時由主服務器給網關發送Arping 包,保證了網關上IP、MAC 地址對應關系能夠馬上更改,能夠做到強行接管虛擬IP。

 

●LVS[F5]負載均衡的八種調度算法

負載均衡算法1.輪叫調度(Round Robin)

調度器通過“輪叫"調度算法將外部請求按順序輪流分配到集群中的真實服務器上,它均等地對待每一台服務器,而不管服務器上實際的連接數和系統負載。

負載均衡算法2.加權輪叫(Weighted Round Robin)

調度器通過“加權輪叫"調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器能處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

負載均衡算法3.最少鏈接(Least Connections)

調度器通過“最少連接"調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用“最小連接"調度算法可以較好地均衡負載。

負載均衡算法4.加權最少鏈接(Weighted Least Connections)

在集群系統中的服務器性能差異較大的情況下,調度器采用“加權最少鏈接"調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

負載均衡算法5.基於局部性的最少鏈接(Locality-Based Least Connections)

“基於局部性的最少鏈接"調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用“最少鏈接"的原則選出一個可用的服務器,將請求發送到該服務器。

負載均衡算法6.帶復制的基於局部性最少鏈接(Locality-Based Least Connections with Replication)

“帶復制的基於局部性最少鏈接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一台服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接"原則從服務器組中選出一台服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接"原則從這個集群中選出一台服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。

負載均衡算法7.目標地址散列(Destination Hashing)

“目標地址散列"調度算法根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

負載均衡算法8.源地址散列(Source Hashing)

“源地址散列"調度算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

了解這些算法原理能夠在特定的應用場合選擇最適合的調度算法,從而盡可能地保持Real Server的最佳利用性。當然也可以自行開發算法,不過這已超出本文范圍,請參考有關算法原理的資料。

 

● keepalived是LVS集群節點健康檢測的一個用戶空間守護進程,也是LVS的引導故障轉移模塊(director failover)。Keepalived守護進程可以檢查LVS池的狀態。如果LVS服務器池當中的某一個服務器宕機了。keepalived會通過一個setsockopt呼叫通知內核將這個節點從LVS拓撲圖中移除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM