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

Liferay CE服务器会话复制配置失败求助(已完成TCP集群部署)

Liferay CE TCP集群会话复制故障排查与解决方案

基础配置校验

  • 确认两台服务器Tomcat server.xml中的<Cluster>配置:
    • 使用org.apache.catalina.ha.tcp.SimpleTcpCluster实现类
    • 确保clusterName在所有节点完全一致(如clusterName="LiferayCluster")
    • 配置正确的节点通信参数:tcpListenAddress设为服务器实际IP(禁止用127.0.0.1),tcpListenPort不冲突,channelSendOptions="8"(同步发送模式)
    • 若用静态成员配置,添加<Membership>节点指定所有集群节点地址:
      <Membership className="org.apache.catalina.ha.membership.StaticMembershipProvider">
          <Member className="org.apache.catalina.ha.membership.Member"
                  host="server1-ip" port="4000" />
          <Member className="org.apache.catalina.ha.membership.Member"
                  host="server2-ip" port="4000" />
      </Membership>
      
  • 检查所有Web应用(包括Liferay ROOT及自定义Portlet)的WEB-INF/web.xml中是否添加了<distributable/>标签,缺失该标签会导致会话不进入复制流程。

Tomcat会话复制核心配置

  • 修改conf/context.xml,配置分布式会话管理器:
    <Manager className="org.apache.catalina.ha.session.DeltaManager"
             expireSessionsOnShutdown="false"
             notifyListenersOnReplication="true"/>
    
    注意:禁止使用默认的StandardManager,它不支持分布式会话。
  • 若单独配置了cluster.xml,校验Channel组件:确保TcpNioSender、TcpNioReceiver、MembershipInterceptor配置正确,成员发现端口(如默认45564)在所有节点一致。

Liferay专属集群配置

  • 编辑portal-ext.properties,启用并配置集群会话:
    cluster.link.enabled=true
    cluster.link.autodetect.address=服务器广播IP或可互通的IP
    session.replication.enabled=true
    web.server.servlet.session.enable.persistence=true
    web.server.servlet.session.persistence.mode=cluster
    
  • 校验portal-ehcache.xml中的缓存集群配置:
    • 确保RMICacheManagerPeerProviderFactory配置了所有节点的RMI地址:
      <cacheManagerPeerProviderFactory
          class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
          properties="peerDiscovery=manual, rmiUrls=//server1:40001/portalCache|//server2:40001/portalCache"/>
      
    • 检查缓存节点的cacheEventListenerFactory是否启用了复制:
      <cacheEventListenerFactory
          class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
          properties="replicateAsynchronously=false, replicatePuts=true, replicateUpdates=true"/>
      
  • 确认liferay-hibernate.cfg.xml中使用集群兼容的缓存工厂:
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
    

网络与环境校验

  • 测试集群端口连通性:用nc -zv 目标服务器IP 端口验证以下端口(根据实际配置调整):
    • Tomcat集群通信端口(默认4000)
    • Ehcache RMI端口(默认40001)
    • 成员发现端口(默认45564)
  • 同步两台服务器系统时间:时间差超过阈值会导致会话复制失效,可使用ntpdate或chrony服务同步。
  • 关闭防火墙或添加端口放行规则:确保集群节点间的TCP/UDP通信不受阻。

调试与验证

  • 开启Tomcat集群调试日志:在conf/logging.properties添加org.apache.catalina.ha.level=FINE,查看catalina.log中的节点加入、会话复制日志,定位错误(如序列化失败、节点无法发现)。
  • 手动测试会话复制:
    1. 在节点A登录Liferay,记录会话ID
    2. 切换到节点B,访问相同页面,检查是否保持登录状态
    3. 自定义测试:在节点A的会话中存入可序列化对象,在节点B读取该对象验证是否存在
  • 检查会话序列化:查看CATALINA_BASE/work/Catalina/localhost/ROOT目录下的.session文件,若未生成,说明会话未被标记为可复制。

常见问题修复

  • 版本一致性:确保所有节点的Liferay CE版本、Tomcat版本完全相同,版本差异会导致序列化失败。
  • 会话对象序列化:自定义Portlet或主题中存入会话的对象必须实现Serializable接口,否则会中断复制流程。
  • 主机名解析:确保所有节点能通过IP或主机名互相访问,避免DNS解析失败导致节点无法发现。

内容的提问来源于stack exchange,提问作者Akshay Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:02:49