(三)配置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共享設定成功