Como soluciono problemas de fragmentos não atribuídos no meu cluster do OpenSearch Service?

7 minuto de leitura
0

Tenho fragmentos não atribuídos em meu cluster do Amazon OpenSearch Service.

Breve descrição

Você pode ter fragmentos não atribuídos em seu serviço OpenSearch devido a:

  • Nós de cluster com falha
  • Contagem de réplicas mal configurada
  • O fragmento não conseguiu obter um bloqueio na memória
  • Limite de fragmentos excedido
  • Problemas de espaço em disco
  • Uso de disco distorcido e estratégia de fragmentação
  • Erro ClusterBlockException

Resolução

Identificar o motivo de seus fragmentos não atribuídos

Para identificar os fragmentos não atribuídos e obter detalhes adicionais, execute as seguintes etapas:

1.    Liste o fragmento não atribuído:

curl -XGET 'domain-endpoint/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED

Observação: se você estiver usando credenciais do AWS Identity and Access Management (IAM) ou credenciais de banco de dados com controle de acesso refinado (FGAC) ativado, etapas adicionais serão necessárias. Certifique-se de assinar solicitações às APIs do OpenSearch Service com suas credenciais de usuário do IAM ou do banco de dados.

2.    Recupere os detalhes do motivo pelo qual o fragmento não está atribuído:

curl -XGET 'domain-endpoint/_cluster/allocation/explain?pretty'

3.    (Opcional) Se estiver usando o painel do Kibana ou do OpenSearch, execute a seguinte API:

GET _cluster/allocation/explain

Nós de cluster com falha

Se ocorrer uma falha no nó do cluster, os fragmentos poderão não ser atribuídos. Os nós de cluster com falha podem ocorrer devido ao alto uso da CPU no cluster ou a uma falha de hardware. Para verificar se o cluster está sobrecarregado, verifique as métricas CPUUtilization e JVMMemoryPressure. Se o cluster estiver sobrecarregado, você poderá reduzir o tráfego para o cluster. Para instruções, consulte, Como soluciono problemas de alta pressão de memória de JVM no meu cluster do OpenSearch Service?

Quando o nó está ativo, os fragmentos são reatribuídos automaticamente. Se o cluster permanecer no status vermelho ou amarelo, você poderá receber um erro semelhante ao seguinte:

 "unassigned_info" : {  "reason" : "MANUAL_ALLOCATION",  "at" : "2022-03-18T02:45:42.730Z",  "details" : """failed shard on node [xxxxxxxxxx]: shard  failure, reason [corrupt file (source: [flush])], failure  FlushFailedEngineException[Flush failed]; nested:  CorruptIndexException[codec footer mismatch (file truncated?): actual  footer=0 vs expected footer=-1071082520   """,  "last_allocation_status" : "no_valid_shard_copy"  },  "can_allocate" : "no_valid_shard_copy",  "allocate_explanation" : "cannot allocate because all found copies of the shard are either stale or corrupt",

Você pode excluir e restaurar esses índices usando snapshots com as seguintes etapas:

1.    Identifique e exclua o índice vermelho:

GET _cat/indices?health=red
DELETE /index-name

2.    Verifique se há snapshots bem-sucedidos:

GET _cat/snapshots/cs-automated-enc

3.    Restaure um índice a partir de snapshots:

POST _snapshot/Repository-name/snapshot-ID/_restore
{
 "indices": "index-name"
}

Para mais informações, consulte Restauração de snapshots.

Contagem de réplicas mal configurada

Se o número de fragmentos de réplica for maior que o número de nós de dados, os fragmentos não serão atribuídos. Isso ocorre porque o fragmento primário e o fragmento de réplica não podem ser alocados no mesmo nó.

Para resolver esse problema, aumente o número de nós ou reduza a contagem de réplicas usando um dos seguintes comandos:

Observação: altere o valor "n" para o valor desejado:

curl -XPUT 'domain-endpoint/<indexname>/_settings' -H 'Content-Type: application/json' -d' {  "index" : {  "number_of_replicas" : n  } }
PUT <index-name>/_settings
  {
      "index" : {
        "number_of_replicas" : n
      }
  }

Observação: um cluster de nó único com fragmentos de réplica sempre é inicializado com o status de cluster amarelo. Os clusters de nó único são inicializados dessa forma porque não há outros nós disponíveis aos quais o OpenSearch Service possa atribuir uma réplica.

