更新时间:2025-12-10 GMT+08:00
分享

Doris多租户介绍

Doris多租户介绍

Doris多租户的特性是通过内核Workload Group资源软限制的方案实现的,通过“用户 > 租户角色 > Workload Group”模型对Workload进行分组管理,以保证内存和CPU资源的灵活调配和管控。目前支持CPU、内存、并发数和等待队列管理,模型设计如图1所示。

  • 该特性仅MRS 3.3.1及之后版本支持。
  • 集群已启用Kerberos认证(安全模式)支持在Manager界面创建和管理Doris多租户。
  • MRS 3.5.0及之后版本,MRS Doris默认租户“normal”的内存占比是90%,并发数是“10000”。
图1 Doris租户模型

用户与租户关联后,该用户提交的query任务就与Workload Group相关联,可以限制单个查询在BE节点上的CPU和内存资源的百分比,和配置资源组的内存软隔离。

开启内存软隔离后,当集群资源紧张时,将自动结束组内占用内存最大的若干个查询任务以减缓集群压力。当集群资源空闲时,一旦Workload Group使用资源超过预设值时,多个Workload将共享集群可用空闲资源并自动突破阈值,继续使用系统内存以保证查询任务的稳定执行。与此同时,在Workload Group中引入了查询排队的功能,在创建Workload Group时可以设置最大查询数,超出最大并发的查询将会进行队列中等待执行,以此来缓解高负载下系统的压力。

Doris租户角色和用户关联关系介绍

通过FusionInsight Manager服务配置和租户管理页面的操作,用户可以实现创建租户、关联服务、设置租户资源配置、租户关联用户等操作。Manager侧和Doris侧的角色和用户关联关系如下图所示:

租户关系中“用户 > 租户角色 > Workload Group”都是一对一关系;而权限角色,一个用户可对应多个角色。

当前版本支持的Doris租户资源配置列表如表1所示。

表1 租户资源配置

资源

取值范围

描述

备注

CPU配额权重

1~100

租户占用CPU资源的相对权重

相对占比(竞争时生效),例如有两个租户A和B执行查询,对应该值分别为A:10,B:20,此时租户A的CPU占用率为三分之一,即为:10/(10+20)。如果另有一租户C开始执行,对应值为30,则租户A的CPU占用率为六分之一,即为:10/(10+20+30)。

内存限额占比

  • MRS 3.3.1版本:1%~70%
  • MRS 3.5.0及之后版本:1%~90%

租户最大占用内存资源的百分比

租户的可用内存大小为:物理内存 * mem_limit * 内存限额占比,上限为70%(MRS 3.5.0及之后版本为90%),Doris默认租户normal占用了30%(MRS 3.5.0及之后版本为90%)。

并发数

  • MRS 3.3.1版本:1~2147483647
  • MRS 3.5.0及之后版本:1~10000

租户最大可运行查询任务的并发数

该值是对单个FE的限定。例如设置并发数为1,Doris有三个FE节点,则从集群角度看,最大可运行的SQL数为3。

队列长度

  • MRS 3.3.1版本:0~2147483647
  • MRS 3.5.0及之后版本:0~1000

租户最大等待执行的查询任务数

超过并发数的SQL会进入队列等待,当队列满了之后,新提交的查询会被拒绝。

队列等待时长

  • MRS 3.3.1版本:0~2147483647
  • MRS 3.5.0及之后版本:0~86400000

租户等待执行的查询任务最大的等待时长

如果查询等待时间超过该值,那么查询会被拒绝,时间单位为毫秒。

开启内存软隔离

  • 开启
  • 关闭

租户是否可以超量占用内存资源

  • 如果关闭内存软隔离,系统检测到租户内存使用超出限制后将立即取消租户组内内存占用最大的若干个任务。
  • 如果开启内存软隔离,若该系统有空闲内存资源则该租户在超出内存的限制后可继续使用系统内存;只有当集群资源紧张时,才取消租户组内内存占用最大的若干任务。

