StarRocks故障恢复 - 单副本表恢复

StarRocks故障恢复 - 单副本表恢复,第1张

StarRocks故障恢复 - 单副本表恢复 问题描述

如果一个表为单副本表(虽然这并并不推荐,一般推荐为3副本以保证tablet的高可用),此时用户忽略了这个问题,对be进行了下线的 *** 作:

MySQL> alter system drop backend "be_host:be_heartbeat_service_port";

此时会导致查询时,报找不到tablet的错误:

10063这个tablet在相应的be被drop掉之后造成副本缺失。此时如果下线的机器上数据仍然存在的话是可以恢复的。当然,如果机器下线后数据被删除了,那就只能重新导入数据了。

恢复方法

在已下线的be的storage_root_path配置的目录中找到10063对应的存储目录:

$ ls $storage_root_path/data/*/ | grep 10063

假设路径为:$storage_root_path/data/0/10063/81944231/

获取对应的元数据:

$ export STARROCKS_HOME=[path]
$ export LD_LIBRARY_PATH=$STARROCKS_HOME/lib/jvm/amd64/server:$STARROCKS_HOME/lib/jvm/amd64:$LD_LIBRARY_PATH
$./lib/meta_tool --operation=get_meta --root_path=hdfs/d7/dorisdb/data --tablet_id=10063 --schema_hash=81944231 > 10063.meta

注意:如果是1.19(含)之后的版本使用命令./lib/starrocks_be meta_tool

1)将该目录scp到集群中的任意一个be节点host1对应的目录下$storage_root_path/data/0/

2)将10063.meta 文件scp到host1上的/tmp/下

登录到host1,执行:

$ cd $STARROCKS_HOME/be
$ bin/stop_be.sh
$ export LD_LIBRARY_PATH=$STARROCKS_HOME/lib/jvm/amd64/server:$STARROCKS_HOME/lib/jvm/amd64:$LD_LIBRARY_PATH
$ ./lib/starrocks_be meta_tool --operation=load_meta --root_path=/storage/root/path --json_header_path=/tmp/10063.meta
$ bin/start_be.sh --daemon

再次查询,可以正常执行。

Notes:

1、单副本情况下,数据能否恢复存在一定的概率,因而在创建表时一定要创建3副本(默认为3副本),以保证高可用。

2、在be下线时,推荐使用DECOMMISSION的方式。DROP会立刻删除BE节点,丢失的副本由FE调度补齐;DECOMMISSION先保证副本补齐,然后再下掉BE节点。DECOMMISSION方式更加友好一点,建议采用这种方式进行缩容。

3、在执行类似恢复 *** 作时,尤其涉及到元数据的 *** 作,都是高危 *** 作,容易造成数据损坏甚至不可用,务必特别谨慎,最好先在测试环境进行演练,必要时跟官方确认。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存