本文演示單機多實例部署,拓撲如下:
關鍵版本約束:必須使用 Tomcat 7,配套 tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar,否則會出現類加載衝突。依賴包下載:百度網盤。
複製兩份 Tomcat,分別命名 tomcat1、tomcat2。修改 tomcat2/conf/server.xml 三處端口:
| 原端口 | 新端口 | 用途 |
|---|---|---|
| 8080 | 9080 | HTTP 連接器 |
| 8005 | 9005 | 關閉端口 |
| 8009 | 9009 | AJP 連接器 |
驗證:分別訪問 https://localhost:8080、https://localhost:9080 見到貓頁面即成功。
# 安裝 PCRE(rewrite 模組依賴) wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz tar -xzf pcre-8.41.tar.gz && cd pcre-8.41 ./configure && make && make install # 配置 Nginx Yum 源 vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=https://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 # 安裝 yum -y install nginx
nginx.confupstream tomcat_cluster {
server localhost:8080 weight=1;
server localhost:9080 weight=1;
}
server {
listen 1210;
location / {
proxy_pass https://tomcat_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
驗證:nginx -t && service nginx restart,訪問 localhost:1210 應輪詢轉發至兩個 Tomcat。
分別修改兩個 Tomcat webapps/ROOT/index.jsp,輸出 session.getId()。瀏覽器刷新 localhost:1210,觀察 Session ID 交替變化,證明輪詢生效。
wget https://download.redis.io/releases/redis-3.0.2.tar.gz tar -xzf redis-3.0.2.tar.gz && cd redis-3.0.2 make && make install ./utils/install_server.sh # 註冊系統服務 # 服務管理 service redis_6379 start|stop|restart
將三個 JAR 放入 每個 Tomcat 的 lib 目錄:
commons-pool-1.3.jarjedis-2.0.0.jartomcat-redis-session-manager-1.2-tomcat-7-java-7.jarcontext.xml<Context>
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />
</Context>
重啟兩個 Tomcat,訪問 localhost:1210,多次刷新觀察:Session ID 保持一致,且兩個 Tomcat 實例均能讀取到相同 Session 數據,證明共享成功。
least_conn 最少連接算法、健康檢查、SSL 終結Serializable,注意版本兼容lib 目錄context.xml 配置、Redis 連通性、防火牆 6379 端口proxy_pass 拼寫錯誤