天天看點

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拓撲圖中移除。

繼續閱讀