Doris Tablet 损坏如何应对?能恢复数据吗?

开门见山,能不能修?

Doris 的 Tablet 损坏了,到底能不能修呢?数据会不会丢?

这玩意还真不好说?

哎,怎么又不好说了呢?
在这里插入图片描述

这个主要是因为下面的原因:

Doris 数据的高可用是基于多副本的,也就是说你在建表的时候,如果指定了3副本,类似下面的参数

// 指定3副本
"replication_allocation" = "tag.location.default: 3"
//或者
"replication_num"="3"

那如果你损坏了一个副本,这时候,基本用户是不会感知的,Doris会有自动修复功能。

但是如果你损坏了两个副本,这时候你这个表应该就是没有办法读写了,这时候就需要手动去修复了。

但是这些都是基于高可用的情况,那如果就一个副本该怎么办呢?

Doris 默认是三副本的,即建表不指定也是三副本,除非用户单独指定了1副本,才会出现上述情况(但是有时候基于成本考虑,或者测试场景,确实会有单副本的情况)

怎么判断Tablet是否损坏?

一般情况下,当查询时候出现下面的报错

Failed to get scan range, no queryable replica found in tablet: xxxx

或者下面的情况

Failed to initialize storage reader, ..., fail to Find path in version_graph

注:下面这种情况的发生原因:迁移副本过程可能丢version,在2.0.3修复了。(老版本还是推荐大家尽快升级呀)

这时候查询对应表里面的某些Tablet就属于不正常的状态了,那就需要根据下面章节的方法进行修复了。

坏了的Tablet怎么修复?

当出现上面的情况时,对应的报错,会带有tablet_id的一串数字。假设tablet_id 是606202,那就可以按照下面的方式进行修复了。(具体实施时候,替换成自己损坏的tablet_id)。

查询失败情况

1.Show tablet xxxx (这里是606202), 拿到detail cmd

2.执行detail cmd的输出,找出该BE 所在的副本(compact status url中包含有该BE的ip)

3.执行curl <步骤3的compact status url>, 该例子是"curl http://be_ip:http_port/api/compaction/show?tablet_id=606202"

查看该副本的rowset 和 missing_rowset ,重点看rowset 的最大版本(这里是34)和 missing_rowsets,从这里可以看出该副本的rowset 为 0 ~ 34, 且中间不缺version(missing_rowsets为空)。

注意:这里的special version 实际就是partition 的visible version。 它也可以通过 show partitions from where PartitionName = ‘’ 来查看到;

而查询语句中是 special version 是 [0, 35], 而该BE 不含version 35。

所以需要给该BE 补上version 35。

如果在3的结果里面missing version不为空,比如下面的例子


这时候就表示有些版本确实丢失了,这时候如果是三副本的话,可以看看其他的be上是不是也是这种情况。如果都是丢失,而且对应的be上日志里有下面的信息

那就说明,确实这三个副本都损坏了。这种情况说明确实丢数据了,最保险的办法就是对应分区重新导入数据了。

如果实在认为这数据丢了一点就丢了一点,不耽误后面的使用,那就可以参考下面章节的内容修复

4. 先确认能否自动修复

如果是多副本,查看是否存在健康副本。副本健康,是指 version >= special version && last failed version = -1 && isBad = false, 且curl 它的 compaction status, missing rowsets 为空。

如果存在这样的副本,把查询报错的副本set bad。参考命令:https://doris.apache.org/zh-CN/docs/sql-manual/sql-statements/table-and-view/data-and-status-management/SET-REPLICA-STATUS

等待一会(可能需要一两分钟),再执行步骤2的detail cmd,如果副本都健康了(version >= special version && last failed version = -1 && isBad = false),且cur 它的compact status, missing rowsets为空,说明修补OK了。且执行select count (*) from table 是否OK。

如果没问题,就自动修复ok了,不用往下看。如果还是有问题,接着往下看。

5. 添补空rowset的方法

如果是三副本都损坏了,或者单副本的情况,那就可以进行补空rowset的方式进行修复了。

这个例子中修补的url中 start_version = 35, end_version = 35;

这个例子只是缺一个rowset, 实际中可能缺多个(missing rowset、最大version + 1 ~ special version ),缺多少个rowset,就调用多少次修补的方法;

