通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

一直對於負載均衡比較陌生,今天嘗試著去了解了一下,並做了一個小的實驗,對於這個概念有一些認識,在此做一個簡單的總結。

什麼是負載均衡

負載均衡,英文 名稱為Load Balance,指由多臺服務器以對稱的方式組成一個服務器集合,每臺服務器都具有等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。通過某種 負載分擔技術,將外部發送來的請求均勻分配到對稱結構中的某一臺服務器上,而接收到請求的服務器獨立地回應客戶的請求。負載均衡能夠平均分配客戶請求到服 務器陣列,藉此提供快速獲取重要數據,解決大量併發訪問服務問題,這種集群技術可以用最少的投資獲得接近於大型主機的性能。

1.在本機準備2個tomcat 並修改端口號,避免啟動出現衝突

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

2.新建一個簡單的web項目,放到tomcat的webapps下

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

分別啟動兩個tomcats 可以訪問到對應得Web服務,頁面內容有所區別 為了區分不同的服務器,

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

3.下載一個nginx服務器 http://www.pcre.org/

直接解壓後 不需要安裝。接下去我們打開cmd,進入nginx的目錄下,輸入start nginx。

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

我們可以看到一個窗口一閃而過,這樣nginx就已經被開啟了,我們在任務管理器中可以找到它的進程。

現在我們在瀏覽器中輸入localhost。可以看到出現一個頁面。

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

4.之前我們是直接訪問tomcat服務器,現在我想通過nginx訪問tomcat,這個需要去修改nginx的核心配置文件,在其目錄下的conf文件夾下的nginx.conf文件

我們就知道我們需要修改的文件中的server部分,這是它原有的代碼,我刪除了它註釋部分。現在我們就能明白為什麼輸入localhost,

它訪問的是它歡迎頁面即index.html。

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

下面我們對這段代碼進行一些小小修改。就是將請求轉向我們定義的服務器。

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

隨後在cmd中輸入命令nginx -s reload即可重啟nginx。

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

現在我們實現了nginx的反向代理!!!

接下了我嘗試著通過nginx實現負載均衡

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

重啟一下nginx 輸入對應的地址

反覆刷會出現兩個tomcat來回切,切換的頻率由weigth來決定。

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

session 不同步問題

做一個簡單的測試,在我們寫好的web工程頁面做如下修改:

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

然後再訪問

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

發現session不一樣,session 丟失了,這他媽好扯淡,這樣的負載均衡有bug啊。

然後查了一些資料後發現可以配Redis使用,解決這個問題,redis就是一個大大的Map,在內存中維護的。

用redis共享session

將如下幾個jar拷貝到${TOMCAT_HOME}/lib下

tomcat-redis-session-manager-VERSION.jar

jedis-2.5.2.jar

commons-pool2-2.2.jar

備註:jar已上傳到CU論壇,有需要的點擊下載

http://bbs.chinaunix.net/thread-4262624-1-1.html

配置tomcat

編輯${TOMCAT_HOME}/conf/context.xml,在context中加入

host="localhost"

port="6379"

database="0"

maxInactiveInterval="60" />

其中host和port為redis的ip和端口。

至此配置完成,tomcat會使用redis來託管session。

最後重啟tomcat 訪問驗證

通過Nginx+tomcat+redis實現反向代理 、負載均衡及session同步

session 不同步的問題解決了!!!


分享到:


相關文章: