91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

負載均衡集群中的session解決方案是怎么樣的

發布時間:2020-04-17 16:41:49 來源:億速云 閱讀:318 作者:三月 欄目:web開發

下文給大家帶來負載均衡集群中的session解決方案是怎么樣的,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網上有很多書籍,今天我們就用億速云在行業內累計的經驗來做一個解答。

在我們給Web站點使用負載均衡之后,必須面臨的一個重要問題就是Session的處理辦法,無論是PHPPythonRuby還是Java,只要使用云服務器保存Session,在做負載均衡時都需要考慮Session的問題。

負載均衡集群中的session解決方案是怎么樣的

分享目錄:

  1. 問題在哪里?如何處理?

  2. 會話保持(案例:Nginx、Haproxy)

  3. 會話復制(案例:Tomcat)

  4. 會話共享(案例:Memcached、Redis



問題在哪里?

從用戶端來解釋,就是當一個用戶第一次訪問被負載均衡代理到后端服務器A并登錄后,服務器A上保留了用戶的登錄信息;當用戶再次發送請求時,根據負載均衡策略可能被代理到后端不同的服務器,例如服務器B,由于這臺服務器B沒有用戶的登錄信息,所以導致用戶需要重新登錄。這對用戶來說是不可忍受的。所以,在實施負載均衡的時候,我們必須考慮Session的問題。

在負載均衡中,針對Session的處理,我們一般有以下幾種方法:

    • Session 保持

    • Session 復制

    • Session 共享


會話保持

Session保持(會話保持)是我們見到最多的名詞之一,通過會話保持,負載均衡進行請求分發的時候保證每個客戶端固定的訪問到后端的同一臺應用服務器。會話保持方案在所有的負載均衡都有對應的實現。而且這是在負載均衡這一層就可以解決Session問題。

Nginx 做負載均衡Session保持

對于Nginx可以選用Session保持的方法實行負載均衡,nginxupstream目前支持5種方式的分配方式,其中有兩種比較通用的Session解決方法,ip_hashurl_hash。注意:后者不是官方模塊,需要額外安裝。

ip_hash

每個請求按訪問iphash結果分配,這樣每個訪客固定訪問一個后端服務器,達到了Session保持的方法。

例:

upstream bakend {
   ip_hash;
   server192.168.0.11:80;
   server192.168.0.12:80;
 }

Haproxy做負載均衡的Session保持

    Haproxy作為一個優秀的反向代理和負載均衡軟件,也提供了多種Session保持的方法,下面列舉了兩種最常用的:

源地址 Hash

haroxy 將用戶IP經過hash計算后指定到固定的真實服務器上(類似于nginx ip hash 指令)

配置指令:balancesource

使用cookie 進行識別 

也就是Haproxy在用戶第一次訪問的后在用戶瀏覽器插入了一個Cookie,用戶下一次訪問的時候瀏覽器就會帶上這個CookieHaproxyHaproxy進行識別。

配置指令:cookie  SESSION_COOKIE  insert indirect nocache

配置例子如下:

cookie SERVERID insert indirect nocache
server web01 192.168.56.11:8080 check cookie web01
server web02 192.168.56.12:8080 check cookie web02

會話保持的缺點:

會話保持看似解決了Session同步的問題,但是卻帶來的一些其它方面的問題:

  • 負載不均衡了:由于使用了Session保持,很顯然就無法保證負載絕對的均衡。

  • 沒有徹底解決問題:如果后端有服務器宕機,那么這臺服務器的Session丟失,被分配到這臺服務請求的用戶還是需要重新登錄。



負載均衡集群中的session解決方案是怎么樣的
會話復制

既然,我們的目標是所有服務器上都要保持用戶的Session,那么將每個應用服務器中的Session信息復制到其它服務器節點上是不是就可以呢?這就是Session的第二中處理辦法:會話復制。

 會話復制在Tomcat上得到了支持,它是基于IP組播(multicast)來完成Session的復制,Tomcat的會話復制分為兩種:

  • 全局會話復制:利用Delta Manager復制會話中的變更信息到集群中的所有其他節點。

  • 非全局復制:使用Backup Manager進行復制,它會把Session復制給一個指定的備份節點。

    不過,這里我不準備來解釋會話復制的Tomcat配置,如果有需求可以參考Tomcat官方文檔,主要是因為會話復制不適合大的集群。根據筆者在生產的實踐案例,當時是在集群超過6個節點之后就會出現各種問題,不推薦生產使用。


會話共享

既然會話保持和會話復制都不完美,那么我們為什么不把Session放在一個統一的地方呢,這樣集群中的所有節點都在一個地方進行Session的存取就可以解決問題。

    Session存放到哪里?

對于Session來說,肯定是頻繁使用的,雖然你可以把它存放在數據庫中,但是真正生產環境中我更推薦存放在性能更快的分布式KV數據中,例如:MemcachedRedis

 

PHP設置Session共享

如果你使用的是PHP那么恭喜你,配置非常的簡單。PHP通過兩行配置就可以把Session存放在Memcached或者Redis中,當然你要提前配置好他們。修改php.ini

session.save_handler = memcache
session.save_path = "tcp://192.168.56.11:11211"

使用Redis存儲Session

session.save_handler = redis
session.save_path ="tcp://localhost:6379"

提醒:別忘了給PHP安裝memcache或者redis插件。

Tomcat設置Session共享

我們可以使用MSMMemcached Session Manager)來實現同樣把Session存放到Memcache中,GIthub地址如下:https://github.com/magro/memcached-session-manager目前支持Tomcat 6.x7.x8.x的版本。

