如果一个表为单副本表(虽然这并并不推荐,一般推荐为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、在执行类似恢复 *** 作时,尤其涉及到元数据的 *** 作,都是高危 *** 作,容易造成数据损坏甚至不可用,务必特别谨慎,最好先在测试环境进行演练,必要时跟官方确认。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)