【问题标题】:Rolling updates with HazelcastHazelcast 滚动更新
【发布时间】:2023-03-27 07:20:01
【问题描述】:

我有一个小型 Hazelcast 集群,在 Openshift 4(kubernetes) 中运行在多个 pod 中。我的问题是,当我推出新版本时,有时我需要更改新版本中 hazelcast 实例的配置。然后问题出现了,因为 pod 和旧集群仍在运行,因为新的 pod 还没有正确启动。新升级的成员将失败,因为它们的配置与正在运行的集群(旧 pod)不兼容。我们正在使用此处描述的无头服务发现类型。 https://github.com/hazelcast/hazelcast-kubernetes。 hazelcast 集群中的数据可以在部署之间删除,我们不需要在启动新集群时保留旧集群中的任何内容。

我想要一种方法来告诉新成员和旧成员要么忽略它们的差异,将它们作为两个找不到彼此的独立集群启动,或者根本不在新成员和新成员之间复制.

我研究了便携式序列化功能https://docs.hazelcast.com/imdg/4.1.2/serialization/implementing-portable-serialization,但它让我觉得有点矫枉过正,因为我们不需要集群数据在部署之间生存。我也不确定当我们更改 hazelcast 实例的配置中的某些内容时是否会有所帮助,这将使集群不兼容。

最后,我考虑改变 kubernetes 的部署策略,以便在新的 pod 启动之前杀死旧的 pod,但这会导致我们部署时应用程序停机,这不是很好。

【问题讨论】:

    标签: java kubernetes openshift hazelcast


    【解决方案1】:

    Hazelcast 配置的某些部分无法在运行时配置,这意味着您将无法进行滚动升级。换句话说,您将无法拥有一个集群,其中的成员同时以不同的配置运行。

    如果数据对你来说不重要,那么你总是可以使用蓝/绿部署,这意味着你首先启动整个新集群(使用新配置),切换到新集群,然后停止旧集群.

    【讨论】:

    • 感谢您的回复。 hazelcast-kubernetes 中的无头服务发现方法有没有好的方法?为部署创建的任何服务似乎都解析到相同的 DNS,至少在我们的环境中,这导致集群成员找到彼此,无论我将 hazelcast 集群指向哪个服务。
    • 不,我认为您需要自己“编排”它。意思是,使用两个不同的服务名称,然后将您的应用程序从一个切换到另一个。
    • 您是否会偶然知道我在哪里可以找到关于配置的哪些部分可能不兼容的确切描述?我在 joiners 和 serializers 部分看到了不兼容的警告,但我似乎无法在手册中找到列出配置的哪些部分必须相同的页面。
    • 当然,您可以添加新的数据结构。检查此链接:docs.hazelcast.com/imdg/4.1.2/configuration/…
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 2017-08-03
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2011-07-30
    相关资源
    最近更新 更多