请考虑以下情况。
有2个Hazelcast节点。一个是停止的,另一个是在相当沉重的负载下运行。
现在,第二个节点出现了。应用程序启动,其Hazelcast实例连接到第一个。 Hazelcast开始数据重新分区。对于2个节点,它实质上意味着 将IMap中的每个条目复制到新节点,并将两个节点任意分配为主/备份。
问题: 如果在此过程中关闭了第一个节点,并且未完全复制,则部分IMap内容和ITopic订阅可能会丢失。
问题: 如何确保重新分区过程已完成,并且可以安全地关闭第一个节点?
(整个设置是为了在不停机的情况下启用软件更新,同时保留当前的应用程序状态。)
我尝试使用 getPartitionService()。addMigrationListener(...)但是侦听器似乎并没有连接到完整的迁移过程。相反,我为每个复制块获得了数十到数百次调用 migrationStarted()/ migrationCompleted()。
答案 0 :(得分:3)
1-当您正常关闭第一个节点时,关闭进程应该等待(阻止),直到数据安全备份。
hazelcastInstance.getLifecycleService().shutdown();
2-如果您使用Hazelcast Management Center,则会在主屏幕中显示正在进行的迁移/重新分区操作计数。