Doris 扩缩容和副本均衡

news2024/10/6 18:27:13

扩缩容和副本均衡

​ 对于集群节点发生变化(扩缩容)时,集群内部的tablet是如何以一定的策略完成数据的重分布,从而达到每个be能够分布尽可能数量相同的tablet。同时,集群内部某些tablet由于某些原因发生损坏时,这些tablet的自动修复工作又是如何进行的呢?为什么通常需要推荐三副本,不采用2副本或者1副本存储?这个和副本自动修复机制有什么关联吗?

​ 一 一来看上面的问题之前,我们先看一下整个tablet管理的流程。下面是一个tablet被工作的流程:

  1. 首先,所有的tablet副本的元数据管理都在FE节点中的META中,对于这些tablet的状态感知,是靠FE进行的。这里也有一个额外的点,如果tablet的数量很大的话,对于FE的元数据存储会有一定的压力,FE的内存使用会变高。
  2. 同时,负责检测tablet状态的工作也是由FE进行的,FE会维护一个叫做TabletChecker的常驻后台进程,定期的去检测tablet的状态。
  3. 其次,负责真正进行tablet调度的是由BE进程维护的TabletScheduler常驻进程,他会不断的接受由FE的TabletChecker发送过来的需要进行调度的tablet的上下文,由TabletScheduler进程决定具体的调度执行策略。

流程图如下:

在这里插入图片描述

图1.tablet调度流程

集群缩容

在了解了tablet调度的大概流程之后,我们来看一下集群在缩容(BE缩容)时,大概发生了一些什么事情吧。

  1. 用户提交 DECOMMISSION 缩容语句;
  2. FE在接收到相关请求语句后,会把语句中对应的BE节点下线,同时将这些节点上的所有tablet的状态标记为unhealthy的状态;
  3. FE维护的后台常驻进程TabletChecker检测到有不健康的副本后,触发tablet调度流程,将这些不健康的tablet的上下文信息发送给TabletScheduler进程;
  4. TabletScheduler根据副本调度策略,根据已有的BE节点资源情况计算,将对应的tablet的clone task任务发送到对应的BE节点上,进行tablet的clone工作;
  5. 等到对应的tablet clone任务结束后,对应tablet的副本被补齐之后,FE中meta 维护的对应的tablet的元数据信息就是正常的,此时需要下线的BE节点也就会被DROP掉了;

集群扩容

集群扩容又做了哪些操作呢?

相比较集群缩容,副本均衡的策略主要 依赖于将需要下线的BE节点上的所有的tablet的状态标记为unhealthy来触发tablet的调度流程。

集群扩容主要是基于新增的BE节点的资源状态来触发BE节点的负载均衡的来完成副本调度流程的。

BE节点的负载均衡策略(解释来源Doris官网文档:数据副本管理):

我们用 ClusterLoadStatistics(CLS)表示一个 cluster 中各个 Backend 的负载均衡情况。TabletScheduler 根据这个统计值,来触发集群均衡。我们当前通过 磁盘使用率副本数量 两个指标,为每个BE计算一个 loadScore,作为 BE 的负载分数。分数越高,表示该 BE 的负载越重。

磁盘使用率和副本数量各有一个权重系数,分别为 capacityCoefficientreplicaNumCoefficient,其 和衡为1。其中 capacityCoefficient 会根据实际磁盘使用率动态调整。当一个 BE 的总体磁盘使用率在 50% 以下,则 capacityCoefficient 值为 0.5,如果磁盘使用率在 75%(可通过 FE 配置项 capacity_used_percent_high_water 配置)以上,则值为 1。如果使用率介于 50% ~ 75% 之间,则该权重系数平滑增加,公式为:

capacityCoefficient= 2 * 磁盘使用率 - 0.5

该权重系数保证当磁盘使用率过高时,该 Backend 的负载分数会更高,以保证尽快降低这个 BE 的负载。

TabletScheduler 会每隔 20s 更新一次 CLS。

因此,在新加入BE节点后,该BE节点的负载分数就会很低,就会触发负载均衡任务,进行下面的操作。