O fragmento não conseguiu obter um bloqueio na memória

Se o fragmento falhar em obter um bloqueio na memória para alocação de fragmentos, você receberá o seguinte erro:

"failed_allocation_attempts" : 5,  "details" : "failed shard on node []: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[][5]: obtaining shard lock timed out after 5000ms]; ", . . "explanation" : "shard has exceeded the maximum number of retries [5] on failed allocation attempts - manually call [/_cluster/reroute?retry_failed=true] to retry, [unassigned_info[[reason=ALLOCATION_FAILED], at[], failed_attempts[5], delayed=false, details[failed shard on node [xxxxxxxxxxx]: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[xxxxxxxxx][5]: obtaining shard lock timed out after 5000ms]; ], allocation_status[no_attempt]]]"

Para resolver o erro, aumente as configurações máximas de repetição:

PUT /<index-name>/_settings {  "index.allocation.max_retries": 10 }

Limite de fragmentos excedido

O limite padrão para a configuração cluster.max_shards_per_node é de 1.000 fragmentos para as versões 7.x e posteriores do OpenSearch Service. É uma prática recomendada manter a configuração cluster.max_shards_per_node com o valor padrão de 1.000 fragmentos. Se você definir os filtros de alocação de fragmentos para controlar como o OpenSearch Service aloca fragmentos, o fragmento pode ficar sem atribuição por não ter nós filtrados suficientes. Para evitar essa escassez de nós, aumente sua contagem de nós:

Observação: altere o valor "n" para o valor desejado. Verifique se o número de réplicas para cada fragmento primário seja menor que o número de nós de dados.

PUT _cluster/settings {  "index" : {  "cluster.max_shards_per_node" : n  } }

Para mais informações, consulte Como escolher o número de fragmentos.

Problemas de espaço em disco

As configurações de alocação de fragmentos com base em disco também podem resultar em fragmentos não atribuídos. Por exemplo, se a métrica cluster.routing.allocation.disk.watermark.low estiver definida como 50 GB, a quantidade especificada de espaço em disco deverá estar disponível para alocação de fragmentos. Para mais informações, consulte as configurações de alocação de fragmentos com base em disco (no site da Elasticsearch).

Para verificar as configurações atuais de alocação de fragmentos com base em disco, use a seguinte sintaxe:

$ curl -XGET domain-endpoint/_cluster/settings?include_defaults=true&flat_settings=true

Para resolver seus problemas de espaço em disco, considere as seguintes abordagens:

  • Excluir quaisquer índices indesejados para clusters amarelos e vermelhos
  • Excluir índices vermelhos para clusters vermelhos
  • Aumentar o volume do EBS
  • Adicionar mais nós de dados

Observação: evite fazer qualquer alteração de configuração em seu cluster quando ele estiver em estado de inoperância. Se você tentar reconfigurar seu domínio quando ele estiver em um status de cluster vermelho, ele poderá ficar preso no estado "Processando".

Uso de disco distorcido e estratégia de fragmentação

O uso do disco pode ser muito distorcido pelos seguintes motivos:

  • Tamanhos irregulares de fragmentos em um cluster.
  • Espaço em disco disponível em um nó.
  • Estratégia incorreta de alocação de fragmentos.

Por padrão, o Amazon OpenSearch Service tem uma estratégia de fragmentação de 5:1, em que cada índice é dividido em cinco fragmentos principais. Em cada índice, cada fragmento primário também tem sua própria réplica. O OpenSearch Service atribui automaticamente fragmentos primários e fragmentos de réplica a nós de dados separados e garante que haja um backup em caso de falha.

Você pode reequilibrar a alocação de fragmentos em seu cluster do OpenSearch Service e atualizar sua estratégia de fragmentação. Para mais informações, consulte Como rebalancear a distribuição desigual de fragmentos no cluster do Amazon OpenSearch Service?

Erro ClusterBlockException

Se você tentou criar um índice ou gravar dados em seu domínio do OpenSearch Service, você pode receber o erro ClusterBlockException semelhante ao seguinte:

"reason": "blocked by: [FORBIDDEN/6/cluster read-only (api)];",
"type": "cluster_block_exception"

Para resolver esse erro, consulte Como resolvo o erro 403 "index_create_block_exception" ou "cluster_block_exception" no OpenSearch Service?

Informações relacionadas

Solução de problemas do Amazon OpenSearch Service

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses