【发布时间】:2021-02-09 08:37:09
【问题描述】:
我有一个嵌入式 Hazelcast 实例,我将其配置为使用 k8s API(服务发现),并使用路由策略来拥有一个主动/被动集群 FTP 阅读器。
集群中至少有 3 个实例。我的滚动更新是先添加一个新实例,然后再替换旧实例。
我在滚动更新时收到此错误。
[com.hazelcast.core.HazelcastInstanceNotActiveException - Hazelcast instance is not active!]com.hazelcast.core.HazelcastInstanceNotActiveException: Hazelcast instance is not active!
at com.hazelcast.spi.impl.AbstractDistributedObject.throwNotActiveException(AbstractDistributedObject.java:115)
at com.hazelcast.spi.impl.AbstractDistributedObject.lifecycleCheck(AbstractDistributedObject.java:110)
at com.hazelcast.spi.impl.AbstractDistributedObject.getNodeEngine(AbstractDistributedObject.java:104)
at com.hazelcast.map.impl.proxy.MapProxyImpl.tryLock(MapProxyImpl.java:500)
at org.apache.camel.component.hazelcast.policy.HazelcastRoutePolicy.acquireLeadership(HazelcastRoutePolicy.java:296)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
看起来 Hazelcast 实例在骆驼有机会为该集群选举新领导之前停止。
问题:
- 在代码中创建 Hazelcast 实例时,是否需要将实例添加到骆驼组件中?
- 如何控制关闭顺序以确保将锁迁移到其他节点?
- 有任何代码示例说明应该如何做到这一点?
我正在使用 Hazelcast kubernetes 插件
Config config = new Config();
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
config
.getNetworkConfig()
.getJoin()
.getKubernetesConfig()
.setEnabled(true)
.setProperty("namespace", "aaaa")
.setProperty("service-name", "bbbb");
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(config);
然后我创建一个路由策略
HazelcastRoutePolicy routePolicy = new HazelcastRoutePolicy(hz);
routePolicy.setLockMapName("etl");
routePolicy.setLockKey("etl-key");
routePolicy.setLockValue("etl-value");
routePolicy.setTryLockTimeout(5, TimeUnit.SECONDS);
context.getRegistry().bind("cluster", routePolicy);
并在我的路线中使用此政策:
.routePolicyRef("cluster")
提前致谢:)
编辑
我认为这是相关的,我总是将 Hazelcast 节点的数量增加一倍作为 Pod。 我启动了一个 3 个容器集群并在日志中看到 6 个。
Members {size:6, ver:6} [
Member [172.30.0.3]:5701 - ae3861bb-3f77-427e-ada1-5b669c89776f
Member [172.30.0.4]:5701 - cd7741f0-a3b1-4883-a8bb-c3fecaad6b14 this
Member [172.30.0.2]:5701 - 3403bbee-8141-4572-bbd2-4379bf452e79
Member [172.30.0.3]:5702 - 0d48a691-b166-4d29-9b34-77b93be4370b
Member [172.30.0.4]:5702 - d36f0342-730e-40e6-a18e-cf72d9d4b574
Member [172.30.0.2]:5702 - f3644c6c-afe7-4f48-9832-b604830b6955
【问题讨论】:
标签: kubernetes apache-camel hazelcast