参考命令:https://doris.apache.org/zh-CN/docs/admin-manual/open-api/be-http/pad-rowset

这种缺version 可以通过上面的方式让数据可查,但是这部分的数据是没有了,会有少数据的情况

6. 修补完,判断是否需要修改last fail version

修复完之后,再执行下show tablet xxx, 该副本last fail version 是否等于 -1,如果它的version都补上了,但是last fail version = version + 1, 还需要手工执行把last fail version 改成 -1。

参考命令: https://doris.apache.org/zh-CN/docs/sql-manual/sql-statements/table-and-view/data-and-status-management/SET-REPLICA-VERSION

低版本的doris可能不含这个SQL, 如果不支持这个SQL且是单副本的或多副本都损坏了,那救不回来了。

如果没问题,使用 select count(*) from table_xx 查看是否可读,可读则正常了。

特殊场景应对

如果是日志场景,使用单副本存储,但是出现某个tablet损坏了,少数据就少数据,能查就行,也不需要单独修复,该怎么做呢?

通过设置变量skip_missing_version 和 skip_bad_tablet 为true就行了,默认是false。

总结

好了,上面就是比较常见的解决办法了,还搞不好,或者不会搞怎么办?
这就要学会主动出击了,找Doris社区的同学,他们都是嘎嘎热心的人!
如果自己通过上面的方式修复了,但是感觉还是不合理,为什么会出现Tablet损坏的情况呢?这时候也是可以带着对应的日志去找社区的同学,让他们辅助分析一波。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495276.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】查询磁盘空间被谁占用了

查询磁盘空间被谁占用了 先说下常见的几种原因&#xff1a; 1、删除的文件未释放空间 2、日志或过期文件未及时清理 3、inode导致 4、隐藏文件夹或者目录 6、磁盘碎片 最后一种单独介绍。 环境&#xff1a;情况是根分区&#xff08;/&#xff09;的总容量为44GB&#xf…

Scala课堂小结

(一)数组&#xff1a; 1.不可变数组 2创建数组

GitPuk安装配置指南

GitPuk是一款开源免费的代码管理工具&#xff0c;上篇文章已经介绍了Gitpuk的功能与优势&#xff0c;这篇文章将为大家讲解如何快速安装和配置GitPuk&#xff0c;助力你快速的启动GitPuk管理代码 1. 安装 支持 Windows、Mac、Linux、docker 等操作系统。 1.1 Windows安装 下载…

大恒相机开发(2)—Python软触发调用采集图像

大恒相机开发&#xff08;2&#xff09;—Python软触发调用采集图像 完整代码详细解读和功能说明扩展学习 这段代码是一个Python程序&#xff0c;用于从大恒相机采集图像&#xff0c;通过软件触发来采集图像。 完整代码 咱们直接上python的完整代码&#xff1a; # version:…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin ​ 根据前面内容&#xff0c;所有的子任务已经基本结束&#xff0c;接下来就是调用转化的bin模型进行最后的逻辑控制了 1 .YOLO的bin使用 ​ 对于yolo其实有个简单的办法&#xff0c;也…

Golang的容器化技术实践总结

Golang的容器化技术实践总结 一、容器化技术概述 什么是容器化技术 容器化技术是一种轻量级、可移植的虚拟化解决方案&#xff0c;它将应用程序、运行环境和依赖项打包到一个被称为容器的独立单元中。容器可以在不同的操作系统中运行&#xff0c;具有更高的资源利用率和更快的部…

修改el-select下拉框高度;更新:支持动态修改

文章目录 效果动态修改&#xff1a;效果代码固定高度版本动态修改高度版本&#xff08;2024-12-25 更新&#xff1a; 支持动态修改下拉框高度&#xff09; 效果 动态修改&#xff1a;效果 代码 固定高度版本 注意点&#xff1a; popper-class 尽量独一无二&#xff0c;防止影…

运动控制卡网络通讯的心跳检测之C#上位机编程

本文导读 今天&#xff0c;正运动小助手给大家分享一下如何使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能。 01 ECI2618B硬件介绍 ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴&#xff0c;可扩展至12轴的运动控制…

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能&#xff0c;确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW&#xff0c;可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法&#xff0c;并结合硬件选型提供实…

