doris日常使用规范

219 阅读32分钟

概述

Apache Doris是一个高性能、实时的分析型数据库,能够较好的满足报表分析、即席查询、数据湖联邦查询加速等使用场景。


一、Doris介绍

  1. Doris简介

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

  1. 适用场景

如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数仓 Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中。

  • 报表分析

    • 实时看板 (Dashboards(仪表板))
    • 面向企业内部分析师和管理者的报表
    • 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS ,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris ,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
  • 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。

  • 统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。

  • 数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。




二、技术规范

  1. 版本规范

  • Doris 版本规范:

    • 版本号格式:Doris 的版本号格式为 X.Y.Z,其中 X 表示主版本号,Y 表示次版本号,Z 表示修订版本号。
    • 主版本号更新:主版本号的更新表示重大的功能变更或架构调整。
    • 次版本号更新:次版本号的更新表示新增功能或对现有功能的改进。
    • 修订版本号更新:修订版本号的更新表示修复了一些 Bug 或进行了一些小的调整。
  • 集群升级

Doris 集群升级可使用滚动升级的方式进行升级,无需集群节点全部停机升级,极大程度上降低对上层应用的影响。

Doris 升级请遵守不要跨两个及以上关键节点版本升级的原则,若要跨多个关键节点版本升级,先升级到最近的关键节点版本,随后再依次往后升级,若是非关键节点版本,则可忽略跳过。

关键节点版本:升级时必须要经历的版本,可能是单独一个版本,也可能是一个版本区间,如 1.1.3 - 1.1.5,则表示升级至该区间任意一版本即可继续后续升级。

示例:

当前版本为 0.12,升级到 2.0.0-beta 版本的升级路线

0.12 -> 0.13 -> 0.14 -> 0.15 -> 1.1.3 - 1.1.5 任意版本 -> 1.2.0 - 1.2.5 任意版本 -> 2.0.0-beta

推荐版本: 推荐使用最新的Stable 版本,持续包含对应分支的 Bug 修复,稳定性更高。

  1. Doris功能

  1. 高性能分析查询:

    1. MPP架构:Doris采用分布式架构,将查询任务分解并在多个节点上并行执行,显著提高处理速度。每个节点独立处理其本地数据,并将结果汇总以生成最终答案,从而实现对PB级别数据的快速查询响应。
  2. MySQL(数据库系统(一种免费的跨平台的))兼容性:

    1. SQL接口:Doris支持标准SQL语法,用户可以使用MySQL客户端直接连接并执行查询,无需学习新的查询语言,降低了使用门槛。
    2. 协议兼容:Doris兼容MySQL的通信协议,使得现有的MySQL客户端工具、应用程序和BI工具能够无缝对接,简化了数据接入和分析流程。
  3. 数据模型与表设计:

    1. 列式存储:Doris采用列式存储格式,优化了对大量数据的扫描效率,尤其是对于只涉及部分列的查询。
    2. 分区表:支持对数据进行水平分区,允许根据时间、哈希值或其他业务键划分数据,提高查询性能和管理灵活性。
    3. 分桶表:通过在分区内部进一步细分为多个桶,可以均匀分布数据,减少数据倾斜,优化并行查询效率。
    4. 批量创建分区:提供便捷的语法支持批量创建历史分区,便于管理和维护大规模时间序列数据。
  4. 物化视图:

    1. 支持创建物化视图,预先计算并存储特定查询的结果,简化复杂查询,加速查询响应,特别适用于固定报表场景。
  5. 实时数据分析:

    1. 流式数据摄入:Doris能够实时接收和处理来自流式系统的数据,如Kafka等,实现近实时的数据分析能力。
    2. 批量数据导入:支持从HDFS、对象存储等外部数据源导入大量历史数据,用于构建数据分析基础。
  6. 易用性和运维:

    1. 简易部署:Doris作为一个独立的分析数据库,不依赖于复杂的Hadoop生态系统,简化了安装、配置和运维工作。
    2. 管理接口:提供丰富的管理接口和命令,如通过Proc系统进行系统状态监控、元数据查询(如/statistic/dbs等)和系统管理操作。
  7. 扩展性:

    1. 水平扩展:通过增加BackEnd (BE) 节点,可以轻松地增加存储容量和计算能力,适应数据量和查询负载的增长。
  1. 架构规范

