1. 程式人生 > >(三)配置nginx負載tomcat,redis解決session共享

(三)配置nginx負載tomcat,redis解決session共享

Nginx ("engine x") 是一個高效能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器。Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的。

何為反向代理呢?即以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。

而Nginx主要完成的工作就是反向代理,比如我們向一臺伺服器的80埠傳送了請求,該請求首先由Nginx監聽到,其接受到請求內容後再轉發給其他伺服器,其他伺服器處理完後再將結果傳送給Nginx,最後由Nginx來統一返回給初始請求端。 

使用redis解決tomcat叢集session共享問題,把session儲存在redis中。

配置nginx

進入到nginx配置檔案目錄:/usr/local/nginx/conf

編輯nginx.conf:

儲存後退出,重啟nginx:./nginx -s reload

啟動nginx之後,通過nginx訪問tomcat,nginx會把請求根據一定策略分發到三個tomcat,實現負載均衡:

多重新整理,可以看到出現不同的tomcat

配置redis,session共享

redis是基於記憶體的nosql資料庫,讀寫效率相當高,提供鍵值過期機制,比較適合session機制

使用開源專案tomcat-redis-session-manager來完成配置

上git下載原始碼tomcat-redis-session-manager

使用src下的類來重新構建專案,使用eclipse重新編譯成jar包

在eclipse建立一個maven project專案(simple),

修改pom.xml,新增tomcat、jedis依賴:

 redissessionmanager不支援高版本的tomcat,具體為org.apache.catalina.util.LifecycleSupport類

改為使用8.0.53版本的tomcat

並修改程式碼

把tomcat-redis-session-manager-master中src/main/java下的com包拷貝至專案中:

拷貝完進行打包,runas--maven install

在target下可以看到jar包:

把這個jar分別拷貝帶linux中三臺tomcat的lib目錄下

依賴的的包同樣也需要拷貝:commons-pool2-2.4.2、jedis-2.9.0,如下三個包:

修改三臺tomcat的配置檔案,修改tomcat下conf目錄下context.xml:

配置好redis的相關資訊注意,如果沒設定redis密碼,不需要指定password,預設不需指定

jedis連線不上redis,報錯JedisConnectionException: Could not get a resource from the pool

解決辦法:

修改/etc/redis/6379.conf配置檔案,修改bind節點為0.0.0.0,表示所有節點都可以連線redis,修改peotected-model 為no;

然後再重啟redis

配置完畢,訪問nginx:

 

可以看到三臺tomcat獲取的sessionid是相等的

進入redis,檢視key,檢視剩餘過期時間

tomcat叢集的session共享設定成功