Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux Tomcat 叢集配置實戰:Apache + Mod_JK 負載均衡與 Session 複製

編輯:Linux 教學

兩台 Linux AS 4 伺服器構建 Tomcat 叢集,Apache 作為前端負載均衡器(Balancer),Mod_JK 轉發請求,Tomcat 節點間透過 DeltaManager 進行 Session 複製。本文記錄完整配置步驟與關鍵坑點。

架構規劃

角色IPPort備註
Managed Server 1 (PC1)10.3.15.859080Tomcat 節點 1
Managed Server 2 (PC2)10.3.15.849080Tomcat 節點 2
Balancer Server (PC1)10.3.15.8580Apache + Mod_JK

軟體版本

  • OS:RedHat Linux AS 4
  • Apache:2.0.54
  • Tomcat:5.5.x(支援 Cluster)
  • JDK:1.5+
  • Mod_JK:1.2.x

關鍵配置檔案

1. Apache httpd.conf 載入 Mod_JK

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkMount /* loadbalancer

2. workers.properties 定義節點與負載均衡


worker.list=loadbalancer,status

worker.tomcat1.port=8009
worker.tomcat1.host=10.3.15.85
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1

worker.tomcat2.port=8009
worker.tomcat2.host=10.3.15.84
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1

worker.status.type=status

3. Tomcat server.xml 叢集配置(兩節點相同)


<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
         managerClassName="org.apache.catalina.cluster.session.DeltaManager"
         expireSessionsOnShutdown="false"
         useDirtyFlag="true"
         notifyListenersOnReplication="true">

  <Membership
    className="org.apache.catalina.cluster.mcast.McastService"
    address="228.0.0.4"
    port="45564"
    frequency="500"
    dropTime="3000"/>

  <Receiver
    className="org.apache.catalina.cluster.tcp.ReplicationListener"
    tcpListenAddress="10.3.15.85"
    tcpListenPort="4001"
    tcpSelectorTimeout="100"
    tcpThreadCount="6"/>

  <Sender
    className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
    replicationMode="pooled"
    ackTimeout="15000"/>

  <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
         filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>

  <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
           tempDir="/tmp/war-temp/"
           deployDir="/tmp/war-deploy/"
           watchDir="/tmp/war-listen/"
           watchEnabled="false"/>
</Cluster>

關鍵點: tcpListenAddress 必須設為真實 IP(非 auto),否則 Session 無法跨節點複製,啟動日誌會出現 skipping state transfer. No members active in cluster group。

啟動與驗證


# 啟動 Apache
/usr/local/apache/bin/apachectl start

# 啟動 Tomcat(兩節點均執行)
/usr/local/tomcat/bin/catalina.sh start

# 加入開機自啟
echo "/usr/local/tomcat/bin/catalina.sh start" >> /etc/rc.d/rc.local
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.d/rc.local

測試 Session 複製

部署測試 Web 應用(含 <distributable/> 的 web.xml、實作 Serializable 的 JavaBean、寫入/讀取 Session 的 JSP)。

  1. 瀏覽器訪問 https://10.3.15.85/,記錄 Session ID 與屬性值。
  2. 關閉 Tomcat 1,刷新頁面,請求應轉發至 Tomcat 2,Session ID 與屬性值保持一致。
  3. 重啟 Tomcat 1,觀察 Session 狀態轉移日誌。

常見問題排查

現象原因解決
Session 不複製tcpListenAddress=auto改為真實 IP
啟動報 No members active多播地址/端口衝突或防火牆阻擋檢查 228.0.0.4:45564 UDP 通訊
Mod_JK 500 錯誤AJP 連接埠未開啟或 workers.properties IP 錯誤確認 Tomcat server.xml <Connector port="8009" protocol="AJP/1.3"/>
Copyright © Windows教程網 All Rights Reserved