如何在失效模式下升级到新的infinispan版本

问题描述 投票:0回答:1

我们有一个由 15 台服务器组成的集群,运行 Spring Boot、Hibernate 和处于失效模式的 infinispan 缓存。

当我们升级 Infinispan(通过更新 Spring Boot)时,由于 infinispan 或 jgroups 版本不兼容,我们的集群无法正常启动。

我们正在运行 Spring Boot 版本 3.2.3 并尝试升级到 3.2.4。

使用 spring-boot:3.2.3 我们有 (docs, pom.xml)

  • infinispan:14.0.24.Final 和
  • jgroups:5.2.21.决赛

使用 spring-boot:3.2.4 我们有 (docs, pom.xml)

  • infinispan:14.0.27.Final 和
  • jgroups 5.2.23.决赛

假设我们有服务器 A 和 B。我们建议负载均衡器将所有流量发送到仍然运行 Spring Boot 3.2.3 的服务器 B。

不,我们可以将带有 Spring Boot 3.2.4 的新版本部署到服务器 A。但是服务器 A 没有启动。尝试检测集群时失败:

2024-04-08T10:11:29.584+02:00 错误 org.infinispan.CLUSTER:ISPN000475:处理来自 kt139-51832 的请求 2 的响应时出错

java.io.IOException: Unknown type: 28
        at org.infinispan.marshall.core.GlobalMarshaller.readNonNullableObject(GlobalMarshaller.java:720)
        at org.infinispan.marshall.core.GlobalMarshaller.readNullableObject(GlobalMarshaller.java:357)
        at org.infinispan.marshall.core.BytesObjectInput.readObject(BytesObjectInput.java:32)
        at org.infinispan.topology.CacheTopology$Externalizer.doReadObject(CacheTopology.java:269)
        at org.infinispan.topology.CacheTopology$Externalizer.doReadObject(CacheTopology.java:250)
        at org.infinispan.commons.marshall.InstanceReusingAdvancedExternalizer.readObject(InstanceReusingAdvancedExternalizer.java:102)
        at org.infinispan.marshall.core.GlobalMarshaller.readWithExternalizer(GlobalMarshaller.java:727)
        at org.infinispan.marshall.core.GlobalMarshaller.readNonNullableObject(GlobalMarshaller.java:708)
        at org.infinispan.marshall.core.GlobalMarshaller.readNullableObject(GlobalMarshaller.java:357)
        at org.infinispan.marshall.core.BytesObjectInput.readObject(BytesObjectInput.java:32)
        at org.infinispan.topology.CacheStatusResponse$Externalizer.readObject(CacheStatusResponse.java:98)
        at org.infinispan.topology.CacheStatusResponse$Externalizer.readObject(CacheStatusResponse.java:85)
        at org.infinispan.marshall.core.GlobalMarshaller.readWithExternalizer(GlobalMarshaller.java:727)
        at org.infinispan.marshall.core.GlobalMarshaller.readNonNullableObject(GlobalMarshaller.java:708)
        at org.infinispan.marshall.core.GlobalMarshaller.readNullableObject(GlobalMarshaller.java:357)
        at org.infinispan.marshall.core.BytesObjectInput.readObject(BytesObjectInput.java:32)
        at org.infinispan.remoting.responses.SuccessfulResponse$Externalizer.readObject(SuccessfulResponse.java:71)
        at org.infinispan.remoting.responses.SuccessfulResponse$Externalizer.readObject(SuccessfulResponse.java:63)
        at org.infinispan.marshall.core.GlobalMarshaller.readWithExternalizer(GlobalMarshaller.java:727)
        at org.infinispan.marshall.core.GlobalMarshaller.readNonNullableObject(GlobalMarshaller.java:708)
        at org.infinispan.marshall.core.GlobalMarshaller.readNullableObject(GlobalMarshaller.java:357)
        at org.infinispan.marshall.core.GlobalMarshaller.objectFromObjectInput(GlobalMarshaller.java:191)
        at org.infinispan.marshall.core.GlobalMarshaller.objectFromByteBuffer(GlobalMarshaller.java:220)
        at org.infinispan.remoting.transport.jgroups.JGroupsTransport.processResponse(JGroupsTransport.java:1562)
        at org.infinispan.remoting.transport.jgroups.JGroupsTransport.processMessage(JGroupsTransport.java:1471)
        at org.infinispan.remoting.transport.jgroups.JGroupsTransport$ChannelCallbacks.up(JGroupsTransport.java:1663)
        at org.jgroups.JChannel.up(JChannel.java:734)
        at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:936)
        at org.jgroups.protocols.FRAG3.up(FRAG3.java:134)
        at org.jgroups.protocols.pbcast.GMS.up(GMS.java:846)
        at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:226)
        at org.jgroups.protocols.UNICAST3.deliverMessage(UNICAST3.java:1086)
        at org.jgroups.protocols.UNICAST3.addMessage(UNICAST3.java:825)
        at org.jgroups.protocols.UNICAST3.handleDataReceived(UNICAST3.java:807)
        at org.jgroups.protocols.UNICAST3.up(UNICAST3.java:456)
        at org.jgroups.protocols.pbcast.NAKACK2.up(NAKACK2.java:680)
        at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:132)
        at org.jgroups.protocols.FailureDetection.up(FailureDetection.java:180)
        at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:294)
        at org.jgroups.protocols.MERGE3.up(MERGE3.java:274)
        at org.jgroups.protocols.Discovery.up(Discovery.java:294)
        at org.jgroups.protocols.TP.passMessageUp(TP.java:1184)
        at org.jgroups.util.SubmitToThreadPool$SingleMessageHandler.run(SubmitToThreadPool.java:107)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)

整个启动过程被阻塞。三分钟后,当第二台服务器以新版本重新启动时,它就会赶上。然后该服务器获得一个新的集群视图。同时,用户无法访问该网站,因为第一台服务器处于错误状态,正在等待新的集群视图,而第二台服务器刚刚启动。

仅进行小版本更新,这非常烦人。对我来说唯一可能的解决方案似乎是在每次更新时更改 jgroups TCP 端口并为新部署构建一个新集群。

spring-boot infinispan jgroups
1个回答
0
投票

不幸的是,Infinispan 不提供之间的兼容性 不同版本。

在这种特殊情况下,一个新的布尔字段被添加到拓扑中 命令,它破坏了线路格式。

© www.soinside.com 2019 - 2024. All rights reserved.