StarRocks资源隔离
StarRocks资源隔离用于在同一集群内对不同业务、不同用户或不同类型的查询进行计算资源的隔离,避免相互抢占资源导致的性能波动。StarRocks提供两种资源隔离方式:基于存算分离架构的Multi-Warehouse(多仓)模式实现计算资源的物理隔离,以及基于Resource Group(资源组)的逻辑隔离。本文介绍如何在BMR StarRocks集群中使用这两种资源隔离能力。
功能概述
在数据仓库的实际使用中,常常存在多个业务共用一个集群的情况,例如实时写入、报表查询、即席分析等负载并存。若不加隔离,大查询可能占满计算资源,影响其他关键业务的稳定性。StarRocks提供两种粒度的资源隔离方式:
- Multi-Warehouse(多仓)模式:适用于存算分离架构,通过创建多个Warehouse将计算节点(CN)划分为相互独立的资源组,不同Warehouse之间实现计算资源的物理隔离。适合需要强隔离的多业务场景。
- Resource Group(资源组)模式:通过资源组对CPU、内存、并发等资源进行配额划分,并按用户、库、查询类型等条件将查询路由到对应资源组,实现同一Warehouse内的逻辑隔离。适合在同一计算资源池内进行精细化配额管理的场景。
两种方式可以配合使用:先用Multi-Warehouse对计算节点做物理隔离,再在Warehouse内部用Resource Group做进一步的逻辑配额划分。
说明:Multi-Warehouse模式依赖StarRocks存算分离架构(计算节点为CN,数据存储于对象存储)。存算一体架构(BE节点)请使用Resource Group模式进行资源隔离。
前提条件
- 已创建BMR StarRocks集群,且集群状态为运行中。
- 使用Multi-Warehouse模式时,集群为存算分离架构。
- 已通过SQL客户端(如MySQL客户端)连接到StarRocks。
使用Multi-Warehouse模式
Warehouse是存算分离架构下计算资源的隔离单元,每个Warehouse对应一组独立的计算节点,不同Warehouse之间计算资源互不影响。集群默认存在一个default_warehouse。
创建Warehouse
创建一个新的Warehouse:
1CREATE WAREHOUSE wh_report COMMENT '报表业务仓';
查看Warehouse列表
查看当前集群下所有的Warehouse及其状态:
1SHOW WAREHOUSES;
Warehouse状态为AVAILABLE时表示可正常使用。
切换并使用Warehouse
在当前会话中切换到指定Warehouse,之后该会话提交的查询将在该Warehouse的计算节点上执行:
1SET warehouse = wh_report;
查看当前会话使用的Warehouse:
1SELECT CURRENT_WAREHOUSE();
切换Warehouse后,同一张表在不同Warehouse下执行的查询将使用各自独立的计算资源,从而实现业务间的物理隔离。例如报表业务使用wh_report,即席分析使用另一个Warehouse,两者互不抢占资源。
扩容实例并指定到指定Warehouse
当某个Warehouse的计算能力不足时,可通过BMR扩容CN节点,并将新节点分配到目标Warehouse。
新扩容的CN节点默认归属default_warehouse,需要通过SQL将其从默认Warehouse摘除后再加入目标Warehouse。
- 在BMR控制台完成CN节点扩容。选择产品服务>数据分析>MapReduce>集群进入集群详情页面,通过节点管理完成CN节点的扩容。扩容完成后,新的CN节点会自动注册到集群,并默认归属
default_warehouse。 - 查看当前Warehouse列表,确认新节点已注册:
1SHOW WAREHOUSES;
- 将新节点从
default_warehouse中摘除:
1ALTER SYSTEM DROP COMPUTE NODE '<cn_host>:9050' FROM WAREHOUSE default_warehouse;
- 将新节点加入目标Warehouse:
1ALTER SYSTEM ADD COMPUTE NODE '<cn_host>:9050' INTO WAREHOUSE wh_report;
- 切换到目标Warehouse并验证查询在该Warehouse下执行:
1SET warehouse = wh_report;
2SHOW VARIABLES LIKE 'warehouse';
其中<cn_host>为扩容后CN节点的主机地址,9050为CN节点的默认端口。完成上述操作后,新扩容的计算资源即归属到指定Warehouse,用于承载该Warehouse的查询负载。
说明:若需要为多个新节点指定Warehouse,按上述方式对每个节点分别执行DROP和ADD操作即可。
使用Resource Group模式
Resource Group(资源组)通过对CPU、内存、并发数等资源进行配额划分,并结合分类器(Classifier)将符合条件的查询路由到对应资源组,实现同一计算资源池内的逻辑隔离。
创建资源组
创建资源组时,通过TO子句定义分类条件(如用户、数据库、查询类型),通过WITH子句设置资源配额:
1CREATE RESOURCE GROUP rg_report
2TO (user='report_user', db='report_db', query_type in ('select'))
3WITH (
4 'cpu_weight' = '1',
5 'mem_limit' = '20%',
6 'concurrency_limit' = '2',
7 'type' = 'normal'
8);
表一 资源组主要配额参数说明
| 参数 | 说明 |
|---|---|
| cpu_weight | 资源组在单个计算节点上的CPU调度权重,权重越高可获得的CPU时间越多。 |
| mem_limit | 资源组可使用的内存占比上限。 |
| concurrency_limit | 资源组的并发查询数上限,超出后新查询将进入排队。 |
| type | 资源组类型,普通资源组为normal。 |
分类条件说明:TO子句中可通过user(用户)、db(数据库)、query_type(查询类型,如select)等条件定义查询的匹配规则,符合条件的查询将自动路由到该资源组。
指定会话使用的资源组
除通过分类器自动路由外,也可在会话中显式指定使用的资源组:
1SET resource_group = rg_report;
查看资源组
查看资源组的配额定义:
1SHOW RESOURCE GROUP rg_report;
查看资源组的实时使用情况:
1SHOW USAGE RESOURCE GROUP rg_report;
当资源组的并发查询数超过concurrency_limit时,超出的查询会进入排队,从而保证该资源组不会占用超过配额的资源,实现查询之间的资源隔离。
两种模式的选择建议
表二 资源隔离模式对比
| 对比项 | Multi-Warehouse模式 | Resource Group模式 |
|---|---|---|
| 隔离粒度 | 计算节点级别的物理隔离 | 同一计算资源池内的逻辑配额隔离 |
| 适用架构 | 存算分离架构(CN节点) | 存算一体和存算分离架构均可 |
| 隔离强度 | 强隔离,不同Warehouse资源完全独立 | 逻辑隔离,共享物理资源按配额划分 |
| 典型场景 | 多业务、多租户强隔离,需独立扩缩容 | 同一业务内不同用户/查询类型的配额管理 |
- 需要业务之间强隔离、可独立扩缩容计算资源时,优先使用Multi-Warehouse模式。
- 在同一Warehouse内需要对不同用户或查询类型做精细化配额管理时,使用Resource Group模式。
- 两者可组合使用:外层用Warehouse做物理隔离,内层用Resource Group做配额细分。
注意事项
- Multi-Warehouse模式依赖存算分离架构,存算一体架构请使用Resource Group模式。
- 新扩容的CN节点默认归属
default_warehouse,需手动执行DROP和ADD操作迁移到目标Warehouse。 - 资源组的并发超过
concurrency_limit时查询将排队,请结合业务并发量合理设置配额。 - 通过审计日志中的
Warehouse和ResourceGroup字段可以确认查询实际使用的Warehouse和资源组,便于验证隔离策略是否生效。
评价此篇文章
