Explicación detallada del aislamiento de recursos de Apache Doris

1. Breve introducción

Principalmente para nodos BE

El objetivo principal del esquema de aislamiento de recursos y arrendamiento múltiple de Doris es reducir la interferencia mutua cuando varios usuarios realizan operaciones de datos en el mismo clúster de Doris y asignar recursos del clúster a cada usuario de manera más razonable.
inserte la descripción de la imagen aquí

2. Experiencia de prueba

2.1 Etiqueta de configuración del nodo BE

Nota: Un BE solo admite la configuración de una etiqueta.

Los nodos BE en un clúster Doris se pueden etiquetar (Etiqueta), y los nodos BE con la misma etiqueta forman un grupo de recursos (Grupo de recursos); el grupo de recursos puede considerarse como una unidad de gestión para el almacenamiento de datos y la informática.

2.1.1 Antes de agrupar

inserte la descripción de la imagen aquí

2.1.2 Iniciar agrupación

-- 3个节点划分成2个资源组
alter system modify backend "be01:9050" set ("tag.location" = "group_a");
alter system modify backend "be02:9050" set ("tag.location" = "group_b");
alter system modify backend "be03:9050" set ("tag.location" = "group_c");

2.1.3 Después de agrupar

inserte la descripción de la imagen aquí

2.2 Distribución de datos según grupos de recursos

Una vez divididos los grupos de recursos, se pueden distribuir diferentes copias de los datos del usuario en diferentes grupos de recursos.

2.2.1 Crear una tabla de prueba

-- 以SQL99其中一张维表为例,每个资源组放一个副本
create table tpcds.catalog_returns_duplicate
(
    cr_item_sk                integer               not null,
    cr_order_number           integer               not null,
    cr_returned_date_sk       integer                       ,
    cr_returned_time_sk       integer                       ,
    cr_ship_date_sk           integer                       ,
    cr_refunded_customer_sk   integer                       ,
    cr_refunded_cdemo_sk      integer                       ,
    cr_refunded_hdemo_sk      integer                       ,
    cr_refunded_addr_sk       integer                       ,
    cr_returning_customer_sk  integer                       ,
    cr_returning_cdemo_sk     integer                       ,
    cr_returning_hdemo_sk     integer                       ,
    cr_returning_addr_sk      integer                       ,
    cr_call_center_sk         integer                       ,
    cr_catalog_page_sk        integer                       ,
    cr_ship_mode_sk           integer                       ,
    cr_warehouse_sk           integer                       ,--    cr_reason_sk              integer                       ,
    cr_return_quantity        integer                       ,
    cr_return_amount          decimal(7,2)                  ,
    cr_return_tax             decimal(7,2)                  ,
    cr_return_amt_inc_tax     decimal(7,2)                  ,
    cr_fee                    decimal(7,2)                  ,
    cr_return_ship_cost       decimal(7,2)                  ,
    cr_refunded_cash          decimal(7,2)                  ,
    cr_reversed_charge        decimal(7,2)                  ,
    cr_store_credit           decimal(7,2)                  ,
    cr_net_loss               decimal(7,2)                 
)ENGINE=olap 
DUPLICATE KEY(`cr_item_sk`,`cr_order_number`) 
DISTRIBUTED BY HASH(`cr_item_sk`,`cr_order_number`) BUCKETS 10 
PROPERTIES("replication_allocation"
    = "tag.location.group_a:1, tag.location.group_b:1, tag.location.group_c:1");

2.2.2 Importar datos de prueba

-- 随机测试写入几条数据验证
insert into tpcds.catalog_returns_duplicate values
(.....)

2.3 Control de autoridad de uso de recursos del usuario

Al establecer el permiso de uso de recursos del usuario, la consulta de un determinado usuario solo se puede ejecutar utilizando los nodos en el grupo de recursos especificado.

2.3.1 Crear un usuario de prueba

