Apache Doris tablet 副本修复的原理、流程及问题定位

简介: Apache Doris tablet 副本修复的原理、流程及问题定位

Doris 一个 tablet 有多个副本,可能因为某些情况导致状态不一致。Doris 会尝试自动修复这些状态不一致的副本,让集群尽快从错误状态中恢复。每个副本的状态有以下几种


  1. 1.BAD : 即副本损坏。包括但不限于磁盘故障、BUG等引起的副本不可恢复的损毁状态

  2. 2.VERSION_MISSING : 版本缺失。Doris 中每一批次导入都对应一个数据版本。而一个副本的数据由多个连续的版本组成。而由于导入错误、延迟等原因,可能导致某些副本的数据版本不完整

  3. 3.HEALTHY : 健康副本。即数据正常的副本,并且副本所在的 BE 节点状态正常

Tablet 的状态是有所有副本状态来决定的,状态如下:


  1. 1.REPLICA_MISSING:副本缺失(即存活副本数小于期望副本数)

  2. 2.VERSION_INCOMPLETE:存活副本数大于等于期望副本数,但其中健康副本数小于期望副本数。

  3. 3.REPLICA_RELOCATING :拥有等于 replication num 的版本完整的存活副本数,但是部分副本所在的 BE 节点处于 unavailable 状态

  4. 4.REPLICA_MISSING_IN_CLUSTER : 当使用多 cluster 方式时,健康副本数大于等于期望副本数,但在对应 cluster 内的副本数小于期望副本数

  5. 5.REDUNDANT:副本冗余

  6. 6.COLOCATE_MISMATCH:针对 Colocation 属性的表的分片状态。表示分片副本与 Colocation Group 的指定的分布不一致

  7. 7.COLOCATE_REDUNDANT:针对 Colocation 属性的表的分片状态。表示 Colocation 表的分片副本冗余。

  8. 8.FORCE_REDUNDANT:这是一个特殊状态。只会出现在当期望副本数大于等于可用节点数时,并且 Tablet 处于副本缺失状态时出现。这种情况下,需要先删除一个副本,以保证有可用节点用于创建新副本


  1. 9.HEALTHY:健康分片,即条件[1-8]都不满足。

下面这张图是 Doris 副本检查及副本恢复的整体流程图

微信图片_20231009170105.png

名词解释:


  1. 1.TabletChecker(TC):TabletChecker 作为常驻的后台进程,会定期检查所有分片的状态。对于非健康状态的分片,将会交给 TabletScheduler 进行调度和修复。修复的实际操作,都由 BE 上的 clone 任务完成。FE 只负责生成这些 clone 任务。

  2. 2.TabletScheduler 每5秒进行一次调度

  3. 3.TabletScheduler 每次调度最多 50 个 tablet

  4. 4.最大等待调度任务数和运行中任务数为 2000。当超过 2000 后,TabletChecker 将不再产生新的调度任务给 TabletScheduler。

  5. 5.最大均衡任务数为 500。当超过 500 后,将不再产生新的均衡任务

  6. 6.每块磁盘用于均衡任务的 slot 数目为2。这个 slot 独立于用于副本修复的 slot

  7. 7.一个 clone 任务超时时间范围是 3min ~ 2hour。具体超时时间通过 tablet 的大小计算。计算公式为 (tablet size) / (5MB/s)。当一个 clone 任务运行失败 3 次后,该任务将终止。

  8. 8.TabletScheduler(TS):是一个常驻的后台线程,用于处理由 TabletChecker 发来的需要修复的 Tablet。同时也会进行集群副本均衡的工作。

副本恢复流程


首先是 FE 的 tablet 检查进程,会定期的对所有分片进行检查,然后会不健康的分片,交给Tablet调度进程去完成调度和修复,下面我们主要介绍一下 FE 这边怎么生成调度及BE怎么完成Clone 和修复。


