0

在我的设置中,我有两个应用程序实例,它们同时启动并处理请求,使用 Hazelcast 共享状态和锁定。默认设置是所有数据都在两个节点上,其中 50% 是活动的,50% 是另一个节点的备份。

我希望在我的设置中添加蓝/绿部署,这样我就可以部署一个新版本,而不会中断处理请求,也不会错误地丢失任何数据/处理请求。

在部署期间,我会关闭应用程序的一个实例,这意味着剩余的实例现在将拥有 100% 的实时数据和处理请求。如果该实例出现任何问题,我会丢失所有数据(我没有备份设置) - 我很高兴接受这种风险。

一旦我启动了应用程序的新版本实例,Hazelcast 应该开始重新平衡缓存,使其 50% 的实时和 50% 的备份再次在每个实例上。正是在这一点上,我想阻止并等待重新平衡完全完成,然后再将新实例宣传为 live。完成后,新实例有 50% 的实时数据和 50% 的备份。

重新平衡完成后,我可以关闭第二个版本,启动新版本,Hazelcast 将初始化重新平衡,我会阻塞,等待重新平衡完成,然后将第二个实例宣传为活动。

我的蓝/绿部署现在已经完成。

问题:如何阻止新实例直到重新平衡完成(它已收到所有数据)?

4

1 回答 1

0

Hazelcast 在您添加/删除成员时根据需要自动重新平衡并创建备份,您无需进行任何额外的配置。重要的一点是进行正常关闭以避免成员翻转期间的数据丢失。

优雅关闭成员的方法:

  • 您可以通过编程方式调用 HazelcastInstance.shutdown() 方法。
  • 您可以使用 JMX API 的关闭方法。您可以通过实现 JMX 客户端应用程序或使用 JMX 监控工具(如 JConsole)来做到这一点。
  • 您可以将属性 hazelcast.shutdownhook.policy 设置为 GRACEFUL,然后使用 kill -15 关闭。您的成员将正常关闭。
  • 如果您正在使用,您可以使用 Hazelcast 管理中心的会员视图中的“关闭会员”按钮。

OTOH,Hazelcast 明智的是,您不需要在此过程中阻止成员。这是应用程序特定的要求吗?

于 2018-11-30T17:01:31.420 回答