当前位置: 首页 > ai >正文

机房断电后 etcd 启动失败的排查与快速恢复实录

目录

机房断电后 etcd 启动失败的排查与快速恢复实录

背景与问题起因

报错分析

解决方案:删除 member 数据重新初始化

步骤 1:停止 etcd 容器或服务

步骤 2:删除 member 目录

步骤 3:重启 etcd 服务

附加提醒

总结与后续建议


机房断电后 etcd 启动失败的排查与快速恢复实录

背景与问题起因

在一次突发的 机房断电事件 后,我们所在的 Kubernetes 集群节点在重启过程中,发现 Milvus 无法正常启动。进一步排查发现,根因来自底层的 etcd 服务启动失败。etcd 是 Milvus 中关键的元数据协调组件,若其无法启动,会直接导致整个 Milvus 服务不可用。

启动 etcd 时出现如下典型日志输出:

starting an etcd server
etcd-version: 3.5.18
...
panic: freepages: failed to get all reachable pages (page 15493: multiple references (stack: [10971 15493]))

这类错误通常意味着 etcd 数据库文件损坏,可能是由于非正常关机导致写入中断、页索引混乱等原因。

报错分析

etcd 报错的关键信息:

panic: freepages: failed to get all reachable pages ...

这是一个由底层 BoltDB(etcd 存储引擎)在启动时进行页表校验时报出的 数据页引用错误,即同一页被多个地方引用,属于数据结构严重损坏的一种表现,无法通过常规手段自动修复。

解决方案:删除 member 数据重新初始化

经过快速评估和容灾权衡,我们采取了 “删除损坏 member 数据并重新初始化” 的方式进行恢复。操作步骤如下:

步骤 1:停止 etcd 容器或服务

docker stop etcd
# 或者 systemctl stop etcd

步骤 2:删除 member 目录

rm -rf /etcd/member

该目录下是 etcd 的成员节点数据(包含 WAL 日志和 snapshot 快照),此操作将等同于清空当前节点的全部 etcd 元数据。

⚠️ 风险提示: 本方法适用于非集群 / 单节点开发测试环境,或有其他节点或外部备份可用的情况下。生产环境建议先尝试 etcdctl snapshot restore 等官方推荐方式。

步骤 3:重启 etcd 服务

docker start etcd
# 或者 systemctl start etcd

观察日志,可以发现 etcd 成功初始化并以 initial-cluster-state=new 模式重新创建了一个新的集群。

附加提醒

日志中另有一条 check file permission 警告:

directory "/etcd" exist, but the permission is "drwxr-xr-x". The recommended permission is "-rwx------"

虽然这不会直接导致启动失败,但为确保 etcd 数据目录的安全性,建议将其权限调整为:

chmod 700 /etcd

总结与后续建议

  • 问题根因: 非正常断电导致 etcd 数据库损坏;

  • 恢复方式: 删除 /etcd/member 目录,强制重新初始化;

  • 风险控制: 未尝试恢复数据,适用于开发或非核心环境;

  • 建议: 生产环境应启用 etcd snapshot 定期备份机制,避免数据丢失风险。

http://www.xdnf.cn/news/13245.html

相关文章:

  • YOLOv11 | 注意力机制篇 | EMAttention与C2PSA机制的协同优化
  • 从0到1:HBase安装与操作指南
  • 3.vue3核心语法
  • 中马泰语言电商系统:打开东南亚电商市场的多语言钥匙
  • 【第二十三章 IAP】
  • Vim 替换命令完整学习笔记
  • 一次消谐器:高效抑制铁磁谐振
  • 对DOM操作 与 jQuery的简单理解(通俗
  • DeepSeek生成流程图
  • 6.10 Mysql 事务 锁 面试题
  • 【Dv3Admin】系统视图角色管理API文件解析
  • 2025蓝奏云软件库合集分享链接汇总:极刻云搜 - 一站式获取海量资源
  • Linux下V2Ray安装配置指南
  • axios访问后台时,返回404
  • chrome插件中如何使用midscene.js
  • Leetcode 3577. Count the Number of Computer Unlocking Permutations
  • LeetCode 240 搜索二维矩阵 II
  • MySQL中的隐式主键和隐藏列
  • Go 语言接口详解
  • 架空线路图像视频监测装置
  • SkyWalking 10.2.0 SWCK 配置过程
  • 『uniapp』url拦截屏蔽 避免webview中打开淘宝店铺自动跳转淘宝
  • 腾讯开源 AniPortrait:音频驱动的逼真肖像动画生成革命
  • 【Java】Arrays.sort:DualPivotQuicksort
  • Spring AI MCP
  • AISHELL-5 全球首套智能驾舱中文语音交互数据集开源
  • 探秘鸿蒙 HarmonyOS NEXT:鸿蒙定时器,简单倒计时的场景应用
  • HAProxy 高可用部署方案详解
  • Blogx项目配置文件读取流程详解
  • echarts开发 | 数据可视化 -- 第一篇 echart配置项学习