You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无组播环境Orbeon Forms PE(Ehcache)复制配置故障排查

Orbeon Forms PE双节点集群EhCache相关故障排查

问题现状

  • 部署架构:2节点Orbeon Forms PE集群,节点IP分别为172.13.238.241、172.13.238.242,前置HAProxy做负载均衡,因环境限制未使用官方推荐的组播集群方案。
  • 故障现象:单节点关闭后,数分钟内所有浏览器侧请求报错,后续请求恢复后响应速度极慢,初步怀疑故障与EhCache配置相关。
  • 现有节点1配置(节点2仅互换IP、修改uniqueId值):
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
         channelSendOptions="asynchronous"
         channelStartOptions="3">
  <Manager className="org.apache.catalina.ha.session.DeltaManager"
           expireSessionsOnShutdown="false"
           notifyListenersOnReplication="true"/>
    <Channel className="org.apache.catalina.tribes.group.GroupChannel">
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
        <Member className="org.apache.catalina.tribes.membership.StaticMember"
                port="4100"
                host="172.13.238.242"
                uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2}" />
      </Interceptor>
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                address="172.13.238.241"
                port="4100"
                autoBind="0"
                maxThreads="6"
                selectorTimeout="5000" />
      <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.MessageDispatchInterceptor"/>
      <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
    </Channel>
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

核心配置错误说明

  • 缺失EhCache集群同步配置:当前提供的所有配置均为Tomcat容器级会话复制配置,未包含任何EhCache的集群同步规则。Orbeon Forms的表单定义、会话状态缓存依赖EhCache实现,未配置EhCache静态成员发现、缓存失效同步逻辑时,单节点下线后存活节点会持续尝试向已下线节点同步缓存数据,触发长超时阻塞;节点重新上线后缓存全量冷重建,直接导致响应速度极慢。
  • Tomcat Tribes通道拦截器顺序错误:StaticMembershipInterceptor必须放在所有其他通道拦截器的最后,当前配置将其放在拦截器链最前端,会导致TcpFailureDetector故障检测逻辑失效,节点下线后需要等待数分钟TCP默认超时才会标记节点离线,对应故障发生后数分钟内请求持续报错的现象。
  • XML配置语法错误:原配置中ReplicationValve的className属性存在引号不匹配问题,会导致Tomcat集群配置加载异常,会话复制逻辑无法正常初始化。
  • EhCache未配置静态成员发现:默认EhCache集群使用组播发现节点,在禁用组播的环境下必须手动配置静态成员地址、RMI同步端口,否则缓存节点互相不可见,无法完成缓存同步。

修复步骤

  1. 修正Tomcat集群配置
    • 调整拦截器顺序,将StaticMembershipInterceptor移动到拦截器链末尾
    • 修复XML引号语法错误
    • 为静态成员配置明确的本地节点标识,避免成员识别混乱
  2. 配置EhCache静态集群同步
    • 编辑Orbeon配置目录下的ehcache.xml,删除默认的组播PeerProvider配置,新增静态成员配置:节点1配置对端节点2的RMI地址为//172.13.238.242:41002/orbeonCacheManager,节点2配置对端节点1地址为//172.13.238.241:41001/orbeonCacheManager
    • 配置PeerListener端口,节点1绑定41001端口、节点2绑定41002端口,与Tomcat会话复制的4100端口错开避免冲突
    • 为所有业务缓存开启bootstrap启动加载,节点启动时主动从存活对端拉取缓存数据,避免冷启动缓存击穿
  3. 验证配置
    • 重启两个节点后,查看日志确认Tomcat集群成员识别正常、EhCache RMI同步连接建立成功
    • 模拟单节点下线,验证请求无长时间报错、剩余节点响应速度无明显下降

内容的提问来源于stack exchange,提问作者Master Drools

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:51:18