3zone每个zone中1observer,有一个节点掉电后,数据文件损坏,单observer无法启动

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.4.2-ce,ob-oeprator,k8s部署
【问题描述】环境机房会频繁掉电,ob启动后出现文件损坏
【复现路径】
【附件及日志】

环境是k8s环境使用ob-operator部署的ob集群,三节点集群下对自愈能力要求比较高,想在出现了文件损坏的场景下可以让单节点自愈(3节点集群的单节点损坏)。

想了解一些内容:

  1. 是否有工具或方式可以主动检查数据文件损坏?
  2. 数据文件损坏是否有特定日志,或者特定的退出码,可以用来让外部确认数据文件损坏?
  3. observer文件损坏的修复手段有什么?除了下面这个方式。
    目前有一个恢复操作,有点复杂,delete observer的cr,由operator自动删除对应的observer节点,删除后,obopeartor会自动添加新节点到集群中,过程中需要调整租户配置将异常节点上的unit也移走后,才能删除observer。
4 个赞

马克关注,学习

@论坛小助手

对于您的问题,目前提供的文档片段中已经给出了一部分解决方案和建议。关于文件损坏检查、特定日志或退出码以及文件损坏修复手段,以下是相关文档中的内容汇总:

  1. 是否有工具或方式可以主动检查数据文件损坏?

    • 目前文档中没有提到具体的工具或命令来主动检查数据文件损坏。通常,数据文件损坏会在 OBServer 启动时检测到,并通过日志记录具体的错误信息。
  2. 数据文件损坏是否有特定日志,或者特定的退出码,可以用来让外部确认数据文件损坏?

    • 数据文件损坏通常会导致 OBServer 启动失败,并在日志中记录具体的错误信息。您可以查看 OBServer 的日志文件,通常位于 /home/admin/oceanbase/log 目录下。常见的错误信息包括磁盘挂起(OB_DISK_HUNG)或文件损坏等。
    • 例如,文档片段 doc_id: 29 提到了 -4392 OB_DISK_HUNG 错误,这可能是由于磁盘故障导致的。
  3. observer 文件损坏的修复手段有什么?

    • 方法一:自动恢复
      • 在 OceanBase 4.2.3.0 版本之前,Pod IP 发生变化时 observer 将无法正常启动。您可以采用固定 IP 的方式让 observer 失活后原地重启。文档片段 doc_id: 696 提到了这一点。
    • 方法二:手动删除并重建节点
      • 当数据文件损坏时,可以手动删除并重建节点。具体步骤如下:
        1. 删除 observer 的 CR,由 ob-operator 自动删除对应的 observer 节点。
        2. 调整租户配置,将异常节点上的 unit 移走。
        3. ob-operator 会自动添加新节点到集群中。
        • 文档片段 doc_id: 19852 提供了替换故障节点的详细步骤。
    • 方法三:使用 OCP 替换 OBServer 节点
      • 如果没有替换的服务器,可以考虑调整 server_permanent_offline_time 参数,再停止 observer 进程。文档片段 doc_id: 746 提到了这一点。

综上所述,您可以通过检查 OBServer 的日志文件来确认数据文件是否损坏,并根据具体情况选择合适的修复手段。如果您希望进一步提高自愈能力,可以考虑使用固定 IP 的方式让 observer 失活后原地重启,或者使用 OCP 替换节点的功能。

详情请参考:

  1. 故障恢复
  2. 替换故障节点
  3. 磁盘报错[errcode=-4392] disk is hung
  4. 使用 OCP 进行运维

持续关注一下

关注关注 学习

2 个赞

关注