TabletScheduler 在每轮调度时,都会通过 LoadBalancer 来选择一定数目的健康分片作为 balance 的候选分片。在下一次调度时,会尝试根据这些候选分片,进行均衡调度。

副本修复

副本损坏大部分主要发生在数据导入的过程中,由于某些原因造成某个tablet的副本可能存在损坏,亦或者在频繁的进行异步schema change任务时导致的副本损坏。副本损坏时,FE维护的元数据信息中,对应的tablet的状态会变为unhealthy,此时,集群内部如果是三副本的情况,调度器会找到这个tablet对应的正常的副本,然后执行clone任务,clone完成后,再将这个不正常的副本删除,此时副本修复就完成了。因此,副本修复是需要依赖于集群中对应的tablet是有正常的副本的,否则无法进行正常的副本修复流程,此时可能就需要用户手动将对应tablet所在的分区的数据进行删除重导,重新生成tablet了。

为何要三副本?

结合上面的流程来看,三副本的重要性很大。它主要体现在:

  1. 提供一定的数据容灾能力。

    将一份数据的多个数据副本尽可能的分散在不同的物理机器上,当由于某些问题造成对应机器发生硬件问题时,能够保证集群的数据仍旧可读可写,不影响正常的数据业务。

  2. 尽可能的负载均衡,利用到集群中的每一个计算节点(BE节点)。

    同一份数据会被打散在多台机器上存储,根据一定的负载均衡策略,能够保证每个BE都能够存储大致相同量的数据,在发生计算任务的时候,不会由于数据分布不均匀造成某些BE查询压力过大,导致局部干活,其余看戏的现象。

  3. 副本修复依赖于三副本

    原理同副本修复章节。

  4. 特殊查询场景加速

    colocate join 和replicate join 对于参与join的数据分布的副本数也有一定要求(不一定是三副本)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快手web验证日志分析

