ignite - GridGain 服务器分区丢失
问题描述
我们有 3 个节点的 Gridgain 服务器,并且在 GCP Kubernetes 引擎中部署了 3 个客户端节点。集群已启用本机持久性。也<property name="shutdownPolicy" value="GRACEFUL"/>
作为关机策略。每个缓存都有一个备份。自动集群重启后分区丢失。需要通过执行控制命令来重置这些分区。
您能否为此提供适当的解决方案。我们有大约 60GB 的持久数据。
解决方案
<property name="shutdownPolicy" value="GRACEFUL"/>
如果满足某些条件,应该可以防止分区丢失:
缓存必须是
PARTITIONED
withbackups > 0
或REPLICATED
。检查你的配置。Ignite 中的默认缓存配置是PARTITIONED
withbackups = 0
(出于历史原因),因此默认设置不起作用。必须有多个基线节点(只有基线节点存储数据!)。这是文档。
您必须以优雅的方式停止节点。这有点棘手,因为您并不总是控制它。
- 如果您停止
kill
进程,请确保它使用SIGTERM
而不是SIGKILL
因为后者总是立即终止进程 - 如果你停止
Ignite.close()
这个应该只是工作 - 如果你停止使用 Java
System.exit()
,它会起作用,但如果你使用System.halt()
- 它不会(因为halt()
它不优雅) - 如果您使用 Kubernetes 等编排器,则需要确保它们能够优雅地停止节点。例如,在 Kubernetes 中,您通常必须设置
terminationGracePeriodSeconds
为较高的值,以便 Kubernetes 等待节点完成正常关闭而不是杀死它们。 - 如果您使用自定义启动脚本,则需要确保它们将信号转发到 Ignite 进程。
- 如果您停止
要对此进行调试,请检查以上几点。我通常会先查看服务器日志(使用IGNITE_QUIET=false
!),看看是否存在“调用关闭挂钩”消息。如果它不存在,那么您的关闭挂钩不会被调用,问题是第 3 点下的要点之一。否则,应该有其他日志消息解释这种情况。
推荐阅读
- python - 请求缺少具有服务帐户授权的有效 API 密钥
- reverse-engineering - 多态代码如何在 .exe 文件上工作
- google-chrome - 浏览器字体已更改
- javascript - 如何将实时状态更新从 express/flask 后端发送到 vuejs 前端
- excel - 从另一个表更新表列字段
- r - 使用参数作为列名生成数据框并根据参数选择列
- python - Kivy 日期倒计时
- javascript - 为什么 JavaScript 符号引用可以避免冲突?
- git - git 如何标记要删除的提交以生成 PR 分支
- c# - 使用 OpenTK 将统一数组上传到着色器的正确方法是什么?