首页 > 解决方案 > GridGain 服务器分区丢失

问题描述

我们有 3 个节点的 Gridgain 服务器,并且在 GCP Kubernetes 引擎中部署了 3 个客户端节点。集群已启用本机持久性。也<property name="shutdownPolicy" value="GRACEFUL"/>作为关机策略。每个缓存都有一个备份。自动集群重启后分区丢失。需要通过执行控制命令来重置这些分区。

您能否为此提供适当的解决方案。我们有大约 60GB 的持久数据。

标签: ignitegridgain

解决方案


<property name="shutdownPolicy" value="GRACEFUL"/>如果满足某些条件,应该可以防止分区丢失:

  1. 缓存必须是PARTITIONEDwithbackups > 0REPLICATED。检查你的配置。Ignite 中的默认缓存配置是PARTITIONEDwith backups = 0(出于历史原因),因此默认设置不起作用。

  2. 必须有多个基线节点(只有基线节点存储数据!)。这是文档

  3. 您必须以优雅的方式停止节点。这有点棘手,因为您并不总是控制它。

    • 如果您停止kill进程,请确保它使用SIGTERM而不是SIGKILL因为后者总是立即终止进程
    • 如果你停止Ignite.close()这个应该只是工作
    • 如果你停止使用 Java System.exit(),它会起作用,但如果你使用System.halt()- 它不会(因为halt()它不优雅)
    • 如果您使用 Kubernetes 等编排器,则需要确保它们能够优雅地停止节点。例如,在 Kubernetes 中,您通常必须设置terminationGracePeriodSeconds为较高的值,以便 Kubernetes 等待节点完成正常关闭而不是杀死它们。
    • 如果您使用自定义启动脚本,则需要确保它们将信号转发到 Ignite 进程。

要对此进行调试,请检查以上几点。我通常会先查看服务器日志(使用IGNITE_QUIET=false!),看看是否存在“调用关闭挂钩”消息。如果它不存在,那么您的关闭挂钩不会被调用,问题是第 3 点下的要点之一。否则,应该有其他日志消息解释这种情况。


推荐阅读