lxml提取某个外层标签里的所有文本

html如下 <div data-v-1cf6f280"" class"analysis-content">选项D错误&#xff1a;<strong>在衡量通货膨胀时&#xff0c;</strong><strong>消费者物价指数使用得最多、最普遍</strong>。 </div> 解析html文本 fro…

学习因子异步化的粒子群优化算法(AsyLnCPSO)——源码

目录 1. 学习因子异步化的概念 2. 算法步骤 2.1 初始化 2.2 迭代过程 3.优势 4. 与传统粒子群算法的区别 5.代码下载&#xff1a; 学习因子异步化的粒子群优化算法&#xff08;AsyLnCPSO&#xff09;是一种改进的粒子群优化&#xff08;PSO&#xff09;算法&#xff0c;…

直流有刷电机多环控制(PID闭环死区和积分分离)

直流有刷电机多环控制 提高部分-第8讲 直流有刷电机多环控制实现(1)_哔哩哔哩_bilibili PID模型 外环的输出作为内环的输入,外环是最主要控制的效果,主要控制电机的位置。改变位置可以改变速度,改变速度是受电流控制。 实验环境 【 !】功能简介: 按下KEY1使能电机,按下…

Verdi -- 打开Consol,创建和执行tcl命令举例

1.Verdi打开Console的步骤&#xff1a; For ref: 2创建tcl脚本. tcl脚本路径&#xff1a; 在Makefile下&#xff0c;与.v文件在同一个目录8_demo这个文件夹下。 font.tcl代码内容&#xff1a; verdiSetFont -monoFont "Courier" -monoFontSize "24" 作用…

GamePlay UE网络同步

基本同步方式: ①未复制:函数仅在本机运行,不对任何人造成影响 ②在服务器上运行:当函数在客户端上调用时才能生效。客户端会通知服务器:“请在服务器上执行这个事件”,事件的具体内容会被在服务器上执行。 ③组播(多播,Multicast):当函数在服务器上调用时才能生效…

RabbitMQ中的Topic模式

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个广泛使用的开源消息代理&#xff0c;支持多种消息传递模式&#xff0c;其中 Topic 模式 是一种灵活且强大的模式&#xff0c;允许生产者…

Scala_【1】概述

第一章 语言特点环境搭建(Windows)idea编写scalaHelloWorld注意事项 Scala是一门以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 语言特点 Scala是一门多范式的编程语言&#xff0c;Scala支持面向对象和函…

【时间之外】IT人求职和创业应知【74】-运维机器人

目录 OpenAI最强推理模型o3发布&#xff0c;AGI测试能力暴涨 英伟达宣布收购以色列AI初创企业Runai 汤姆猫首款AI机器人产品明日发售 心勿贪&#xff0c;贵知足。 感谢所有打开这个页面的朋友。人生不如意&#xff0c;开越野车去撒野&#xff0c;会害了自己&#xff0c;不如…

移动端网页兼容适配方案小结

文章目录 前言一、使用viewport配置&#xff0c;确保完美视口二、使用rem实现弹性布局三、CSS媒体查询处理不同尺寸四、1px边框问题解决方案五、安全区域适配六、图片适配方案七、横屏适配处理八、软键盘弹出处理总结 前言 移动端适配一直是前端开发中的重点难题&#xff0c;分…

教培行业数字化未来:一站​式开发在线教育系统源码与网校APP详解

时下&#xff0c;如何有效地搭建一个全面、稳定、易于管理的在线教育系统&#xff0c;已成为越来越多教育机构关注的焦点。本篇文章&#xff0c;小编将深入探讨如何一站式开发在线教育系统源码与网校APP&#xff0c;为教培行业的数字化未来提供技术支持。 一、开发在线教育系统…

【C++基础】09、结构体

一、结构体(struct) C/C 数组允许定义可存储相同类型数据项的变量&#xff0c;但是结构体是 C 中另一种用户自定义的可用的数据类型&#xff0c;它允许存储不同类型的数据项。 结构体用于表示一条记录&#xff0c;假设现在想要跟踪图书馆中书本的动态&#xff0c;可能需要跟踪每…