我们有 3 个节点的 Gridgain 服务器,在 GCP Kubernetes 引擎中部署了 3 个客户端节点。集群启用了 native 持久性。还有 <property name="shutdownPolicy" value="GRACEFUL"/>
作为关闭策略。每个缓存都有一个备份。自动集群重启后分区丢失。需要通过执行控制命令来重置这些分区。
您能为此提供适当的解决方案吗?我们有大约 60GB 的持久数据。
最佳答案
<property name="shutdownPolicy" value="GRACEFUL"/>
如果满足某些条件,应该可以防止分区丢失:
缓存必须是
PARTITIONED
与backups > 0
或REPLICATED
.检查你的配置。 Ignite 中的默认缓存配置是PARTITIONED
与backups = 0
(由于历史原因),因此默认值不起作用。基线节点必须不止一个(只有基线节点存储数据!)。这是 doc .
您必须以优雅的方式停止节点。这有点棘手,因为您并不总是能控制它。
- 如果你停止
kill
到这个过程,确保它使用SIGTERM
而不是SIGKILL
因为后者总是立即终止进程 - 如果您停止
Ignite.close()
这应该行得通 - 如果您停止使用 Java
System.exit()
它会工作,但如果你使用System.halt()
- 它不会(因为halt()
不优雅) - 如果您使用 Kubernetes 等协调器,您需要确保它们能够正常停止节点。例如,在 Kubernetes 中,您通常必须设置
terminationGracePeriodSeconds
设置为高值,以便 Kubernetes 等待节点完成正常关闭而不是杀死它们。 - 如果您使用自定义启动脚本,您需要确保它们将信号转发给 Ignite 进程。
- 如果你停止
要对此进行调试,请检查以上几点。我通常会先查看服务器日志(使用 IGNITE_QUIET=false
!)以查看是否存在“Invoking shutdown hook”消息。如果它不存在,那么你的关闭 Hook 没有被调用,问题是 3 中的点之一。否则,应该有其他日志消息解释这种情况。
关于ignite - GridGain Server 分区丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69360787/