Doris 常见的部署架构有,存算一体和存算分离这两种架构,Doris 的整体架构由两类进程组成:Frontend (FE) 和 Backend (BE)。其中 FE 主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作;BE 主要负责数据存储、查询计划的执行。百胜生产环境doris集群都是采用存算一体部署架构。

3.1 存算一体部署架构

3.2 存算分离架构

暂时无法在飞书文档外展示此内容

3.3 组件划分与职责

Frontend(前端) (FE) 节点
  • 元数据管理:存储和维护整个Doris集群的元数据,包括表定义、分区信息、分桶布局、索引结构等。
  • 查询处理:接收客户端提交的SQL查询,解析、优化查询计划,生成分布式执行计划,并将任务分配给后端BE节点执行。
  • 用户认证与授权:负责用户的登录验证、权限管理以及安全相关的控制。
  • 系统管理:提供集群状态监控、节点管理、故障恢复等功能,确保系统的稳定运行。
Backend(后端) (BE) 节点
  • 数据存储:实际存储用户数据,采用列式存储以优化查询性能。
  • 数据处理:执行由FE节点下发的查询任务,包括数据扫描、过滤、聚合、排序等计算操作,并将结果返回给FE节点。
  • 数据复制与容错:支持多副本机制,确保数据的高可用性。当某个BE节点发生故障时,其他副本能够接管服务,防止数据丢失

3.4 高可用

数据副本与容错

多副本存储: Doris采用多副本机制来保护数据。每个数据块(tablet)在集群中都有多个副本,通常设置为3副本以达到大多数系统的容错要求。这些副本分布在不同的Backend(BE)节点上,避免单点故障导致数据丢失。

副本一致性: 通过Raft协议实现副本间的强一致性。在写入操作时,数据首先被写入Leader副本,然后通过Raft协议同步到Follower副本。只有当多数副本确认写入成功后,该写操作才被认为已提交。这种机制确保了在任何给定时刻,所有副本上的数据都是最新的且一致的。

副本自动恢复: 当某个BE节点发生故障,或者由于网络问题导致副本不可达时,Doris能够自动检测到异常并启动副本恢复流程。系统会选择其他健康的BE节点创建新的副本,以替换故障副本,确保数据始终维持所需的副本数。

3.5 故障切换与服务恢复

自动故障检测: FE节点持续监控BE节点的状态,一旦发现某个BE节点无法响应或其上数据副本不可用,会立即标记该节点为下线状态,并触发相应的故障恢复流程。

查询重定向: 对于正在进行的查询,如果涉及的故障节点上的数据副本不可用,查询会自动绕过故障节点,从其他健康副本获取数据,尽可能减少对查询结果的影响。

Leader选举与服务接管: 在多副本环境中,当Leader副本所在的BE节点发生故障时,其余Follower副本会通过Raft协议自动进行Leader选举,选出一个新的Leader继续提供服务。这一过程对用户透明,确保写入操作可以无缝切换到新的Leader节点。

3.6 负载均衡与数据均衡

动态负载均衡: FE节点实时监测各BE节点的负载情况(如CPU、内存、磁盘I/O等),并在必要时重新分配查询任务或数据副本,以保持整个集群的负载均衡。这有助于防止因个别节点过载而导致的服务质量下降,同时也有利于快速恢复因故障节点移除后造成的资源空缺。

数据再均衡: 当有新BE节点加入或现有节点离开集群时,Doris能够自动触发数据再均衡操作,将数据副本在新旧节点间重新分布,确保数据分布均匀,维持系统整体的高可用性。

3.7 最小化部署

3FE +3BE ,FE与BE混部在一起,适用于测试与功能验证。不建议生产环境使用该架构。




三、资源规格

  1. 资源评估公式

  1. 评估写入资源:计算公式如下:

    1.   日增数据量 / 86400 s = 平均写入吞吐
    2.   平均写入吞吐 x 写入吞吐峰值对应均值比 = 峰值写入吞吐
    3.   峰值写入吞吐 / 单核写入吞吐 = 峰值写入所需 CPU 核数
  2. 评估存储资源:计算公式为「日增数据量 / 压缩率 x 副本数 x 数据存储周期 = 所需存储空间」。

  3. 评估查询资源:查询的资源消耗随查询量和复杂度而异,建议初始预留 50% 的 CPU 资源用于查询,再根据实际测试情况进行调整。

  1. 资源评估表