文章目录 log参数session_ididentityproject_id 流程1-4请求参数sign日志formdata828586 log参数 为了确定日志中是否有参数和IP绑定,检查了session_id参数。 session_id session_id i (wn[e[t 0]] wn[e[t 1]] wn[e[t 2]] wn[e[t 3]] "-" wn…

rk3568 长按电源键关机修改

rk3568 电源键强制关机触发时间修改 Rockchip系列主控芯片配套PMIC支持长按电源键强制关闭PMU,也就是标题中的强制关机。rk3568使用I2C通信与PMIC(rk809/rk817),power(电源)键则是与PMIC相连,PMIC监测按键状态控制RK3568的上下电,…

新增每日个股涨停原因及概念题材统计!股票量化分析工具QTYX-V2.6.6

功能概述 目前A股市场主旋律仍然是以行业及题材板块的热点轮动为主,因此从某种意义上来说,板块的强弱决定了选出个股的强弱。 我们的股票量化分析工具QTYX目前已经支持了统计行业板块内涨停板数量功能。‍ 为了进一步分析出市场上启动的热点概念题材。我…

vscode远程连接linux服务器

Linux服务器(或虚拟机)条件: 开启ssh服务 客户端: vscode 1.服务端 服务端需要开启ssh服务vscode才能连接,首先检验linux是否开启了ssh服务 systemctl status sshd servie sshd status 运行命令,如果可…

视频基础知识——编码时,帧率、码率、分辨率之间的联系

本文主要补充基础概念,在设置编码器的时候,参数设置不对,录制的屏幕就会出现花屏。所以梳理了基础知识,就知道哪里设置不对了。 如下是ffmpeg自带的sample,encode_video的例子,选取H264的编码器&#xff0c…

基于SpringBoot和协同过滤算法的体育商城系统的实现

最近帮小伙伴做了个基于SpringBoot和协同过滤算法的体育商城系统。 文章目录 一,SpingBoot介绍二,协同过滤算法介绍三,系统功能需求四,系统功能演示五,系统核心代码演示 一,SpingBoot介绍 现如今后台开源框…

企业寻求最大化投资回报率的24个社交媒体技巧

社交媒体营销不是银弹。它不会解决您所有的业务问题,也不会让您一夜成名。但是,如果您愿意投入时间和精力,社交媒体可以成为建立关系、建立信誉和发展业务的强大工具。 在这篇文章中,我们将分享24个社交媒体技巧,以帮…

React 演示Hook中发送网络请求

我这里本地用java写了个接口 当我访问 http://localhost:8080/books 就会发出一个无惨的 get请求 返回内容如下 这里 我返回了一个 json对象 然后 我们在react项目的src目录下创建setupProxy.js 参考代码如下 const proxy require(http-proxy-middleware)module.exports f…

您的Android密钥安全吗?一招教你安全加固

您的Android密钥安全吗?一招教你安全加固 你是否担心你的Android应用中的敏感数据会被披露出去?如果是的话,别担心,你并不是唯一一个有这样担忧的人。在今天的世界里,保护你的应用的URL和密钥免受逆向工程的风险变得比…

前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩

前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩, 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13099 效果图如下: ## 1.0.0(2023-06-18) 组件初始化 #### …

三、多层感知机及模型优化

文章目录 前言一、多层感知机1.1 隐藏层1.1.1 什么叫隐藏层1.1.2 为什么需要隐藏层 1.2 激活函数1.2.1 ReLU函数1.2.2 Sigmoid函数1.2.3 tanh函数 1.3 多层感知机的代码实现 二、模型选择、欠拟合和过拟合2.1 训练误差和泛化误差2.2 模型选择2.2.1 模型复杂性2.2.2 验证集2.2.3…

机器学习强基计划9-1:图解匹配追踪(MP)与正交匹配追踪(OMP)算法

目录 0 写在前面1 字典学习2 稀疏表示与稀疏编码3 匹配追踪MP算法4 正交匹配追踪OMP算法 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型&#xff…

CSS小技巧之悬停3D发光效果

今天要实现的效果如图所示,鼠标悬停是图片卡片会有3D翻转的效果,且动画过程中还带有发光的效果。类似这种3D悬停效果日常看到的比较多,但是今天实现的这个效果有以下几个亮点: 核心CSS代码不超过10行没有额外的元素(只…

STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据

STM32 MCOSPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据 STM32大部分芯片只有12位的ADC采样性能,如果要实现更高精度的模数转换如24位ADC采样,则需要连接外部ADC实现。ADS1271是 TI公司一款高速24位Σ-Δ型模数转换器(…

[每周一更]-(第50期):Go的垃圾回收GC

参考文章: https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…

【前端布局篇】浮动、定位、弹性布局,固比固、双飞翼、圣杯布局

一、布局方式介绍 布局模型是基于盒模型基础上进行的拓展,关于布局有流式布局(标准的布局),浮动布局、定位布局、flex布局等。 1.1 标准流(流动模型) 描述:元素按照自己默认的元素类型在页面…

社区问答精选——长安链开发知多少?(6月)

此次整理的内容为5-6月社群内的问答供更多开发者参考(社群中部分优质问题连贯性不足未能收录,欢迎点击公众号菜单栏加入社群共同交流)。有更多问答在社区issue中描述更为细致,开发者提问前可以先按照关键词进行搜索。欢迎各位开发…

Doris FE启动流程源码解读

FE启动流程分析 Doris中FE主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。 本文主要看一下Doris的fe在启动时做了什么。 启动流程分析 启动流程图: 代码路径: doris/fe/fe-core/src/main/java/org/apache/doris/DorisFE.j…

华为云CodeArts Build快速上手编译构建-进阶玩家体验

华为云CodeArts Build编译构建为开发者提供配置简单的混合语言构建平台,实现编译构建云端化,支撑企业实现持续交付,缩短交付周期,提升交付效率。支持编译构建任务一键创建、配置和执行,实现获取代码、构建、打包等活动…

react+antd实现表格封装,可动态控制列显示隐藏。

实现效果 import { Table, Pagination, Button, Dropdown, Checkbox, message } from antd; import { useState, useEffect } from react; import { PicRightOutlined } from ant-design/icons;import ./index.less;const TableComponent (props) > {const powerList JSON…