CnosDB 2.4容器部署失败:数据节点Panic,缺失is_root_admin字段
问题
将CnosDB 2.4版本更新至community-2024-02-19版本后,容器环境部署失败,数据节点出现Panic,多次重试问题仍存在。相关报错日志如下:
---------- The application panicked (crashed). Message: called `Result::unwrap()` on an `Err` value: SerdeMsgInvalid { err: "missing field `is_root_admin` at line 1 column 183" } Location: /home/runner/work/cnosdb/cnosdb/meta/src/model/meta_admin.rs:118 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ⋮ 9 frames hidden ⋮ 10: cnosdb::server::ServiceBuilder::create_meta::{{closure}}::h959a03ef5d5d6791 at <unknown source file>:<unknown line> 11: cnosdb::server::ServiceBuilder::build_query_storage::{{closure}}::hae8e8f3256a5972f at <unknown source file>:<unknown line> 12: cnosdb::main::{{closure}}::h9f00d4c5371edbb3 at <unknown source file>:<unknown line> 13: cnosdb::main::hdf20e29e118ea588 at <unknown source file>:<unknown line> 14: std::sys_common::backtrace::__rust_begin_short_backtrace::h02fb8bd2c97b6475 at <unknown source file>:<unknown line> 15: std::rt::lang_start::{{closure}}::hd5e344bd86a80ffe at <unknown source file>:<unknown line> 16: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h8a913d44840f99aa at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/core/src/ops/function.rs:284 17: std::panicking::try::do_call::h8ba215257741aa20 at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/panicking.rs:552 18: std::panicking::try::h85acc06cd9305921 at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/panicking.rs:516 19: std::panic::catch_unwind::he62c5d6e03102a53 at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/panic.rs:142 20: std::rt::lang_start_internal::{{closure}}::h2667b7e63fdb172f at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/rt.rs:148 21: std::panicking::try::do_call::h9f7a182bfec92592 at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/panicking.rs:552 22: std::panicking::try::hbde58a5acc6a1792 at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/panicking.rs:516 23: std::panic::catch_unwind::ha7d493354abff086 at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/panic.rs:142 24: std::rt::lang_start_internal::h0a3ad413bf08e687 at /rustc/b6a8c762eed0ae0383658c38d65cb91bbd9800a1/library/std/src/rt.rs:148 25: main<unknown> at <unknown source file>:<unknown line> 26: __libc_start_main<unknown> at <unknown source file>:<unknown line> 27: _start<unknown> at /opt/zig-linux-x86_64-0.11.0/lib/libc/glibc/sysdeps/x86_64/start-2.33.S:120 Run with COLORBT_SHOW_HIDDEN=1 environment variable to disable frame filtering. Run with RUST_BACKTRACE=full to include source snippets
在配置文件中搜索is_root_admin未找到相关配置项,请问该问题的原因是什么?
分析与解决
原因
is_root_admin不是配置文件中的参数,而是CnosDB元数据(meta)模块里Admin模型新增的字段。本次更新的community-2024-02-19版本对元数据结构做了不兼容变更,但未处理旧版本元数据的兼容逻辑:
- 升级场景:旧版本集群的元数据(存储在etcd或本地元数据文件中)没有这个新增字段,新版本启动时反序列化元数据失败,触发Panic。
- 全新部署但残留旧数据:容器挂载的卷或元数据存储目录中存在之前旧版本的残留元数据,同样导致反序列化失败。
解决建议
- 全新部署场景:彻底清理容器挂载的所有卷目录、元数据存储目录(比如etcd的数据目录),再重新部署新版本。
- 升级场景:
- 先导出旧集群中的所有数据;
- 清理旧元数据存储,部署新版本集群;
- 将导出的数据导入新版本集群;
- 或者暂时回退到之前能正常运行的版本,等待官方发布兼容补丁后再尝试升级。
内容的提问来源于stack exchange,提问作者Baker X
相关产品推荐
相关产品推荐

