【问题标题】:How to update ECS-service forming a Hazelcast cluster group gracefully?如何优雅地更新 ECS-service 形成 Hazelcast 集群组?
【发布时间】:2020-05-14 12:53:05
【问题描述】:

我们有一个 ECS 服务(EC2 ECS),其中有多个任务组成了一个 Hazelcast 集群组(hazelcast:3.10.6,hazelcast-aws:2.2,我们使用 Hazelcast 存储一些共享数据和分布式对象中的锁)。它使用滚动服务更新,最小健康百分比设置为 100,最大值设置为 200。

使用新的任务定义更新此服务不是很可靠 - 由于 ECS 服务更新过程的性质,Hazelcast 通常无法保留现有集群。它有时会非常快速地删除具有旧任务定义的任务,通常一次删除几个,从而破坏 Hazelcast 集群组。

是的,我们可以重构服务以使用客户端-服务器模型将内存网格存储在单独的服务中,或者使用替代方案,例如在 Redis 中存储锁,但是听听已经遇到类似困难并发现的人会很有趣一种在 ECS 中优雅地更新支持 Hazelcast 的服务的方法。

【问题讨论】:

    标签: hazelcast amazon-ecs


    【解决方案1】:

    为了使 Hazelcast 在基本上任何容器化环境中都可靠,您需要定义优雅关闭。这将防止任何数据丢失或同时杀死多个 Hazelcast 实例。

    为了做到这一点,你可以检查ECS doc about StopTaskHazelcast documentation on Graceful Shutdown。简而言之,您需要:

    • hazelcast.shutdownhook.policy=GRACEFUL 添加到JAVA_OPTS
    • hazelcast.graceful.shutdown.max.wait=<max-waiting-time-for-data-migration> 添加到JAVA_OPTS
    • ECS_CONTAINER_STOP_TIMEOUT 环境变量更改为 <max-waiting-time-for-data-migration>

    如果您在 Hazelcast 集群中存储大量数据,您可以将值 max-waiting-time-for-data-migration 设置为一个较大的数字,比如几个小时。

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 2017-10-01
      • 1970-01-01
      • 2018-09-08
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多