首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

CentOS 6.5 單機部署 Tomcat7+Nginx+Redis 實現負載均衡與 Session 共享

     編輯:Java 綜合教學

架構拓撲與版本鎖定

本文演示單機多實例部署,拓撲如下:

  • Tomcat1:localhost:8080
  • Tomcat2:localhost:9080
  • Nginx:localhost:1210(反向代理/負載均衡)
  • Redis:localhost:6379(Session 存儲)

關鍵版本約束:必須使用 Tomcat 7,配套 tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar,否則會出現類加載衝突。依賴包下載:百度網盤。

一、Tomcat 多實例配置

1. 安裝與端口隔離

複製兩份 Tomcat,分別命名 tomcat1、tomcat2。修改 tomcat2/conf/server.xml 三處端口:

原端口新端口用途
80809080HTTP 連接器
80059005關閉端口
80099009AJP 連接器

驗證:分別訪問 https://localhost:8080、https://localhost:9080 見到貓頁面即成功。

二、Nginx 負載均衡配置

1. 依賴安裝

# 安裝 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

2. 核心配置 nginx.conf

upstream 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。

3. 驗證負載均衡

分別修改兩個 Tomcat webapps/ROOT/index.jsp,輸出 session.getId()。瀏覽器刷新 localhost:1210,觀察 Session ID 交替變化,證明輪詢生效。

三、Redis Session 共享配置

1. Redis 3 安裝

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

2. Tomcat 整合 Redis Session Manager

將三個 JAR 放入 每個 Tomcat 的 lib 目錄:

  • commons-pool-1.3.jar
  • jedis-2.0.0.jar
  • tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar

3. 修改 context.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>

4. 驗證 Session 共享

重啟兩個 Tomcat,訪問 localhost:1210,多次刷新觀察:Session ID 保持一致,且兩個 Tomcat 實例均能讀取到相同 Session 數據,證明共享成功。

四、生產環境優化建議

  • Nginx 升級:啟用 least_conn 最少連接算法、健康檢查、SSL 終結
  • Redis 高可用:主從復制 + Sentinel / Cluster 模式
  • Session 序列化:實現 Serializable,注意版本兼容
  • 監控告警:Nginx/Redis/Tomcat 關鍵指標接入 Prometheus+Grafana

五、常見故障排查

  1. ClassNotFoundException:JAR 包版本不匹配或未放入 lib 目錄
  2. Session 不共享:檢查 context.xml 配置、Redis 連通性、防火牆 6379 端口
  3. Nginx 502:Tomcat 未啟動、端口錯誤、proxy_pass 拼寫錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved