O plug-in aliyun-qos é um recurso de limitação de leitura e gravação no nível do cluster desenvolvido pela equipe do Alibaba Cloud Elasticsearch. Quando os serviços upstream não conseguem controlar o tráfego, utilize o plug-in aliyun-qos para limitar índices específicos com base na prioridade do negócio. Essa abordagem mantém o tráfego sob controle e garante a estabilidade do seu cluster Elasticsearch.
Precauções
O plug-in
aliyun-qosvem pré-instalado e não pode ser desinstalado. Seu recurso de limitação fica desativado por padrão. O objetivo do plug-in é proteger a estabilidade do cluster, e não medir com precisão o tráfego de leitura e gravação.-
Versão do plug-in: antes de usar o plug-in
aliyun-qos, certifique-se de que ele esteja atualizado para a versão mais recente. Faça login no console Kibana e executeGET /_cat/plugins?vpara verificar a versão do plug-in.A versão do plug-in segue o formato
<versão do cluster>_ali<número da versão interna>, por exemplo,7.10.0_ali1.6.0.2ou8.17.0_ali2.2.0.4.1. Caso a versão do plug-in não seja a mais recente, consulte os métodos abaixo para atualizá-lo:Para clusters V7.10: no console, atualize o kernel para a versão 1.6.0. Para obter mais informações, consulte Atualizar versões do cluster.
Para outras versões de cluster: abra um ticket junto ao Suporte do Alibaba Cloud para atualizar o plug-in. Após a atualização, reinicie manualmente o cluster Elasticsearch para que a nova versão entre em vigor.
Se a versão do plug-in for anterior à rc4, ocorrerá um erro
unsupported_operation_exception. A atualização do plug-inaliyun-qossó é possível em clusters executando a versão V6.7.0 ou superior. Clusters com versões anteriores devem ser atualizados primeiro para V6.7.0 ou superior.
Avaliar limiares
O plug-in aliyun-qos realiza a limitação no nível do cluster. Para minimizar a sobrecarga de desempenho, ele não mede com precisão o tráfego de leitura e gravação em todos os nós; portanto, o tráfego real pode diferir do tráfego medido. Antes de utilizar o plug-in, avalie o limiar de limitação seguindo as regras abaixo:
-
Solicitações de consulta
Limiar de limitação para solicitações de consulta = QPS (consultas por segundo) de ponta a ponta do cliente para o Elasticsearch
O QPS de ponta a ponta refere-se apenas ao número de solicitações de consulta que chegam aos nós de cliente por segundo.
-
Solicitações de gravação
A regra para calcular o limiar de limitação de solicitações de gravação é semelhante à das solicitações de consulta, mas exige ajuste conforme o número de shards de réplica.
Por exemplo, considere um cluster com dois nós de dados e um índice. Esse índice possui um shard primário e um shard de réplica. Cada operação de gravação envia 10 MB de dados. Como existe um shard de réplica, 10 MB de dados são gravados em cada nó de dados. Além disso, tarefas internas do X-Pack, como Monitor, Audit e Watcher, também consomem throughput de gravação. Reserve capacidade para esse tráfego ao definir o limiar.
Ativar a limitação
O recurso de limitação do plug-in aliyun-qos vem desativado por padrão. É necessário ativá-lo antes do uso. O comando para ativar o recurso varia conforme a versão do plug-in.
|
Versão V7.10 mais recente |
Outras versões |
|
|
Desativar a limitação
Desative o recurso de limitação definindo o parâmetro limiter como false ou null. O comando varia conforme a versão.
|
Método |
Versão V7.10 mais recente |
Outras versões |
|
Definir o parâmetro limiter como |
|
|
|
Definir o parâmetro limiter como |
|
|
Configurar um limitador (versão V7.10 mais recente)
As configurações de limitador a seguir aplicam-se exclusivamente ao plug-in aliyun-qos para clusters V7.10.
Uma configuração de limitador consiste em duas partes: limiters e tags. A seção tags define o escopo dos limites de recursos, enquanto a seção limiters especifica o tipo de limitação e o limiar. Os limitadores podem ser padrão ou específicos. Crie um limitador padrão definindo um valor de tag como **. Por exemplo, defina um throughput padrão para cada shard ou um QPS padrão para cada aplicação. Quando uma solicitação excede um limite, o Elasticsearch rejeita as solicitações subsequentes.
PUT /_qos/limiter/<limiterName>
{
"limiters": {
${action}.${limiter_type}:${threshold}
},
"tags": {
${tagName}:${tagValue}
},
"priority":0,
"params":{
"watchMode":true
}
}
|
Parâmetro |
Descrição |
Valor |
|
action |
A ação a ser limitada. Utilizada para restringir diferentes tipos de solicitações. |
|
|
limiter_type |
O tipo de limitação. Três categorias são suportadas: taxa, concorrência e limites por solicitação. |
|
|
threshold |
O limiar de limitação. |
Um número inteiro maior ou igual a -1. Alguns tipos aceitam strings com unidades. Para mais detalhes, consulte a descrição de |
|
tagName |
O nome da tag. |
|
|
tagValue |
O valor da tag. |
Uma string ou um array de strings. Ao usar um array, a tag corresponde a qualquer valor contido nele. São suportadas correspondência exata, correspondência por prefixo com curinga e todos os valores. Exemplos:
|
|
priority |
A prioridade do limitador. |
Um número inteiro. Valor padrão: 0. Um valor maior indica maior prioridade. Quando uma solicitação corresponde a vários limitadores padrão, apenas aquele com a maior prioridade entra em vigor. |
|
params |
Parâmetros avançados. |
|
Exemplos de configuração de limitador
Definir limitação de QPS para consultas
Limite o QPS de consultas em um nó de cliente definindo um limiar para um índice. Quando o número de solicitações de consulta por segundo ultrapassa o limiar, o Elasticsearch rejeita as solicitações subsequentes.
Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.
|
Ações |
Versão V7.10 mais recente |
Outras versões |
|
Definir limitação de QPS de consulta para um único índice |
|
|
|
Definir limitação de QPS de consulta para índices com um prefixo de nome específico |
|
|
|
Definir limitação de QPS de consulta individualmente para cada índice |
|
Não suportado. |
|
Definir um limite total de QPS de consulta para todos os índices |
|
|
É possível definir várias regras. A limitação é acionada se uma solicitação corresponder a qualquer uma das regras.
Quando o QPS de consulta excede o limite configurado, o sistema retorna uma mensagem de erro. A mensagem varia conforme a versão:
-
Versão V7.10 mais recente
{ "error": { "root_cause": [ { "type": "status_exception", "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]" } ], "type": "status_exception", "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]" }, "status": 429 } -
Outras versões
{ "error": { "root_cause": [ { "type": "rate_limited_exception", "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]" } ], "type": "rate_limited_exception", "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]" }, "status": 429 }
Definir limitação de TPS para gravações
Restrinja o número de solicitações de gravação por segundo recebidas por um nó de cliente definindo um limiar de TPS (transações por segundo). Quando o volume de solicitações de gravação por segundo supera o limiar, o Elasticsearch rejeita as solicitações seguintes.
Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.
|
Versão V7.10 mais recente |
Outras versões |
|
Não suportado |
Definir limitação de throughput para solicitações Bulk
Controle o throughput de gravação para solicitações da API Bulk em um nó de cliente estabelecendo um limite em bytes por segundo. Se o throughput de gravação ultrapassar esse limite, o Elasticsearch rejeitará as solicitações subsequentes.
Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.
|
Versão V7.10 mais recente |
Outras versões |
|
|
Várias regras podem ser definidas. A limitação ocorre caso uma solicitação corresponda a qualquer regra configurada.
Definir limitação de tamanho de solicitação para requisições Bulk
Estabeleça um limite para o tamanho de uma única solicitação da API Bulk em um nó de cliente. Caso uma solicitação exceda esse limite de tamanho, o Elasticsearch a rejeitará.
Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.
|
Versão V7.10 mais recente |
Outras versões |
|
|
Múltiplas regras são permitidas. O sistema aciona a limitação se uma solicitação atender a qualquer uma delas.
Se o tamanho de uma única solicitação de gravação superar o limite configurado, o sistema retornará uma mensagem de erro. Essa mensagem difere entre as versões:
-
Versão V7.10 mais recente
{ "error" : { "root_cause" : [ { "type" : "status_exception", "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]" } ], "type" : "status_exception", "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]" }, "status" : 400 } -
Outras versões
{ "error": { "root_cause": [ { "type": "rate_limited_exception", "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]" } ], "type": "rate_limited_exception", "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]" }, "status": 413 }
Definir limitação de concorrência para consultas a shards
Reduza a carga no cluster definindo o número de consultas simultâneas a shards. Os valores para index e index_patterns podem ser nomes completos de índices ou nomes com curinga. O comando varia conforme a versão.
|
Versão V7.10 mais recente |
Outras versões |
|
Não suportado |
É permitido definir diversas regras. A limitação é disparada sempre que uma solicitação corresponder a qualquer regra.
Definir múltiplas configurações de limitador
Combine vários limites dentro de uma única configuração de limitador. Os valores para index e index_patterns aceitam nomes completos de índices ou padrões com curinga. O comando depende da versão utilizada.
|
Versão V7.10 mais recente |
Outras versões |
|
Não suportado |
Diversas regras podem ser criadas. O sistema aplica a limitação assim que uma solicitação coincidir com qualquer uma das regras.
Obter configurações de limitador
O comando para obter configurações de limitador varia conforme a versão.
|
Ações |
Versão V7.10 mais recente |
Outras versões |
|
Obter todas as configurações de limitador |
|
|
|
Obter uma única configuração de limitador especificada |
|
|
|
Obter múltiplas configurações de limitador especificadas. Separe os nomes dos limitadores com vírgulas (,). Curingas não são suportados. |
|
|
Excluir configurações de limitador
O comando para excluir configurações de limitador varia conforme a versão.
|
Ações |
Versão V7.10 mais recente |
Outras versões |
|
Excluir uma única configuração de limitador especificada |
|
|
|
Excluir múltiplas configurações de limitador especificadas. Separe os nomes dos limitadores com vírgulas (,). Curingas não são suportados. |
|
|
Perguntas frequentes
P: Como obtenho métricas de monitoramento relacionadas à limitação?
R: Utilize as seguintes APIs:
-
Obter dados atuais de métricas
-
Obter dados atuais de todas as métricas
GET /_qos/limiter/nodes/stats -
Obter dados atuais de métricas para um nó específico
GET /_qos/limiter/nodes/{nodeId}/stats -
Obter dados atuais de métricas para um nó e limitador específicos
GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
-
-
Obter dados históricos de métricas
-
Obter dados históricos de todas as métricas
GET /_qos/limiter/metric -
Obter dados históricos de métricas para um limitador específico
GET /_qos/limiter/metric/{limiterId}
-
Observações sobre atualizações do plug-in
Ao atualizar o plug-in aliyun-qos para a versão mais recente, observe os pontos abaixo:
Devido às diferenças no mecanismo de implementação entre versões antigas e novas, o recurso de limitação pode ficar temporariamente indisponível durante o processo de atualização. Ele é restaurado automaticamente após a atualização do plug-in no nó mestre.
-
Durante o processo de conversão de dados, alguns limitadores podem falhar na conversão do formato antigo. Em caso de falha, execute o comando abaixo para tentar novamente. Se o comando retornar um erro, execute-o várias vezes até que
hasErrorsejafalse.POST /_qos/limiter/ops/upgradeCaso o comando acima retorne uma mensagem de erro (como
unknown action), isso indica que o cluster não possui um limitador legado. Ignore a mensagem.