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中,需解答两个问题:
- 能否删除账本并从零启动Bookie?
- 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
相关产品推荐
相关产品推荐