关键指标(单位)示例值说明
日增数据量(TB)100根据实际需求填写
压缩率7一般为 5~10 倍(含索引),根据实际需求填写
副本数1根据实际需求填写
数据存储周期(天)3根据实际需求填写
预估数据存储空间(TB)42.9算法:日增数据量 / 压缩率 副本数 数据存储周期
写入吞吐峰值 对应均值比200%根据实际需求填写
单机 CPU 核数32根据实际需求填写
平均写入吞吐(MB/s)1214算法:日增数据量 / 86400 s
峰值写入吞吐(MB/s)2427算法:平均写入吞吐 * 写入吞吐峰值 / 均值比
峰值写入所需 CPU 核数242.7算法:峰值写入吞吐 / 单机写入吞吐
查询预留 CPU 百分比50%根据实际需求填写,默认 50%
预估 BE 服务器数15.2算法:峰值写入所需 CPU 核数 / 单机 CPU 核数 /(1 - 查询预留 CPU 百分比)
预估 BE 服务器数取整15算法:MAX (副本数,预估 BE 服务器数上取整)
预估每台 BE 服务器存储空间(TB)4.03算法:预估数据存储空间 / 预估 BE 服务器数 /(1 - 30%),其中,30% 是存储空间预留值。建议每台 BE 服务器挂载 4~12 块数据盘,以提高 I/O 能力。

具体资源规格请根据实际业务情况进⾏合理选择,避免造成资源浪费。

  1. 套餐规格

Doris资源配置以套餐的形式提供,可用参数如下:

Doris套餐架构模式数据量并发量备注自建区VM资源



四、使用规范

  1. 部署规范

To do

  • 【建议】规划 FE 和 BE 节点的数量和角色分配。在小规模集群中,可能只需要一个 FE 节点用于元数据管理和查询调度,但在生产环境下,为了高可用性,建议部署多个 FE 节点(通常至少 3 个),来保证元数据的一致性和高可用。BE 节点数量根据数据量和查询负载来确定,并且要均匀分布在不同的物理服务器或者机架上,以避免单点故障和性能热点。
  • 【建议】对于节点的命名,要有清晰的规则,方便管理和识别。例如,可以按照功能(如 fe - 01、fe - 02、be - 01 等)或者服务器位置(如 rack1 - fe - 01、rack2 - be - 01)来命名节点。
  • 【强制】配置参数设置持久化:echo "vm.max_map_count=2000000" >> /etc/sysctl.conf
  • 【强制】be集群和fe集群要单独部署到服务器,不能混部在一台主机上。
  • 【建议】使用doris的默认端口,默认端口对应实例表如下:
实例名称端口名称默认端口通信方向说明
BEbe_port9060FE -> BEBE 上 Thrift Server 的端口,用于接收来自 FE 的请求
BEwebserver_port8040BE <-> BEBE 上的 HTTP Server 端口
BEheartbeat_service_port9050FE -> BEBE 上的心跳服务端口(Thrift),用于接收来自 FE 的心跳
BEbrpc_port8060FE <-> BE,BE <-> BEBE 上的 BRPC 端口,用于 BE 之间的通信
FEhttp_port8030FE <-> FE,Client <-> FEFE 上的 HTTP Server 端口
FErpc_port9020BE -> FE,FE <-> FEFE 上的 Thrift Server 端口,每个 FE 的配置需保持一致
FEquery_port9030Client <-> FEFE 上的 MySQL Server 端口
FEedit_log_port9010FE <-> FEFE 上的 bdbje 通信端口
Brokerbroker_ipc_port8000FE -> Broker,BE -> BrokerBroker 上的 Thrift Server 端口,用于接收请求
  1. 字符集约规

To do

  • 【强制】数据库字符集指定utf-8,并且只支持utf-8。

  • 【建议】库名统一使用小写方式,中间用下划线(_)分割,长度62字节内

  • 【建议】表名称大小写敏感,统一使用小写方式,中间用下划线(_)分割,长度64字节内

  1. 建表约规