首先我们要找到一个目标BE,可以用来Clone 一个新的副本


  1. 1.找到一个可用的 BE 及副本存放路径,作为我们副本Clone的目标节点

  2. 2.首先这个 BE 是要 Alive 的

  3. 3.应该将现有副本的 BE 节点排除在外,因为同一个 BE 只能有一个副本。

  4. 4.选择一个 proper tag BE

  • 在副本丢失的情况下,我们要选择一个有副本丢失的 tag

  • 根据副本分步情况,如果没有 副本丢失 tag 的,这种应该抛出异常

  • 为了删除多余的副本,这时候需要找出一个多余副本的标签

  1. 1.这个目标 BE 要有可以使用执行 Clone 任务的 Solt

  2. 2.找到一个可以用来 Clone 副本的合适的路径,这里要考虑磁盘容量和使用百分比

  3. 3.目标是要找到一个负载(ClusterLoadStatistics(CLS))相对低的路径,这里TabletScheduler 会每隔 20s 更新一次 CLS

  4. 4.找到一个适合的副本源

  5. 5.这个副本应该是健康的

  6. 6.源副本所在的BE有可用的Clone solt

  7. 7.向目标 BE 发送克隆任务

  8. 8.目标 BE 提交 Clone task 任务

  9. 9.判断 tablet 副本都否存在,如果不存在开始 Clone 一个新的 tablet

  10. 10.向源 BE 发送一个创建Snapshot的请求,这里源 BE 之所以要创建Snapshot,是因为方式在 clone 修复的时候,这个时候有数据写导致Clone 失败,通过创建快照来避免这个问题。

  11. 11.源 BE 检查 tablet 状态及版本等是否正常

  12. 12.如果源 BE 的tablet 副本状态、版本等都是正常的,执行创建Snapshot,并返回

  13. 13.目标 BE 从源 BE 下载刚才创建的Snapshot到本地,完成副本恢复

实例


用户的操作步骤:


1. 修改已有表字段长度, varchar(60) --> varchar(90) 2. tablet出现损坏 3. 自动修复失败。

下面我们来看一个实例,怎么去定位 Tablet 副本均衡失败的原因


  1. 1.首先我们要通过 show tablet tablet_id 查看这个 tablet 副本的情况

  2. 2.在执行上面命令返回的数据最后一列的命令

类似下面的命令


SHOW PROC'/dbs/10005/17679/partitions/774669/6061262/6061295';

微信图片_20231009170514.png

然后我们可以看到最下面的一行,显示这个副本正Clone,但是过了一会并没有Clone 成功,这个时候我们可能感觉无从下手,不知道为什么了,我们这个时候要去关注 cluster_balance, 通过这个查看副本均衡调度任务执行的情况


  1. 1.查看副本调度的任务情况,执行下面的命令

SHOW PROC '/cluster_balance/pending_tablets'; 或者 SHOW PROC '/cluster_balance/running_tablets';

在返回的结果里我们可以看到:SrcBeDestBe

1.png

这个时候我们就要去目标BE上去查看日志,在日志里搜索这个 Tablet Id,然后我在日志里看到下面的信息

[图片上传失败...(image-d42cdf-1662968106713)]


显示这个目标 BE 在去源 BE 请求创建 tablet 副本快照的时候失败了,这个时候我怀疑可能是其他的副本也是有问题的,正常情况下这个地方不应该失败,我通过

SHOW PROC'/dbs/10005/17679/partitions/774669/6061262/6061299';


注意:


这里因为当时是在查看三个 tablet的问题,所有这个tablet id 前后对不上,都是一样的问题

我去看刚才 Clone 失败的副本均衡任务的源 BE 上副本对应的的哪行数据最后一列:CompactionStatus ,然后将这个URL在浏览器里访问,看一下是不是刚才猜测的这个副本也存在问题。

2.png

然后看到了下面的信息,版本丢失了


因为有三副本,之前只损坏一个副本,是不是另外一个副本也是这种情况呢,我又去看了另外一个be上的副本状态,最后发现也是同样的问题

3.png

最后去看了一下,源 BE 上的日志,搜索了 3341 这个版本号,来确认是否真版本丢失了

4.png

通过上面的日志,确认了这个tablet 三个副本都是损坏的,而且没办法修复


这种情况下,我们就要通过 BE 日志来分析具体的原因,是因为操作不当还是程序存在 Bug,如果是操作不当,可以先从操作上规避,然后将这个问题提交给社区,有社区开发人员定位分析,然后修复


针对这个里面没办法修复的,只能先删除这个分区,重新将这个分区的数据导入进来


正常情况下Doris不会出现某个tablet 副本全部损坏不可修复的问题,


