配置StarRocks租户
StarRocks的多租户管理,目的是为了多个用户在同一StarRocks集群内进行数据操作时,减少相互之间的干扰,能够将集群资源更合理的分配给各用户。且集成了租户生命周期管理、租户资源配置和租户资源使用统计等功能,为企业提供了成熟的多租户管理模型,实现集中式的租户和业务管理,减少对集群资源的消耗。
- 资源组:通过将 BE 节点划分为若干个资源组 (resource group),系统在执行相应资源组的查询任务时,会按照为该资源组划分的资源配额(CPU 及内存)分配查询资源。
- 分类器:您可以为每个资源组关联一个或多个分类器。系统将会根据所有分类器中设置的条件,为每个查询任务选择一个匹配度最高的分类器,并根据生效的分类器所属的资源组为该查询任务分配资源。
使用限制
- 新建用户默认绑定默认租户normal。
- 一个用户只能绑定一个租户。
- 一个租户可以被多个用户绑定。
- 最多只能创建一个SHORT_QUERY资源组。
- 租户NORMAL和SHOUT_QUERY,仅支持StarRocks 3.2.8版本。
- 租户名称不可修改。
- 租户管理目前只支持StarRocks存算一体集群。
- 资源组的user字段只能包含数字、字母和下划线,请使用纯用户名,不支持username@host格式的用户名。
前提条件
- 已创建StarRocks集群,集群运行正常。
- 已安装MySQL户端。
新建StarRocks租户
- 登录表格存储服务控制台。
- 选择目标集群,单击“集群名称 > 租户管理”进入租户管理页面。
- 单击页面右上角“新建租户”,弹出新建租户页面,参照表1为租户配置属性。
表1 新建租户参数描述 参数
取值范围
描述
租户名
-
指定当前的租户名称。以字母开头,长度为4-64位,只能输入大小写字母、数字和下划线。
CPU限额
[1,4]
该资源组在当前BE节点可使用的CPU核数软上限,实际使用的CPU核数会根据节点资源空闲程度按比例弹性伸缩。
内存限额
1~99
该资源组在当前BE节点可使用于查询的内存(query_pool)占总内存的百分比(%)。
并发数
-
资源组中并发查询数的上限,用以防止并发查询提交过多而导致的过载。
租户类型
-
- 租户类型有NORMAL和SHOUT_QUERY,仅支持StarRocks 3.2.8版本。
- 默认租户,仅支持StarRocks 3.3.18版本。
- default_wg:如果普通查询受资源组管理,但是没有匹配到分类器,系统将默认为其分配default_wg。
- default_mv_wg:如果创建异步物化视图时没有通过resource_group属性指定资源组,该物化视图刷新时,系统将默认为其分配default_mv_wg。
分类器
-
可以为每个资源组关联一个或多个分类器。系统将会根据所有分类器中设置的条件,为每个查询任务选择一个匹配度最高的分类器,并根据生效的分类器所属的资源组为该查询任务分配资源。
- 角色:分类器中的用户所绑定的角色。请参考步骤一:创建StarRocks角色。
- 用户:分类器中的用户。请参考步骤二:创建StarRocks用户。
- 数据库:查询所访问的数据库。
- 查询类型:查询类型包括SELECT、INSERT。
- 参数配置后单击“保存”,确认新增分类器信息后,单击“确定”租户创建完成。
如果添加多条,单击“保存并继续添加”,分类器添加完成后单击“保存”,确认新增分类器信息后,单击“确定”租户创建完成。
访问租户资源匹配规则
- 匹配度计算方式:
- 如果user一致,则该分类器匹配度增加1。
- 如果role一致,则该分类器匹配度增加1。
- 如果query_type一致,则该分类器匹配度增加1 + 1/分类器的query_type数量。
- 如果查询的db匹配,则匹配度加10。
- 示例1:多个与查询任务匹配的分类器中,分类器的条件数量越多,匹配度越高。
- 示例2:如果分类器的条件数量相等,则分类器的条件描述越精确,其匹配度越高。
分类器C限定的查询类型为“select”,D限定的查询类型为“select”、“insert”,C限定的查询类型数量更少,所以C的匹配度比D高。
classifier C (user='admin', query_type in ('select')) classifier D (user='admin', query_type in ('insert','select')) - 示例3:如果多个分类器的匹配度相同,那么会随机选择其中一个分类器。
如果一个查询同时查询了db1和db2,并且命中的分类器中E和F的匹配度最高,那么会从E和F中随机选择一个。
classifier E (db='db1') classifier F (db='db2')
StarRocks租户常用命令
- 创建租户和分类器。
CREATE RESOURCE GROUP group_name TO ( user='string', role='string', query_type in ('select'), db='db1' ) -- 创建分类器,多个分类器间用英文逗号(,)分隔。 WITH ( "cpu_core_limit" = "INT", "mem_limit" = "m%", "concurrency_limit" = "INT", "type" = "str" -- 资源组的类型,取值为 normal 或 short_query。 ); - user:分类器中用户名。
- role:分类器中用户绑定的角色。
- query_type:查询类型包括select、insert。
- db:查询所访问的数据库。
-
CREATE RESOURCE GROUP group_name1 TO ( user='admin', role='test_role', query_type in ('select'), db='sys' ) WITH ( "cpu_core_limit" = "2", "mem_limit" = "20%", "big_query_cpu_second_limit" = "100", "big_query_scan_rows_limit" = "1000", "type" = "normal" -- 资源组的类型,取值为 normal 或 short_query。 );- cpu_core_limit:使用的CPU核心数。
- mem_limit:最多使用系统总内存的20%。
- big_query_cpu_second_limit:大查询最多使用100CPU秒。
- big_query_scan_rows_limit:大查询最多扫描1000行数据。
- 指定资源组。
除通过分类器自动指定资源组外,也可以通过会话变量直接指定资源组。
SET resource_group = 'group_name';
- 查看资源组和分类器。
- 查询所有资源组和分类器。
SHOW RESOURCE GROUPS ALL;
- 查询和当前用户匹配的资源组和分类器。
SHOW RESOURCE GROUPS;
- 查询指定的资源组和分类器。
SHOW RESOURCE GROUP group_name;
- 查询所有资源组和分类器。
- 管理资源组配额和分类器。
- 为已有的资源修改资源配额。
ALTER RESOURCE GROUP group_name1 WITH ( 'cpu_core_limit' = '3', 'mem_limit' = '30%' ); - 删除指定资源组。
DROP RESOURCE GROUP group_name1;
- 添加新的分类器。
ALTER RESOURCE GROUP group_name1 ADD (user='user1', role='test_role', query_type in ('select')); - 删除指定的分类器。
ALTER RESOURCE GROUP <group_name> DROP (CLASSIFIER_ID_1, CLASSIFIER_ID_2, ...);
示例:
ALTER RESOURCE GROUP group_name1 DROP (51369);
- 删除所有分类器。
ALTER RESOURCE GROUP <group_name> DROP ALL;
- 为已有的资源修改资源配额。