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

同一服务器无法运行两个使用本地Infinispan容器的独立实例

解决同一服务器运行多个Infinispan本地缓存容器实例的端口冲突问题

这个问题的核心在于:即使你以为用的是"本地"Infinispan缓存容器,默认配置下它依然会启动JGroups用于节点发现,两个实例会抢占同一个默认JGroups端口,且这个端口没有关联到JBoss的jboss.socket.binding.port-offset配置,最终导致冲突。

下面是几个可行的解决方案,按推荐程度排序:

1. 让Infinispan绑定到JBoss的Socket Binding,继承port-offset

修改你的standalone.xml配置,显式将Infinispan的传输层关联到JBoss的socket binding组,这样端口偏移会自动生效:

<subsystem xmlns="urn:jboss:domain:infinispan:12.0">
  <cache-container name="default" default-cache="local" module="org.wildfly.clustering.web.infinispan">
    <!-- 添加这行,关联到JBoss的jgroups-tcp socket binding -->
    <transport socket-binding="jgroups-tcp" />
    <local-cache name="local">
      <locking isolation="REPEATABLE_READ" />
    </local-cache>
  </cache-container>
</subsystem>

然后确认你的socket binding组里有jgroups-tcp的默认配置:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
  <socket-binding name="jgroups-tcp" port="7600" />
</socket-binding-group>

现在启动第二个实例时加上-Djboss.socket.binding.port-offset=100,它的JGroups端口就会自动变成7700,不会和第一个实例冲突。

2. 完全禁用JGroups,使用纯本地缓存

如果你的场景完全不需要集群功能,可以直接配置Infinispan为纯本地模式,彻底避免JGroups启动:
修改standalone.xml中的Infinispan子系统,移除传输层配置,并确保默认缓存是本地缓存:

<subsystem xmlns="urn:jboss:domain:infinispan:12.0">
  <cache-container name="default" default-cache="local" module="org.wildfly.clustering.web.infinispan">
    <!-- 移除任何<transport>相关配置 -->
    <local-cache name="local">
      <locking isolation="REPEATABLE_READ" />
      <transaction mode="NON_XA" />
    </local-cache>
  </cache-container>
</subsystem>

这样配置后,Infinispan不会启动JGroups进程,自然也不会有端口冲突的问题。

3. 为每个实例指定独立的JGroups配置文件

如果不想修改默认配置,可以在启动实例时指定自定义的JGroups配置文件,每个实例用不同的端口:
比如创建两个JGroups配置文件jgroups-instance1.xml和jgroups-instance2.xml,分别设置不同的TCP端口:

<!-- jgroups-instance1.xml -->
<TCP bind_port="7600" />
<!-- jgroups-instance2.xml -->
<TCP bind_port="7700" />

然后启动实例时分别指定:

# 实例1启动命令
./standalone.sh -Djgroups.config=file:/path/to/jgroups-instance1.xml

# 实例2启动命令
./standalone.sh -Djgroups.config=file:/path/to/jgroups-instance2.xml

为什么默认情况下port-offset不生效?

因为默认的Infinispan配置没有关联到JBoss的socket binding,而是直接使用JGroups的默认硬编码端口,所以jboss.socket.binding.port-offset的偏移规则不会自动应用到JGroups端口上。必须显式关联socket binding,或者手动指定JGroups端口才能解决这个问题。

内容的提问来源于stack exchange,提问作者Jan-Willem Gmelig Meyling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:43:19