生產環境常用 Apache 作為前端反向代理/負載均衡,後端多 Tomcat 實例提供服務。本文詳細記錄 mod_jk 連接器配置、workers.properties 負載策略、多實例端口隔離、以及 DeltaManager Session 複製配置。
Client → Apache (mod_jk) → Tomcat1 (8081/8009)
↘→ Tomcat2 (8082/8010)
mod_jk (源碼編譯或 yum install mod_jk / apt install libapache2-mod-jk)
# 載入模塊
LoadModule jk_module modules/mod_jk.so
# Jk 配置
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkShmFile logs/jk.shm
# 所有請求轉發給 workers 群組
JkMount /* workers
JkMount /status/ stat # 可選:狀態頁
# Worker 列表
worker.list=workers,tomcat1,tomcat2,stat
# Tomcat1 實例
worker.tomcat1.type=ajp13
worker.tomcat1.host=localhost
worker.tomcat1.port=8009
worker.tomcat1.lbfactor=1 # 負載權重
worker.tomcat1.fail_on_status=500,503,404 # 錯誤碼標記不可用
# Tomcat2 實例
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8010
worker.tomcat2.lbfactor=1
worker.tomcat2.fail_on_status=500,503,404
# 負載均衡控制器
worker.workers.type=lb
worker.workers.balance_workers=tomcat1,tomcat2
worker.workers.sticky_session=true # 會話粘滯
worker.workers.sticky_session_force=false
worker.workers.method=Request # 請求計數算法
# 狀態監控 worker
worker.stat.type=status
← mod_jk 連接端口
← 對應 workers.properties port=8010
關鍵點:jvmRoute 必須與 worker.tomcatX 名稱一致,用於 Session 粘滯路由。
在每個 Tomcat server.xml 的 <Engine> 內添加:
DeltaManager:全量複製 Session 到所有節點,適合中小集群(<8 節點)McastService:組播發現成員,需網絡支持組播(云環境常需改單播 StaticMembershipService)Receiver.port:各實例必須不同(5002, 5003...)ReplicationValve.filter:靜態資源不觸發 Session 複製FarmWarDeployer:熱部署 WAR 到所有節點
放在應用 WEB-INF/web.xml 中,啟用 Session 複製。
https://apache-ip/status/(需配置 JkMount /status stat)/manager/html 查看 Session 數、複製統計mod_jk.log、catalina.out 關鍵字 ReplicationValve、DeltaManagermod_jk + workers.properties + jvmRoute + DeltaManager 構建高可用 Tomcat 集群。核心要點:端口隔離、粘滯會話、組播網絡、靜態資源過濾。大規模集群建議改用 BackupManager 或 Redis 外部 Session 存儲。