调度策略

  • 队列调度器:优先级较高的Doris查询任务将优先被执行
  • 公平调度器:用户的权重越高,提交的查询任务被执行的机会越多
  • 容量调度器:用户查询任务分配的容量值的比例越高,被执行的机会越多

MRS 3.6.0-LTS及之后版本,用于设置Doris任务的调度方式,默认调度策略为“公平调度器”

如果调度策略为“队列调度器”或“容量调度器”,则需在FusionInsight Manager界面,选择“集群 > 服务”,在服务列表中单击“Doris”进入服务概览页面,选择“配置 > 全部配置”,在左侧导航栏选择“FE(角色) > 服务初始化”,修改“enable_workload_group_task_sched”参数值为“true”,单击“保存”保存配置。单击“实例”,勾选受影响的FE实例,选择“更多 > 滚动重启实例”,输入当前用户密码并单击“确定”,滚动重启FE实例使配置生效。

还需在“user.config.customized.configs”中新增参数为该租户关联的用户设置调度任务的优先级、权重或容量:

  1. 在FusionInsight Manager界面,选择“租户资源”,在租户资源管理页面单击对应的租户名称,在概述页面查看并记录“调度策略”的值,例如为“公平调度器”。
  2. 选择“集群 > 服务 > Doris > 配置 > 全部配置”,在左侧导航栏选择“Doris(服务) > 自定义”,根据1查看到的调度策略,在“user.config.customized.configs”中新增对应参数为该租户关联的用户设置调度任务的优先级、权重或容量,并单击“保存”保存配置,参数配置会在用户下一次提交任务时生效,无需重启服务:
    • 队列调度器只需要设置优先级,即新增“allocations.Doris用户名.priority”参数,取值范围为1~100。默认值为1,值为整数类型,如果设置的值不是整数或者不在取值范围内,将自动使用默认值。

      还可在左侧导航栏选择“BE(角色) > 服务初始化”,配置以下参数,保存并重启Doris服务:

      • query_aging_enable:在队列调度策略下,是否在一定时间后给低优先级任务所属的用户的优先级加1,默认值为“false”。
      • query_aging_threshold_in_sec:在队列调度策略下,每隔多长时间给用户的优先级加1,单位是秒,默认值为5秒。
    • 公平调度器只需要设置权重,即新增“allocations.Doris用户名.weight”参数,取值范围为1~10。默认值为1,值为整数类型,如果设置的值不是整数或者不在取值范围内,将自动使用默认值。
    • 容量调度器只需要设置容量,即新增“allocations.Doris用户名.capacity”参数,取值范围为1~100。默认值为100,值为整数类型,如果设置的值不是整数或者不在取值范围内,将自动使用默认值。
说明:
  • 一个Doris用户可以绑定多个租户,但一个SQL任务只能运行在一个租户上。
  • “enable_workload_group_task_sched”为“false”时,对公平调度器配置“allocations.Doris用户名.weight”参数设置权重,设置的值不会生效,Doris侧对所有用户的权重恒为“1”。

CPU限额占比

  • 关闭CPU硬隔离功能:-1
  • 开启CPU硬隔离功能:1%~90%

MRS 3.6.0-LTS及之后版本,用于设置租户最大占用CPU的百分比。

  • 如果开启CPU硬隔离,系统检测到租户CPU使用超出限制后将立即取消租户组内CPU占用最大的若干个任务。
  • 如果关闭CPU硬隔离,若该系统有空闲CPU资源则该租户在超出CPU的限制后可继续使用系统CPU;只有当集群资源紧张时,才取消租户组内CPU占用最大的若干任务。
说明:
  • 可登录FusionInsight Manager界面,选择“集群 > 服务 > Doris > 配置”,在搜索框中搜索“enable_cpu_hard_limit”参数,修改参数值为“true”开启CPU硬隔离功能,保存配置并滚动重启受影响的FE实例。
  • 当CPU硬隔离功能开启后,CPU限额占比需要设置为大于0且小于等于90的整数类型值,CPU硬限才会生效。

相关文档