To do

  • 【强制】确保每个tablet大小为1-3G之间。举例:假设表内单分区数据量在100G,按天分区,bucket数量100个。

  • 【强制】 5 亿以上的数据必须设置分区分桶策略

    •   维度表:缓慢增长的,可以使用单分区,在分桶策略上使用常用查询条件(这个字段数据分步相对均衡)分桶,
    • 表大小分桶
      100M以内1 buckets
      100M-1G3-5 个 Buckets
      大于1G-3G5-7个 buckets
      3-5G7-10 个 buckets
    •   事实表没有办法分区的,数据又缓慢增长的:单个tablet数据量保持在1-3G;比如5亿数据大小在20G,bucket数量给20个没有办法分区的,数据又较快增长的,没办法按照时间动态分区,可以适当放大一下你的bucket数量,按照你的数据保存周期(180天)数据总量,来估算你的bucket数量应该是多少,建议单个bucket大小在1-3G。避免数据倾斜的问题
    •   一个是对分桶字段进行加盐处理,业务上查询的时候也是要同样的加盐策略,这样能利用到分桶数据剪裁能力
    •   另外一个是数据随机分桶,这种缺点是没办法利用数据分桶剪裁能力,数据分布会很均匀
  • 【建议】 1000w-2 亿以内数据为了方便可以不设置分区,直接用分桶策略。(不设置其实Doris内部会有个默认分区)

  • 【强制】对于有大量历史分区数据,但是历史数据比较少,或者不均衡,或者查询概率的情况,使用如下方式将数据放在特殊分区。

    •   对于历史数据,如果数据量比较小我们可以创建历史分区(比如年分区,月分区),将所有历史数据放到对应分区里
  • 【建议】前缀索引的第一个字段一定是最长查询的字段,并且需要是高基字段。这里面选取分区分桶外最长查询且高基数的列

    •   前缀索引(36位):第一个字段查询性能最好,前缀索引碰见varchar类型的字段,会自动截断前20个字符
    •   Int(4)+ Int(4) + varchar(50),前缀索引长度只有28
    •   Int(4) + varchar(50) + Int(4),前缀索引长度只有24
    •   varchar(10) + varchar(50) ,前缀索引长度只有30
    •   最常用的查询字段如果能放到前缀索引里尽可能放到前前缀索引里,如果不能,可以放到分桶字段里
    •   分桶字段注意事项:这个一般是数据分布比较均衡的,也是经常使用的字段,最好是高基数字段
    •   good case :UNIQUE KEY(user_id, age) user_id最长被查询,且数据分布比较散
    •   bad case :UNIQUE KEY(age,user_id ) age是低基数列,且可能存在数据倾斜
  • 【强制】表的副本数必须为3

  • 【建议】前缀索引中的字段长度尽可能明确,因为Doris只有前36个字节能走前缀索引

  • 【强制】除了UNIQUE KEY和aggregate key要构建key的情况,否则不要基数(例如user_type)小于50的字段建立任何索引。因为Doris内置了字典类型优化。

    •   已经有了低基数优化了
    •   Unique Key 是aggregate key 的一个特例,当aggregate key 的key 保持唯一其实就是Unqiue key 模型
  • 【强制】BloomFilter索引必须在查询条件是in或者=,并且是高基(5000以上)列上构建。

    •   数据基数在一半左右
    •   类似身份证号这种基数特别高并且查询是等值(=)查询,使用Bitmap索引能极大加速
    •   Bloomfilter 使用场景:
    •   首先BloomFilter适用于非前缀过滤。
    •   查询会根据该列高频过滤,而且查询条件大多是 in 和 = 过滤。
    •   不同于Bitmap, BloomFilter适用于高基数列。比如UserID。因为如果创建在低基数的列上,比如 “性别” 列,则每个Block几乎都会包含所有取值,导致BloomFilter索引失去意义。
  • 【强制】bitmap索引必须在一定基数范围内构建,太高或者太低的基数都不合适

    •   这种索引更多的适合正交查询
    •   适用场景:
    •   适用于低基数的列上,建议在100到100,000之间,如:职业、地市等。 重复度过高则对比其他类型索引没有明显优势;重复度过低,则空间效率和性能会大大降低。 特定类型的查询例如count、or、and 等逻辑操作因为只需要进行位运算
    •   Bitmap 索引支持类型:
    •   bitmap 索引支持的数据类型如下:
    •   TINYINT
    •   SMALLINT
    •   INT
    •   BIGINT
    •   CHAR
    •   VARCHAR
    •   DATE
    •   DATETIME
    •   LARGEINT
    •   DECIMAL
    • BOOL
  • 【强制】亿级别以上数据,如果有模糊匹配,使用倒排索引或者是 NGram Bloomfilter

  • 【建议】如果某个范围数据在分区分桶和前缀索引中都不好设计,可以考虑引入倒排索引加速。

  • 【建议】建议使用JSON数据类型代替字符串类型存放JSON数据的使用方式