现在Doris 社区发版速度很快,而且在1.1.x版本上维护了一个准LTS版本,所以建议大家及时升级到最新版本,正常按照社区的升级手册,不会出现数据丢失的情况


因为Doris 不支持高版本超低版回退,大家可能比较担心我一旦升级错误怎么办,下一篇文章我来给大家讲解怎么进行升级前的备份,在升级失败后,可以回退到之前的版本,正常运行。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
19天前
|
存储 SQL BI
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
毫秒级查询性能优化实践!基于阿里云数据库 SelectDB 版内核:Apache Doris 在极越汽车数字化运营和营销方向的解决方案
|
1月前
|
SQL 存储 调度
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
一个合适的执行模型对于提高查询效率和系统性能至关重要。本文全面剖析 Apache Doris Pipeline 执行模型的设计与改造历程,并在 2.1 版本对并发执行模式与调度模式进一步优化,解决了执行并发受限、执行及调度开销大等问题。
从 Volcano 火山模型到 Pipeline 执行模型,阿里云数据库 SelectDB 内核 Apache Doris 执行模型的迭代
|
1月前
|
SQL 存储 Apache
Apache Doris 2.1.3 版本正式发布
Apache Doris 2.1.3 版本正式发布!该版本在功能特性上对数据湖、物化视图、负载管理等方面进行了多项更新,进一步简化湖仓一体架构、加速了查询性能。 欢迎大家下载体验~
|
25天前
|
存储 运维 5G
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
数据是 5G 全连接工厂的核心要素,为支持全方位的数据收集、存储、分析等工作的高效进行,联通 5G 全连接工厂从典型的 Lambda 架构演进为 All in [Apache Doris](https://c.d4t.cn/vwDf8R) 的实时/离线一体化架构,并凭借 Doris 联邦查询能力打造统一查询网关,数据处理及查询链路大幅简化,为联通 5G 全连接工厂带来数据时效性、查询响应、存储成本、开发效率全方位的提升。
基于阿里云数据库 SelectDB 内核 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
|
19天前
|
弹性计算 JSON Cloud Native
Apache Doris 2.0.11 版本正式发布
Apache Doris 2.0.11 版本已于 2024 年 6 月 5 日正式与大家见面,该版本提交了 123 个改进项以及问题修复,进一步提升了系统的性能及稳定性,欢迎大家下载体验。
|
28天前
|
OLAP 数据处理 Apache
众安保险 CDP 平台:借助阿里云数据库 SelectDB 版内核 Apache Doris 打破数据孤岛,人群圈选提速4倍
众安保险在CDP(Customer Data Platform,客户数据平台)建设中,通过引入阿里云数据库SelectDB版内核Apache Doris,成功打破了数据孤岛,并显著提升了人群圈选的速度
197 1
|
7天前
|
存储 SQL 数据管理
基于阿里云数据库 SelectDB 版内核 Apache Doris 全新分区策略 Auto Partition 应用场景与功能详解
自动分区的出现进一步简化了复杂场景下的 DDL 和分区表的维护工作,许多用户已经使用该功能简化了工作流程,并且极大的便利了从其他数据库系统迁移到 Doris 的工作,自动分区已成为处理大规模数据和应对高并发场景的理想选择。
|
1月前
|
SQL 大数据 BI
从离线到实时:无锡锡商银行基于 Apache Doris 的数据仓库演进实践
从离线到实时:无锡锡商银行基于 Apache Doris 的数据仓库演进实践
|
29天前
|
运维 Cloud Native Apache
云计算新宠:探索Apache Doris的云原生策略
云计算新宠:探索Apache Doris的云原生策略
|
1月前
|
消息中间件 JSON Kafka
AutoMQ 生态集成 Apache Doris
Apache Doris 是一个高性能的分析型数据库,以其亚秒级查询响应和对复杂分析的支持而知名。它适合报表分析、即席查询等场景,能从 AutoMQ 通过 Routine Load 导入 Kafka 主题数据。本文详述了如何配置 Doris 环境,创建测试数据,以及设置 Routine Load 作业从 AutoMQ 导入 JSON 数据到 Doris 表的过程。最后,文中展示了验证数据成功导入的方法。Apache Doris 提供了低成本、高弹性的数据处理解决方案,其团队由 Apache RocketMQ 和 Linux LVS 的核心成员组成。
36 0

推荐镜像

更多