如果你想使用Redis,剛好也有開源的可以用,但是遺憾的是暫時不支持Tomcat 8.x的版本:https://github.com/jcoleman/tomcat-redis-session-manager

 

Django設置Session共享

DjangoSession是通過一個中間件管理的。如果要在應用程序中使用Session,需要在settings.py中的MIDDLEWARE_CLASSES變量中加入’django.contrib.sessions.middleware.SessionMiddleware DjangoSession引擎可以將Session存放在三個地方,分別是:數據庫、緩存、文件。

使用數據庫保存Session

如果你想使用數據庫支持的會話,你需要添加'django.contrib.sessions'到你的INSTALLED_APPS設置中。在配置完成之后,請運行manage.py migrate來安裝保存會話數據的一張數據庫表。

使用緩存保持Session

對于簡單的緩存會話:

可以設置SESSION_ENGINE "django.contrib.sessions.backends.cache"。此時會話數據將直接存儲在你的緩存中。然而,緩存數據將可能不會持久:如果緩存填滿或者緩存服務器重啟,緩存數據可能會被清理掉。

  若要持久的緩存數據:

可以設置SESSION_ENGINE"django.contrib.sessions.backends.cached_db"。它的寫操作使用緩存,對緩存的每次寫入都將再寫入到數據庫。對于讀取的會話,如果數據不在緩存中,則從數據庫讀取。兩種會話的存儲都非常快,但是簡單的緩存更快,因為它放棄了持久性。大部分情況下,cached_db后端已經足夠快,但是如果你需要榨干最后一點的性能,并且接受會話數據丟失的風險,那么你可使用cache而不是cached_db

使用文件保存Session

使用文件保存Session不再我們的討論之類,因為很難進行共享,PHP默認也是將Session存放在/tmp目錄下。

看了以上關于負載均衡集群中的session解決方案是怎么樣的,如果大家還有什么地方需要了解的可以在億速云行業資訊里查找自己感興趣的或者找我們的專業技術工程師解答的,億速云技術工程師在行業內擁有十幾年的經驗了。

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

体育| 容城县| 普陀区| 陈巴尔虎旗| 昌乐县| 双峰县| 瑞安市| 湾仔区| 中牟县| 新巴尔虎右旗| 盘山县| 荣成市| 航空| 商都县| 临沧市| 安徽省| 台山市| 石棉县| 囊谦县| 玉环县| 无棣县| 越西县| 和田市| 丰原市| 吐鲁番市| 康乐县| 城固县| 黎平县| 驻马店市| 南城县| 九台市| 清水县| 漯河市| 灵丘县| 东兴市| 阳曲县| 三亚市| 灵石县| 巴南区| 城固县| 两当县|