跳到主要内容

备份和恢复 Databend Meta Service 集群

本指南将介绍如何备份和恢复 meta service 集群数据。

从 databend-meta 导出数据

支持从 databend-meta 数据目录或正在运行的 databend-meta 服务器导出。 由于 Raft 将数据复制到所有节点,因此从任何一个节点导出就足够了。

从正在运行的 databend-meta 导出

与从数据目录导出类似,但使用服务终结点参数 --grpc-api-address <ip:port> 代替 --raft-dir, 其中 <ip:port>databend-meta.toml 中的 grpc_api_address,例如:

databend-metactl export --grpc-api-address "127.0.0.1:9191" --db <output_fn>

# tail "<output_fn>"
# ["state_machine/0",{"Nodes":{"key":2,"value":{"name":"","endpoint":{"addr":"localhost","port":28203}}}}]
# ...

从数据目录导出

关闭 databend-meta 服务。

然后从 databend-meta 存储 meta 的目录(<your_meta_dir>) 中将数据导出到本地文件 output_fn,采用多行 JSON 格式。 例如,输出文件中的每一行都是一个导出的键值记录的 JSON。


databend-metactl export --raft-dir "<your_meta_dir>" --db <output_fn>

# tail "<output_fn>"
# ["state_machine/0",{"Nodes":{"key":2,"value":{"name":"","endpoint":{"addr":"localhost","port":28203}}}}]
# ["state_machine/0",{"Nodes":{"key":3,"value":{"name":"","endpoint":{"addr":"localhost","port":28303}}}}]
# ["state_machine/0",{"StateMachineMeta":{"key":"LastApplied","value":{"LogId":{"term":1,"index":378}}}}]
# ["state_machine/0",{"StateMachineMeta":{"key":"Initialized","value":{"Bool":true}}}]
# ...

注意:如果没有 --db 参数,导出的数据将输出到 stdio。

恢复 databend-meta

要恢复 databend-meta 节点,请使用以下命令。

databend-metactl import --raft-dir "<your_meta_dir>" --db <output_fn>

# 然后就可以启动 databend-meta 节点了。
# databend-meta --raft-dir "<your_meta_dir>" ...

注意:如果没有 --db 参数,导入的数据将来自 stdio,例如:

cat "<output_fn>" | databend-metactl import --raft-dir "<your_meta_dir>"

请注意,备份数据包含节点 ID, 因此必须确保备份数据中的节点 ID 与恢复的 databend-meta 节点中的节点 ID 一致。 要恢复不同的节点,即使用节点 1 的备份数据恢复节点 2,您需要在导入时指定集群配置,请参见下一节。

注意:导入时将清除 <your_meta_dir> 中的数据。

将数据作为新的 databend-meta 集群导入

使用 --initial-cluster 参数,databend-metactl 导入数据并重新初始化集群信息和节点 ID。 --initial-cluster 值的格式为:<node_id>=<raft_advertise_host>:<raft_api_port>raft_advertise_hostraft_api_port 与 toml 配置文件中的字段相同。

例如,要恢复具有三个节点的 databend-meta 集群:

databend-metactl import --raft-dir ./.databend/new_meta1 --db meta.db \
--id=1 \
--initial-cluster 1=localhost:29103 \
--initial-cluster 2=localhost:29203 \
--initial-cluster 3=localhost:29303
databend-metactl import --raft-dir ./.databend/new_meta2 --db meta.db \
--id=2 \
--initial-cluster 1=localhost:29103 \
--initial-cluster 2=localhost:29203 \
--initial-cluster 3=localhost:29303
databend-metactl import --raft-dir ./.databend/new_meta3 --db meta.db \
--id=3 \
--initial-cluster 1=localhost:29103 \
--initial-cluster 2=localhost:29203 \
--initial-cluster 3=localhost:29303

在上面的命令中,集群信息都是相同的。 但是每个 databend-meta 节点都指定了不同的节点 ID。

之后,就可以启动一个新的三节点 databend-meta 集群了。

欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验