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


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

什么是負載均衡

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

 

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

 

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

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

 

 

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

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

 

 

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

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

 

 

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

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

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

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

 

 

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

 

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

 

 

 

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

 

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

 

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

 

 

 5 session 不同步問題

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

 

然后再訪問

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

然后查了一些資料后發現可以配redis使用,解決這個問題,

redis就是一個大大的Map,在內存中維護的。

 

 5 用redis共享session

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

tomcat-redis-session-manager-VERSION.jar 
jedis-2.5.2.jar 
commons-pool2-2.2.jar

備注:jar已上傳到博客園中,有需要的點擊下載

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

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
       host="localhost"
       port="6379"
       database="0"
       maxInactiveInterval="60" />

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

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

 

最后重啟tomcat 訪問驗證

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

 

至此完成了Nginx+tomcat+redis實現反向代理 、負載均衡及session同步,此文記錄下我的實踐過程,如有錯誤不足之處歡迎大神指點,不喜勿噴。

 


免責聲明!

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



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