You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s部署Milvus 2.2.2集群Bookie故障及数据恢复疑问

问题解答

问题背景

在K8s中部署Milvus 2.2.2集群,因硬件故障导致三台Pulsar Bookie中的两台PV/PVC损坏无法启动。健康的Bookie1存在50个副本不足的账本,执行bookie1# bookie shell recover bookie2(failed)和bookie1# bookie shell recover bookie3(failed)命令时出现错误。数月前已完成数据加载,数据存储在S3/Minio中,需解答两个问题:

  1. 能否删除账本并从零启动Bookie?
  2. Bookie内数据丢失是否会影响数据可用性?

错误信息(中文翻译)

09:43:22.800 [main] ERROR org.apache.bookkeeper.bookie.Bookie - 存在无cookie的目录,且当前既不是新环境,也未启用存储扩容。空目录为 [/pulsar/data/bookkeeper/journal/current]
09:43:22.800 [main] INFO  org.apache.bookkeeper.proto.BookieNettyServer - 正在关闭BookieNettyServer
09:43:22.829 [main] ERROR org.apache.bookkeeper.server.Main - 构建Bookie服务器失败
org.apache.bookkeeper.bookie.BookieException$InvalidCookieException:
    at org.apache.bookkeeper.bookie.Bookie.checkEnvironmentWithStorageExpansion(Bookie.java:494) ~[org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.bookie.Bookie.checkEnvironment(Bookie.java:273) ~[org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.bookie.Bookie.<init>(Bookie.java:731) ~[org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.proto.BookieServer.newBookie(BookieServer.java:152) ~[org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.proto.BookieServer.<init>(BookieServer.java:120) ~[org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.server.service.BookieService.<init>(BookieService.java:52) ~[org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.server.Main.buildBookieServer(Main.java:304) ~[org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.server.Main.doMain(Main.java:226) [org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]
    at org.apache.bookkeeper.server.Main.main(Main.java:208) [org.apache.bookkeeper-bookkeeper-server-4.14.3.jar:4.14.3]

问题解答

1. 能否删除账本并从零启动Bookie?

可以,但需按规范步骤操作:

  • 先标记故障Bookie为Lost:在健康Bookie节点执行bookie shell bookieid --mark-lost <故障Bookie的ID>,让集群识别这两个Bookie已永久下线。
  • 清理故障Bookie残留数据:删除损坏PV/PVC对应的所有目录(若有残留),确保新启动的Bookie使用完全干净的存储。
  • 从零启动新Bookie:在K8s中重新创建故障Bookie的Pod,绑定新的PV/PVC。启动后Bookie会自动加入集群,集群会将副本不足的账本重新复制到新Bookie上,修复副本数量。

注意:直接删除账本而不标记Bookie为Lost会导致集群无法正确触发副本修复流程,必须先执行标记操作。

2. Bookie内数据丢失是否会影响数据可用性?

不会影响已加载到Milvus的数据的可用性。原因如下:

  • Milvus 2.2.2中,数据的最终持久化存储在S3/Minio中,Pulsar Bookie仅用于存储Milvus的日志(如WAL)和元数据。你提到数月前已完成数据加载,说明所有业务数据都已持久化到S3,Bookie数据丢失不会影响这部分数据的访问。
  • 副本不足的账本会导致Pulsar集群暂时无法处理新的写入请求,但修复Bookie后,集群会自动恢复副本数量,恢复正常服务。

错误信息处理建议

报错InvalidCookieException是因为故障Bookie的journal目录为空且无cookie,Bookie启动时会验证环境一致性。解决方法:

  • 确认故障Bookie使用全新PV/PVC后,启动时添加参数-Dbookie.storage.expansion.enabled=true,允许Bookie在空目录下启动(仅第一次启动时使用)。
  • 或者彻底清理故障Bookie的所有残留数据,确保启动时是完全干净的环境,Bookie会自动生成新的cookie。

内容的提问来源于stack exchange,提问作者R2D2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:55:24