如何停止和关闭整个Hazelcast集群?

5
如何停止和关闭Hazelcast集群?从我的测试观察来看,每当通过HazelcastInstance#shutdown()停止一个节点时,集群都会尝试重新平衡或备份数据。我该如何先“停止”集群,然后再关闭它?(或者我的观察是错误的?)

有任何消息吗?有任何答案吗? - lolo
4个回答

4

您可以按照以下示例使用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;
    }
}
}

1

永远不晚得到答案 :)

如果你希望在关闭期间不触发迁移事件,可以将集群状态更改为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
}

在被动和冻结状态下,Hazelcast 不会进行迁移,因此在关闭集群时不会出现错误。如果块有帮助,可以确保更改状态和关闭是安全的,以防止数据丢失。

0

试试这个。

HazelcastInstance.getLifecycleService().shutdown();

0

在测试时,我经常使用Hazelcast.shutdownAll()。

这将关闭所有实例。


1
从javadoc中: "关闭此JVM上所有正在运行的Hazelcast实例。它不会关闭集群中的所有成员,而只是在此JVM上运行的成员。" 因此,它明确不做我需要的事情。 - Jan
啊,好的,所以你有不同的JVM。我以为所有成员都是属于同一个JVM的。你可以做的一件事是提交一个可运行对象到一个分布式执行器,并在所有成员上执行它。这个可运行对象可以执行System.exit。这是纯粹为测试目的吗?还是你想在生产环境中终止成员? - pveentjer
(非常抱歉回复晚了)我想在生产环境中优雅地关闭整个集群。 - Jan
我尝试了相同的操作,但无法完成。同时我正在使用3.5版本,而日志显示为INFO: [192.168.1.3]:5702 [dev] [3.9.2] 正在尝试加入已发现的节点。 - spandey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接