Comment résoudre des problèmes de partitions non attribuées dans un cluster OpenSearch Service ?

Lecture de 7 minute(s)
0

Mon cluster Amazon OpenSearch Service comprend des partitions non attribuées.

Brève description

Des partitions non attribuées peuvent se trouver dans votre cluster Amazon OpenSearch Service pour les raisons suivantes :

  • Échec des nœuds du cluster
  • Mauvaise configuration du nombre de répliques
  • La partition n’a pas réussi à obtenir un verrouillage en mémoire
  • Limite du nombre de partitions dépassée
  • Problèmes d’espace disque
  • Utilisation du disque asymétrique et stratégie de partitionnement
  • Erreur de type ClusterBlockException

Résolution

Identification de la cause à l’origine des partitions non attribuées

Suivez ces étapes pour identifier les partitions non attribuées et obtenir davantage d’informations :

1.    Répertoriez les partitions non attribuées :

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

Remarque : si vous utilisez des informations d'identification AWS Identity and Access Management (IAM) ou des informations d'identification de base de données avec un contrôle d'accès affiné (FGAC) activé, vous devez suivre des étapes supplémentaires. Veillez à signer les demandes adressées aux API OpenSearch Service avec vos informations d’identification d’utilisateur IAM ou de base de données.

2.    Récupérez les causes de la non-attribution des partitions :

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

3.    (Facultatif) Si vous utilisez le tableau de bord Kibana ou OpenSearch, exécutez l’API suivante :

GET _cluster/allocation/explain

Échec des nœuds du cluster

L’échec d’un nœud du cluster peut entraîner la non-attribution des partitions. Les nœuds du cluster peuvent échouer suite à une utilisation élevée du processeur sur le cluster ou à une défaillance matérielle. Pour savoir si le cluster est surchargé, examinez les métriques CPUUtilization et JVMMemoryPressure. Si le cluster est surchargé, vous pouvez réduire le trafic vers le cluster. Pour obtenir des instructions, consultez la page Comment résoudre les problèmes de pression de mémoire élevée sur la machine virtuelle Java sur mon cluster OpenSearch Service ?

Une fois le nœud activé, les partitions seront réattribuées automatiquement. Si l’état du cluster reste rouge ou jaune, vous pouvez recevoir un message d’erreur de ce type :

 "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",

Vous pouvez supprimer et restaurer ces indices à l’aide d’instantanés en procédant comme suit :

1.    Identifiez et supprimez l’index rouge :

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

2.    Vérifiez que les instantanés ont bien été capturés :

GET _cat/snapshots/cs-automated-enc

3.    Restaurez un index à partir d’instantanés :

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

Pour en savoir plus, consultez la section Restauration des instantanés.

Mauvaise configuration du nombre de répliques

Si le nombre de partitions répliquées dépasse le nombre de nœuds de données, les partitions ne seront pas attribuées. En effet, une partition principale et une partition répliquée ne peuvent pas être allouées au même nœud.

Pour résoudre ce problème, vous devez augmenter le nombre de nœuds ou réduire le nombre de répliques à l’aide de l’une des commandes suivantes :

Remarque : remplacez la valeur « n » par la valeur de votre choix :

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
      }
  }

Remarque : un cluster à nœud unique qui comprend des partitions répliquées s’initialise systématiquement avec l’état de cluster jaune. Les clusters à nœud unique sont initialisés de cette façon car ils ne possèdent aucun autre nœud auquel OpenSearch Service peut attribuer une réplique.

La partition n’a pas réussi à obtenir un verrouillage en mémoire

Si la partition ne parvient pas à obtenir un verrouillage en mémoire pour l’allocation d’une partition, le message d’erreur suivant s’affiche :

"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]]]"

Pour résoudre cette erreur, vous devez augmenter le paramètre correspondant au nombre maximal de nouvelles tentatives :

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

Limite du nombre de partitions dépassée

La limite par défaut du paramètre cluster.max_shards_per_node est de 1 000 partitions pour OpenSearch Service versions 7.x et ultérieures. Il est recommandé de conserver la valeur par défaut de 1 000 partitions pour le paramètre cluster.max_shards_per_node. Si vous définissez des filtres d’allocation de partitions pour contrôler la façon dont OpenSearch Service alloue les partitions, il est possible que la partition ne soit pas attribuée en raison d’un nombre insuffisant de nœuds filtrés. Pour éviter ce problème, vous devez augmenter le nombre de nœuds :

Remarque : remplacez la valeur « n » par la valeur de votre choix. Vérifiez que le nombre de répliques pour chaque partition principale est inférieur au nombre de nœuds de données.

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

Pour en savoir plus, consultez la section Choix du nombre de partitions.

Problèmes d’espace disque

Les paramètres d'allocation de partition basés sur le disque peuvent également entraîner la non-attribution des partitions. Par exemple, si la métrique cluster.routing.allocation.disk.watermark.low est définie sur 50 Go, l’espace disque spécifié doit être disponible pour l’allocation des partitions. Pour en savoir plus, consultez la page consacrée aux paramètres d'allocation de partition basés sur le disque (sur le site Web d’Elasticsearch).

Pour vérifier les paramètres actuels d'allocation de partition basés sur le disque, utilisez la syntaxe suivante :

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

Pour résoudre vos problèmes d’espace disque, envisagez les approches suivantes :

  • Supprimez tous les indices indésirables pour les clusters jaunes et rouges
  • Supprimez les indices rouges pour les clusters rouges
  • Augmentez le volume de l’EBS
  • Ajoutez des nœuds de données

Remarque : évitez de modifier la configuration de votre cluster lorsque son état est rouge. Si vous essayez de reconfigurer votre domaine lorsqu’il est associé à un état de cluster rouge, il peut en effet rester bloqué à l’état « Traitement ».

Utilisation du disque asymétrique et stratégie de partitionnement

L'utilisation du disque peut être fortement asymétrique pour les raisons suivantes :

  • Taille variable des partitions au sein d’un cluster.
  • Espace disque disponible sur un nœud.
  • Stratégie incorrecte pour l’allocation des partitions.

Par défaut, Amazon OpenSearch Service applique une stratégie de partitionnement 5:1, dans laquelle chaque index est divisé en cinq partitions principales. Au sein de chaque index, chaque partition principale possède également sa propre réplique. OpenSearch Service attribue automatiquement les partitions principales et les partitions répliquées à des nœuds de données distincts, puis met une sauvegarde en place en cas de panne.

Vous pouvez rééquilibrer l’allocation des partitions dans votre cluster OpenSearch Service et mettre à jour votre stratégie de partitionnement. Pour en savoir plus, consultez la page Comment rééquilibrer la distribution inégale des partitions dans mon cluster Amazon OpenSearch Service ?

Erreur de type ClusterBlockException

Si vous essayez de créer un index ou d’écrire des données dans votre domaine OpenSearch Service, vous pouvez obtenir une erreur ClusterBlockException de ce type :

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

Pour résoudre ce problème, consultez la page Comment résoudre l’erreur 403 « index_create_block_exception » ou l’erreur « cluster_block_exception » dans OpenSearch Service ?

Informations connexes

Résolution des problèmes liés à Amazon OpenSearch Service

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 10 mois