-- 用户名@用户端连接所在的主机地址(测试不设置密码)
-- 默认为 '%',即表示该用户可以从任意host连接到 DorisDB
CREATE USER 't_rg_user01'@'%';
CREATE USER 't_rg_user02'@'%';
CREATE USER 't_rg_user03'@'%'; 

2.3.2 Usuarios autorizados

-- GRANT授权(授予所有库和表的权限给用户)
GRANT SELECT_PRIV ON *.* TO 't_rg_user01'@'%';
GRANT SELECT_PRIV ON *.* TO 't_rg_user02'@'%';
GRANT SELECT_PRIV ON *.* TO 't_rg_user03'@'%';

inserte la descripción de la imagen aquí

2.3.3 Configuración de permisos de uso de recursos del usuario

set property for 't_rg_user01' 'resource_tags.location' = 'group_a';
set property for 't_rg_user02' 'resource_tags.location' = 'group_b';
set property for 't_rg_user03' 'resource_tags.location' = 'group_a, group_b, group_c';

2.3.4 Autoridad de autenticación

  1. Preparar consulta de prueba SQL
select * from (
select * from catalog_returns_duplicate crd0402
) t1
JOIN
(
select * from catalog_returns_duplicate crd0402
) t2 on t1.cr_item_sk = t2.cr_item_sk
JOIN
(
select * from catalog_returns_duplicate crd0402
) t3 on t2.cr_item_sk = t3.cr_item_sk
JOIN
(
select distinct cr_item_sk from catalog_returns_duplicate crd0402
) t4 on t3.cr_item_sk = t4.cr_item_sk
  1. iniciar consulta

Desde el ícono [be scan rows] en grafana, se puede ver claramente que los recursos utilizados por cada usuario tienen el aislamiento de memoria correspondiente según la configuración.

inserte la descripción de la imagen aquí

2.4 Verificación de permisos de lectura y escritura

Solo lectura sin escritura o solo escritura sin verificación de permiso de lectura

-- 用户创建
CREATE USER 't_only_read_user'@'%';
CREATE USER 't_only_write_user'@'%';

-- 对指定的库或表的读取权限
GRANT SELECT_PRIV ON *.* TO 't_only_read_user'@'%';

-- 对指定的库或表的导入权限
GRANT LOAD_PRIV ON *.* TO 't_only_write_user'@'%';

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3. Optimizar la configuración

El enfoque del grupo de recursos consiste en aislar y limitar los recursos a nivel de nodo.
En el grupo de recursos, la preferencia de recursos aún puede ocurrir; la función de límite de recursos se puede usar para consultas únicas

3.1 Límites de memoria

-- 设置会话变量 exec_mem_limit。则之后该会话内(连接内)的所有查询都使用这个内存限制。
set exec_mem_limit=1G;

-- 设置全局变量 exec_mem_limit。则之后所有新会话(新连接)的所有查询都使用这个内存限制。
set global exec_mem_limit=1G;

-- 在 SQL 中设置变量 exec_mem_limit。则该变量仅影响这个 SQL。
select /*+ SET_VAR(exec_mem_limit=1G) */ id, name from tbl where xxx;

3.2 límite de CPU

-- 设置会话变量 cpu_resource_limit。则之后该会话内(连接内)的所有查询都使用这个CPU限制。
set cpu_resource_limit = 2

-- 设置用户的属性 cpu_resource_limit,则所有该用户的查询情况都使用这个CPU限制。该属性的优先级高于会话变量 cpu_resource_limit
set property for 'user1' 'cpu_resource_limit' = '3';

Cuatro Resumen

  1. Se puede lograr el aislamiento físico de los recursos de consulta para los usuarios , y no es necesario el aislamiento de recursos para la escritura.
  2. Puede controlar los permisos de la granularidad de la tabla de la base de datos para los usuarios; consulte administración de cuentas de usuario

Supongo que te gusta

Origin blog.csdn.net/ith321/article/details/132105947
Recomendado
Clasificación