如何停止和关闭Hazelcast集群?从我的测试观察来看,每当通过HazelcastInstance#shutdown()停止一个节点时,集群都会尝试重新平衡或备份数据。我该如何先“停止”集群,然后再关闭它?(或者我的观察是错误的?)
您可以按照以下示例使用isClusterSafe:
public class ShutdownCluster {
public static void main(String[] args) throws Exception {
HazelcastInstance member1 = Hazelcast.newHazelcastInstance();
HazelcastInstance member2 = Hazelcast.newHazelcastInstance();
HazelcastInstance member3 = Hazelcast.newHazelcastInstance();
if(member1.getPartitionService().isClusterSafe()) {
IExecutorService executorService = member1.getExecutorService(ShutdownCluster.class.getName());
executorService.executeOnAllMembers(new ShutdownMember());
}
}
private static class ShutdownMember implements Runnable, HazelcastInstanceAware, Serializable {
private HazelcastInstance node;
@Override
public void run() {
node.getLifecycleService().shutdown();
}
@Override
public void setHazelcastInstance(HazelcastInstance node) {
this.node = node;
}
}
}
永远不晚得到答案 :)
如果你希望在关闭期间不触发迁移事件,可以将集群状态更改为PASSIVE:
hazelcastInstance.getCluster().changeClusterState(PASSIVE);
我建议将此操作放在if语句内部:
if (partitionService.isClusterSafe()) {
hazelcastInstance.getCluster().changeClusterState(PASSIVE);
hazelcastInstance.getCluster().shutdown();
// or send exit command to each node, as in mrck answer - remember that then action must be an AllowedDuringPassiveState
}
试试这个。
HazelcastInstance.getLifecycleService().shutdown();
在测试时,我经常使用Hazelcast.shutdownAll()。
这将关闭所有实例。