Hazelcast:如何确保集群启动完成

Hazelcast: how to ensure cluster startup is finished

我有一个有 3 个节点的集群(在不同的机器上),我有一个 "business logic" 在启动时使用 分布式锁

有时当有更多延迟时 每个 节点 获取 独占 lock with 成功 因为集群还没有 "startup" 所以每个节点还没有看到另一个.

随后节点相互看到并且集群正确配置了 3 个节点。我知道有一个 "MemberShipListener" 来捕获事件 "Member added" 所以我可以再次执行 "business logic",但我想知道是否有一种方法可以确保集群启动何时正确完成为了等待执行 "business logic" 直到集群开启。

我尝试使用 hazelcast.initial.wait.seconds 但配置正确的秒数不是确定性的,我不知道这是否也会延迟成员加入操作。

Afaik,Hazelcast 中没有这样的东西。由于集群是动态的,一个节点可以随时离开,所以集群永远不会"complete"或不

但是你可以:

  1. 像您描述的那样配置初始等待,以帮助解决初始延迟
  2. 使用 hazelcast.initial.min.cluster.size 定义 hazelcast 在开始时等待的最小成员数
  3. 定义最小仲裁数:集群的最小节点数被视为 useable/healthy(参见 cluster quorum
  4. 使用 PartitionService 检查集群是否安全,或者是否有待处理的迁移