Explicação detalhada do isolamento de recursos do Apache Doris

1. Breve introdução

Principalmente para nós BE

O principal objetivo do esquema de multilocação e isolamento de recursos do Doris é reduzir a interferência mútua quando vários usuários realizam operações de dados no mesmo cluster Doris e alocar recursos do cluster para cada usuário de maneira mais razoável.
insira a descrição da imagem aqui

2. Teste a experiência

2.1 Etiqueta de configuração do nó BE

Nota: Um BE suporta apenas a configuração de um Tag.

Os nós BE em um cluster Doris podem ser marcados (Tag), e os nós BE com a mesma tag formam um grupo de recursos (Grupo de Recursos); o grupo de recursos pode ser considerado como uma unidade de gerenciamento para armazenamento e computação de dados.

2.1.1 Antes do agrupamento

insira a descrição da imagem aqui

2.1.2 Iniciar agrupamento

-- 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 Após agrupamento

insira a descrição da imagem aqui

2.2 Distribuindo dados de acordo com grupos de recursos

Após a divisão dos grupos de recursos, diferentes cópias dos dados do usuário poderão ser distribuídas em diferentes grupos de recursos.

2.2.1 Crie uma tabela de teste

-- 以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 dados de teste

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

2.3 Controle de autoridade de uso de recursos do usuário

Ao definir a permissão de uso de recursos do usuário, a consulta de um determinado usuário só pode ser executada usando os nós do grupo de recursos especificado.

2.3.1 Crie um usuário de teste

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

2.3.2 Usuários 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'@'%';

insira a descrição da imagem aqui

2.3.3 Configurando permissões de uso de recursos do usuário

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 Permissões de autenticação

  1. Preparar consulta de teste 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

A partir do ícone [ser scan rows] no grafana, pode-se ver claramente que os recursos utilizados por cada usuário possuem isolamento de memória correspondente com base nas configurações.

insira a descrição da imagem aqui

2.4 Verificação de permissão de leitura e gravação

Somente leitura sem gravação ou somente gravação sem verificação de permissão de leitura

-- 用户创建
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'@'%';

insira a descrição da imagem aqui
insira a descrição da imagem aqui

3. Otimize a configuração

A abordagem do grupo de recursos visa isolar e limitar os recursos no nível do nó.
No grupo de recursos, a preempção de recursos ainda pode ocorrer; a função de limite de recursos pode ser usada para consulta única

3.1 Limites de Memória

-- 设置会话变量 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 Limite 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';

Quatro. Resumo

  1. O isolamento físico dos recursos de consulta pode ser alcançado para os usuários e o isolamento de recursos não é necessário para gravação
  2. Você pode controlar a autoridade do banco de dados e a granularidade da tabela para os usuários, consulte gerenciamento de contas de usuários

Acho que você gosta

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