Not to do

  • 【强烈建议】不要使用Auto Bucket ,按照自己的数据量来进行分区分桶,这样你的导入及查询性能都会得到很好的效果,Auto Bucket 会造成 tablet 数量过多,造成大量小文件的问题。

  • 【强制】 2000kw 以内数据禁止使用动态分区(动态分区会自动创建分区,而小表用户客户关注不到,会创建出大量不使用分区分桶)

  • 【强制】如果分桶字段存在30%以上的数据倾斜,则禁止使用Hash分桶策略,改使用random分桶策略

  • 【强制】单表物化视图不能超过6个

    •   单笔物化视图是实时构建

    •   在unique 模型上物化视图只能起到 Key 重新排序的作用,不能做数据的聚合,因为Unqiue模型的聚合模型是replace

  1. 数据变更约规

To do

  • 【建议】特殊大的ETL操作,简单单独在Session中设置超时时间SELECT/+ SET_VAR(query_timeout = 1/ sleep(3); 类似这样通过Hint方式去设置Session 会话变量,不要设置全局的系统变量
  • 【强制】DBA执行delete后者update语句时必须带分区条件

Not to do

  • 【强制】禁止使用INSERT INTO tbl1 VALUES ("1"), ("a");这种方式写入数据。

  • 【强制】应用程序不可以直接使用delete后者update语句变更数据,使用CDC的upsert方式来实现。

    •   低频操作上使用,比如 Update 几分钟更新一次

    •   如果使用 Delete 一定带上分区条件

  1. 数据查询约规

To do

  • 【强制】in 中条件超过 2000 后,必须修改为子查询

  • 【建议】一次insert into select 数据超过1亿条后,建议拆分为多个insert into select语句执行,分成多个批次来执行。

    •   如果真的是要这样执行,在集群资源相对空闲的时候可以通过调整并发度来加快的数据导入速度
    •   2.0 以后版开启了Pipeline 就不需要设置并发度了
    •    set parallel_fragment_exec_instance_num = 8 或者 16 建议是你CPU内核的一半
    •    insert into new_tbl select * from old_tbl
  • 【强制】query查询条件返回结果在5w条以上,使用JDBC Catalog或者OUTFILE方式导出。不然大量FE上数据传输将占用FE资源,影响集群稳定性

    •   如果你是交互式查询,建议使用分页方式(offset limit),分页要加Order by
    •   如果是数据导出提供给第三方使用,建议使用 outfile 或者 export 方式
  • 【建议】query查询如果有大量的数据传输需求,建议部署observer节点并在该该节点执行查询(私有化部署)

建议的方式是 1 FE(Follower) + 多个 OBserver(FE)方式,读写分析,所有的写连接 Follower,所有的读连接Observer

  • 【建议】大量数据排序(5亿以上)后返回部分数据,建议先减少数据范围在执行排序,否则大量排序会影响性能。

    •   select * from kunpeng_risk_record krr where krr.event_occur_time_date between '2023-10-01 00:00:00' and '2023-10-25 23:59:59' and krr.partner_code = 'liveme' order by krr.sequence_id desc limit 20;
    •   例如将 from table order by datatime desc limit 10 优化为from table where datatime='2023-10-20' order by datatime desc limit 10
  • 【强制】2个以上大于3亿的表 JOIN 使用 Colocate JOIN

Colocate Join 的使用参照:Colocation Join - Apache Doris

  • 【强制】亿级以上表数据查询必须带分区分桶条件

Not to do

  • 【强制】禁止使用REST API(Statement Execution Action)执行大量SQL查询,改接口仅仅用于集群维护。

  • 【强制】亿级别大表禁止使用select * 查询,查询时需要明确要查询的字段

    •   SQL Block方式禁止这种操作
    •   如果是高并发点查,建议开启行存
    •   表属性级别
    •   "enable_unique_key_merge_on_write" = "true",
    •   "store_row_column" = "true"
    •   be.conf
    •   disable_storage_row_cache 是否开启行缓存, 默认不开启
    •   使用PrepareStatement模板
  • 【建议】尽量不要使用OR 作为 JOIN条件




五、监控告警

监控的对接与CMDB强关联,对接监控前必须在CMDB中有登记。如果没有需要提前清洗数据进入CMDB,以裸资源的形式洗入CMDB。FE节点和BE节点分开部署,FE节点的SRV名对应 sid--*-*-fe ,BE节点的SRV名对应 sid-*-*-be

  1. 常用监控命令

  • SHOW PROC '/frontends'; — 显示所有前端的状态。
  • SHOW PROC '/backends'; — 显示所有后端的状态。
  • SHOW PROC '/brokers';显示所有配置的Broker的状态。
  • SHOW PROC '/transactions';查看当前正在执行的事务。
  1. 监控告警架构

Prometheus + Doris-http_port + Grafana方式进行监控,并对核心指标提供监控大屏及告警通知。

  1. 监控屏注解

      FE监控面板:

    大屏面板面板参数参数/面板说明
    Cluster Number面板-运行FE主节点的数量
    Frontends Status面板-Doris的FE节点状态,1代表状态正常
    Cluster FE JVM Heap Stat面板-JVM 堆内存使用率
    Cluster Qps Stat面板-Doris数据库中的查询速率
    FE Node面板-Doris数据库中的FE节点数量
    FE Alive面板-Doris数据库中的FE节点在线数量
    BDBJE write面板-Doris数据库写入延迟和写入平均速率
    BDBJE Read面板-Doris读取操作的平均速率
    Max Replayed journal id面板-Doris数据库当前的最大日志ID
    Edit Log Clean面板-Doris 数据库编辑日志清理操作中失败的事件
    RPS 面板-Doris 数据库前端(FE)每秒请求的速率
    QPS 面板-Doris 数据库前端(FE)每秒查询的速率
    99th Latency 面板-Doris 数据库各个实例在 99% 分位数下的查询延迟聚合情况
    Query Error 面板-Doris 数据库前端(FE)中特定服务的查询错误数
    Connections 面板-Doris 数据库当前的总连接数
    Txn Begin/Success on FE 面板-Doris 数据库前端在处理事务开始请求的个数和速率
    Txn Failed/Reject on FE 面板-Doris 数据库前端(FE)中事务被拒绝的速率
    Fe_txn_status 面板-监控系统中获取 Doris 数据库前端(FE)事务状态的数量
    JVM Threads 面板-Java 虚拟机(JVM)上当前活跃的线程数量

       BE监控面板:

大屏面板面板参数参数/面板说明
Cluster Number面板-机器运行的实例
面板-Doris副本集中每个次级成员在指定时间间隔内的最大复制延迟
Member Health面板-Doris实例的健康状态
Node Role面板-Doris实例的规则
Uptime面板-Doris实例的启动持续时间
Available Connection面板-Doris实例可用连接数
连接数面板-Doris实例的活跃连接数
Oplog Size面板-Doris实例的Oplog日志大小
Memory used面板-Doris实例的内存使用大小
Network I/O面板-Doris实例的发送和接收使用流量
wiretiger存储引擎的缓冲中脏字节的百分比面板-WiredTiger缓存中脏数据占总配置缓存的百分比
已经使用的wiretiger存储引擎缓存比例面板-WiredTiger存储引擎中当前使用的缓存大小占配置的最大缓存大小的比例
正在执行的读取文档个数面板-尝试获取读取锁的活跃客户端数量
正在执行全部数量面板-尝试获取任何类型锁的活跃客户端总数
Replica Query Operations面板-在指定的时间区间内 Doris 复制操作的平均速率
Operations Per Second面板-Doris 实例复制操作每秒的平均数量
Document Operations面板-Doris 实例文档操作的平均数量
"/" 或者 “/data” usage面板-服务器"/" 目录或者 “/data”目录下磁盘使用情况
Average CPU Usage面板-每个实例的每种 CPU 模式平均 CPU 使用率
Average Memory Usage面板-服务器的内存使用情况
Disk IO busy 面板-服务器磁盘的IO繁忙情况
Disk iops 面板-服务器磁盘的读写操作数量
Disk throughput/s 面板-服务器磁盘读取和写入字节大小
Disk使用率-服务器挂载磁盘的使用率情况
句柄数使用量-服务器已分配的文件描述符数量
  1. metrics端口

      FE服务器配置

      命令示例:fe.conf里面配置http_port后,启动FE节点。

      端口:默认8030

      路由: /metrics

      BE服务器配置

      命令示例:be.conf里面配置webserver_port后,启动BE节点。

      端口:默认8040

      路由: /metrics




六、支持范围(有限支持)

  1. 标准化安装部署
  2. 标准化监控屏提供
  3. 标准化报警服务
  4. 基本服务基本可用性保障
  5. 标准化扩缩容服务
  6. 运维提供年度的标准版本更新



附录

  1. doris命令清单

常用命令参考:

类别含义命令备注
doris实例启动服务supervisorctl start doris_be用于启动 Doris BE 服务,使其开始运行并提供服务
查看服务状态supervisorctl status doris_be用于检查 Doris BE 服务的运行状态,确认其是否正常运行或停止
重启服务supervisorctl restart doris_be用于重启 Doris BE 服务,通常在需要应用配置更改或解决服务异常时使用
停止服务supervisorctl stop doris_be用于停止 Doris BE 服务,通常在维护或关闭服务时使用
交互模式mysql -uroot -P 9030 -h 10.2.3.36用于连接到 Doris FE 服务的 MySQL 端口,进入交互式 SQL 命令行界面,以便执行 SQL 查询和管理操作
查看集群的状态查看FE的运行状态show frontends\G;FE 节点的角色(Master、Follower、Observer)、IP 地址、端口、状态等信息
查看be的运行状态show backends\G;BE 节点的 ID、IP 地址、端口、状态、磁盘使用情况等信息
节点延展集群增加FE节点ALTER SYSTEM ADD FOLLOWER "<fe_ip_address> : <fe_edit_log_port>";将新的 FE 节点添加到 Doris 集群中,以增强集群的高可用性和负载均衡能力
添加 Observer 节点ALTER SYSTEM ADD OBSERVER "<fe_ip_address>:<fe_edit_log_port>"注册 FE observer 节点,在 MySQL Client 中执行 ALTER SYSTEM 语句
集群增加BE节点ALTER SYSTEM ADD BACKEND "be_host:be_heartbeat_service_port";注册 BE 节点,在 MySQL Client 中执行 ALTER SYSTEM 语句
存储查看查询集群表中存储占用情况show data;可以看到每张表的存储占用空间,以及每张表当前创建了多少分片
查看单张表在集群的存储分布情况ADMIN SHOW REPLICA DISTRIBUTION FROM db_name.table_name;了解在每台BE中的数据存储比例,以及是否有存储的倾斜
数据表基本操作追加新字段ALTER TABLE tb_name ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [AFTER name_after];这些操作通过 ALTER TABLE 命令实现,分别用于向表中添加新字段、修改现有字段的数据类型以及添加或修改、删除字段的备注信息。
修改字段类型ALTER TABLE tb_name MODIFY COLUMN [IF EXISTS] name [type] [default_expr];
修改备注ALTER TABLE tb_name COMMENT COLUMN [IF EXISTS] name 'some comment';
删除已有字段ALTER TABLE tb_name DROP COLUMN [IF EXISTS] name;
修改数据表名称RENAME TABLE old_name TO new_name;用于将现有数据表的名称更改为新的名称,以便于表的管理或符合新的命名规范。
分区操作查询分区信息SELECT partition_id,name,table,database FROM system.parts WHERE table = 'partition_xx';用于获取指定表的分区详细信息,包括分区 ID、名称、所属表和数据库名称等。
删除指定分区ALTER TABLE tb_name DROP PARTITION partition_expr;用于从表中删除指定的分区,可以根据分区表达式来确定具体要删除的分区
  1. 核心参数

参数配置使用示例说明
FE配置参数max_running_txn_num_per_db = 10000主要是用来控制同一个 DB 的并发导入个数的。默认值为1000
streaming_label_keep_max_second = 3600 label_keep_max_second = 7200定义副本集成员,包括成员的 ID、主机地址和优先级等属性。
enable_round_robin_create_tablet = true设置副本集操作日志(oplog)的大小,以 MB 为单位。较大的 oplog 可以减少主从同步的频率,但会占用更多磁盘空间。
tablet_rebalancer_type = partition指定分片键,用于确定数据在分片集群中的分布。
enable_single_replica_load = true设置数据块(chunk)的大小,以 MB 为单位。影响数据在分片间的迁移和平衡策略。
autobucket_min_buckets = 10指定 Doris 服务器监听的 IP 地址,可以是单个 IP 或多个 IP,也可以使用通配符表示监听所有地址。
max_backend_heartbeat_failure_tolerance_count = 10设置 Doris 服务器监听的端口号。
priority_networks = 10.1.3.0/24显式配置 priority_networks 选项,以指定 FE 使用的 IP 地址,绑定网卡
meta_dir = DorisFE.DORIS_HOME_DIR + "/doris-meta"元数据将保存在这里
JAVA_OPTS="-Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:DORISHOME/log/fe.gc.log.DORIS_HOME/log/fe.gc.log.DATE"默认 Java 最大堆内存设置为 8GB。对于生产环境,建议将其调整至 16GB 以上,以提高性能。
lower_case_table_names= 0用于控制用户表表名大小写是否敏感。 默认值:0,对表名大小写敏感。
BE配置参数storage_root_path = /path/to/dir1;/path/to/dir2;...;/path/to/dir12指定数据库存储文件的路径。
enable_file_cache = true设置 Doris 服务器日志文件的路径。
file_cache_path = [{"path": "/mnt/datadisk0/file_cache", "total_size":53687091200, "query_limit": "10737418240"},{"path": "/mnt/datadisk1/file_cache", "total_size":53687091200,"query_limit": "10737418240"}]控制写入操作的确认级别,例如 w 可以指定需要多少个节点确认写入成功,j 表示是否将写入操作同步到磁盘,wtimeout 是写入超时时间。
write_buffer_size = 1073741824指定读取操作的偏好,例如可以选择从主节点、副本集的次要节点或特定标签的节点读取数据。
JAVA_HOME = 修改 be/conf/be.conf 的 Java 环境变量
priority_networks = 10.1.3.0/24显示配置 priority_networks 选项,绑定网卡
max_tablet_version_num = 20000控制 tablet 的最大版本数。
enable_single_replica_load = true设置数据块大小,影响分片间的数据迁移和平衡策略。
max_cumu_compaction_threads = 8设置并行累积压缩的线程数。
inverted_index_compaction_enable = true启用倒排索引的压缩。
enable_segcompaction = false enable_ordered_data_compaction = false是否启用段级压缩。 启用有序数据压缩。
enable_compaction_priority_scheduling = false启用压缩优先级调度。
total_permits_for_compaction_score = 200000压缩任务总评分的许可数,用于优先级调度。
disable_storage_page_cache = true inverted_index_searcher_cache_limit = 30%禁用存储页缓存。设置倒排索引搜索缓存限制。
inverted_index_cache_stale_sweep_time_sec = 3600 index_cache_entry_stay_time_after_lookup_s = 3600设置倒排索引缓存的清理时间,单位为秒。指定索引缓存条目在查找后保留的时间,单位为秒。
enable_inverted_index_cache_on_cooldown = true enable_write_index_searcher_cache = false在冷却状态下启用倒排索引缓存。启用写索引搜索缓存。
tablet_schema_cache_recycle_interval = 3600 segment_cache_capacity = 20000tablet schema 缓存的回收间隔,单位为秒。缓存的 segment 容量。
inverted_index_ram_dir_enable = true启用倒排索引的内存目录。
pipeline_executor_size = 24 doris_scanner_thread_pool_thread_num = 48设置流水线执行器的大小。设置扫描器线程池的线程数量。
scan_thread_nice_value = 5设置扫描线程的优先级值。
string_type_length_soft_limit_bytes = 10485760设置字符串类型的长度限制,以字节为单位。
trash_file_expire_time_sec = 300 path_gc_check_interval_second = 900 path_scan_interval_second = 900回收站文件的过期时间,单位为秒。路径垃圾回收检查的间隔,单位为秒。路径扫描的时间间隔,单位为秒。