Tomcat 集群基於 SimpleTcpCluster,通過 Tribes 通訊框架實現節點發現、數據傳輸與 Session 複製。核心配置位於 server.xml 的 <Cluster> 元素。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="6">
channelSendOptions:消息發送模式標誌位組合
SYNCHRONIZED_ACK (4) + USE_ACK (2) = 6:同步確認 + 應答,可靠性最高;ASYNCHRONOUS (8) + USE_ACK (2) = 10:異步發送 + 應答,性能較好;<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
expireSessionsOnShutdown:應用停止時是否銷毀所有節點 Session;notifyListenersOnReplication:Session 屬性變更時通知監聽器。Tribes 框架核心,管理 Membership、Receiver、Sender、Interceptor 堆棧。
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4" port="45564"
frequency="500" dropTime="3000"/>
frequency:心跳間隔(ms);dropTime:判定失效時間(ms)。<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" port="5000"
selectorTimeout="100" maxThreads="6"/>
address="auto" 自動綁定本機 IP;maxThreads:接收線程池大小。<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
TcpFailureDetector:TCP 層面故障檢測;MessageDispatch15Interceptor:異步分發消息;ThroughputInterceptor:吞吐量統計。<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
filter:靜態資源路徑正則,匹配則跳過複製(提升性能)。<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
watchDir 自動向集群所有節點部署;watchEnabled,改用 CI/CD 管道部署。<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
channelSendOptions="6" 保證強一致性;高併發可嘗試 10 權衡性能;sessionReplicationTime、clusterSize 等指標。