天天看點

nginx筆記4-負載均衡帶來的問題以及解決辦法

接着筆記3,将筆記三的改造一下,現在分别啟動兩個Tomcat,在頁面擷取session。如圖所示:

tomcat2的session:

nginx筆記4-負載均衡帶來的問題以及解決辦法

tomcat1的session:

nginx筆記4-負載均衡帶來的問題以及解決辦法

 根據上圖發現,每個tomcat取到的session不一樣。是以nginx負載均衡帶來的問題就是session不一緻,假設使用者登陸後請求分發到Tomcat1,下一次請求到tomcat2的話,

那麼每一次請求都會要求使用者登陸。這必然不行的。

解決session共享問題辦法有:

1.應用伺服器(即Tomcat)之間進行session同步。通過配置tomcat的server.xml檔案中配置相應的端口和位址等等。但是缺點是:應用伺服器本身能力有限,再來個session共享的話,會帶來很大的網絡開銷,

是以這種方式基本不用。

2.通過前面的筆記三的負載均衡算法中的源位址雜湊演算法。通過這個算法,隻要IP不變化,請求永遠定位到同一台應用伺服器。修改nginx.conf檔案,配置負載均衡的算法為源位址哈希,如下圖所示:

nginx筆記4-負載均衡帶來的問題以及解決辦法

 配置好後,我們再重新重新整理浏覽器,看一下,請求分發是否還發生變化,如下圖:

nginx筆記4-負載均衡帶來的問題以及解決辦法

正如上圖所示,無論怎麼重新整理,請求的都是用一個應用伺服器。

這樣做就不存在session問題了。雖然解決的session問題,但是不容災了。因為如果定位到的那台應用伺服器挂了,那麼使用者是無法通路的。

某些中小型的系統可以使用。但是優缺點。

3.通過session外置集中管理。session外置集中管理用的最多的就是NoSQL資料庫redis.舉個例子,比如用使用者賬号和登陸系統的時間搓弄成一個token來模拟session。設定一定的過期時間。每次

請求分發到應用伺服器的時候,從redis從取token校驗即可。這樣就解決的session共享問題。