Wie kann ich den Fehler „Courier fetch: n of m shards failed“ in OpenSearch Dashboards in Amazon OpenSearch Service beheben?

Letzte Aktualisierung: 27.9.2021

Wenn ich versuche, ein Dashboard in OpenSearch Dashboards auf meiner Amazon-OpenSearch-Service-Domäne zu laden, wird ein Courier-Abruffehler zurückgegeben. Wie kann ich dies beheben?

Kurzbeschreibung

Hinweis: Amazon OpenSearch Service ist der Nachfolger von Amazon Elasticsearch Service.

Wenn Sie ein Dashboard in OpenSearch Dashboards laden, wird eine Suchanfrage an die OpenSearch-Services-Domäne gesendet. Die Suchanfrage wird an einen Clusterknoten weitergeleitet, der als koordinierender Knoten für die Anforderung fungiert. Der Fehler "Courier fetch: n of m shards failed" tritt auf, wenn der koordinierende Knoten die Abrufphase der Suchabfrage nicht abschließt. Es gibt zwei Arten von Problemen, die diesen Fehler häufig verursachen:

  • Anhaltende Probleme: Konflikte beim Mapping oder nicht zugewiesenen Shards. Wenn Sie mehrere Indizes in Ihrem Indexmuster haben, die denselben Namen, aber unterschiedliche Mapping-Typen verwenden, wird möglicherweise ein Courier-Abruffehler angezeigt. Wenn sich Ihr Cluster im roten Cluster-Status befindet, bedeutet dies, dass mindestens ein Shard nicht zugewiesen ist. Da OpenSearch Service keine Dokumente von nicht zugewiesenen Shards abrufen kann, führt ein Cluster im roten Status einen Courier-Abruffehler aus. Wenn der Wert von „n“ in der Courier-Abruffehlermeldung jedes Mal gleich ist, wenn Sie den Fehler erhalten, ist dies wahrscheinlich ein anhaltendes Problem. Überprüfen Sie die Fehlerprotokolle der Anwendung auf Vorschläge zur Fehlerbehebung.
    Hinweis: Anhaltende Probleme können durch erneute Versuche nicht gelöst werden, und auch nicht, indem mehr Clusterressourcen bereitgestellt werden.
  • Vorübergehende Probleme: Vorübergehende Probleme sind Ablehnungen von Thread-Pools, Such-Timeouts und auslösten Felddatenschutzschalter. Diese Probleme treten auf, wenn Sie nicht über genügend Rechenressourcen im Cluster verfügen. Ein vorübergehendes Problem ist wahrscheinlich die Ursache, wenn Sie die Fehlermeldung zeitweise mit einem anderen Wert von „n“ jedes Mal erhalten. Sie können auch Amazon-CloudWatch-Metriken wie CPUUtilization, JVMMemoryPressure und ThreadPoolSearchRejected überwachen, um festzustellen, ob ein vorübergehendes Problem den Courier-Abruffehler verursacht.

Auflösung

Aktivieren Sie Anwendungsfehlerprotokolle für die Domäne. Die Protokolle können Ihnen helfen, die Grundursache und Lösung für vorübergehende und anhaltende Probleme zu identifizieren. Weitere Informationen finden Sie unter Anzeigen von Fehlerprotokollen von Amazon OpenSearch Service.

Anhaltende Probleme

Das folgende Beispiel zeigt einen Protokolleintrag für einen Courier-Abruffehler, der durch ein anhaltendes Problem verursacht wurde:

[2019-07-01T12:54:02,791][DEBUG][o.e.a.s.TransportSearchAction] [ip-xx-xx-xx-xxx] [1909731] Failed to execute fetch phase
org.elasticsearch.transport.RemoteTransportException: [ip-xx-xx-xx-xx][xx.xx.xx.xx:9300][indices:data/read/search[phase/fetch/id]]
Caused by: java.lang.IllegalArgumentException: Fielddata is disabled on text fields by default. 
Set fielddata=true on [request_departure_date] in order to load fielddata in memory by uninverting the inverted index.
Note that this can however use significant memory. Alternatively use a keyword field instead.

In diesem Beispiel wird das Problem durch das Feld request_departure_date verursacht. Der Protokolleintrag zeigt, dass Sie dieses Problem beheben können, indem Sie fielddata=true in den Indexeinstellungen setzen oder ein Schlüsselwortfeld verwenden.

Vorübergehende Probleme

Die meisten vorübergehenden Probleme können gelöst werden, indem entweder mehr Computing-Ressourcen bereitgestellt oder die Ressourcenauslastung für Ihre Abfragen reduziert werden.

Bereitstellung weiterer Computing-Ressourcen

Reduzieren der Ressourcenauslastung für Ihre Anfragen

  • Vergewissern Sie sich, dass Sie die bewährten Methoden für Shard- und Clusterarchitektur befolgen. Ein schlecht gestalteter Cluster kann nicht alle verfügbaren Ressourcen nutzen. Einige Knoten könnten überlastet werden, während andere Knoten im Leerlauf sind. OpenSearch Service kann keine Dokumente von überlasteten Knoten abrufen.
  • Sie können auch den Umfang Ihrer Anfrage reduzieren. Wenn Sie beispielsweise nach einem Zeitrahmen abfragen, reduzieren Sie den Datumsbereich oder filtern Sie die Ergebnisse, indem Sie das Indexmuster in Kibana konfigurieren.
  • Vermeiden Sie es, select *-Abfragen auf großen Indizes auszuführen. Verwenden Sie stattdessen Filter, um einen Teil des Index abzufragen und so wenige Felder wie möglich zu durchsuchen. Weitere Informationen finden Sie unter Abstimmen auf die Suchgeschwindigkeit und Abfrage- und Filterkontext auf der Elasticsearch-Website.
  • Reduzieren Sie die Anzahl der Shards und indizieren Sie neu. Je mehr Shards Sie in Ihrem Cluster haben, desto wahrscheinlicher ist es, dass Sie einen Courier-Abruffehler erhalten. Da jeder Shard seine eigene Ressourcenzuweisung und Overheads hat, kann eine große Anzahl von Shards Ihren Cluster übermäßig belasten. Weitere Informationen finden Sie unter Warum ist meine Amazon-OpenSearch-Service-Domäne im Zustand „Verarbeitung“ hängen geblieben?

Das folgende Beispiel zeigt einen Protokolleintrag für einen Courier-Abruffehler, der durch ein vorübergehendes Problem verursacht wurde:

Caused by: org.elasticsearch.common.util.concurrent.EsRejectedExecutionException: rejected execution of org.elasticsearch.common.util.concurrent.TimedRunnable@26fdeb6f on QueueResizingEsThreadPoolExecutor
[name = __PATH__ queue capacity = 1000, min queue capacity = 1000, max queue capacity = 1000, frame size = 2000, targeted response rate = 1s, task execution EWMA = 2.9ms, adjustment amount = 50,
org.elasticsearch.common.util.concurrent.QueueResizingEsThreadPoolExecutor@1968ac53[Running, pool size = 2, active threads = 2, queued tasks = 1015, completed tasks = 96587627]]

In diesem Beispiel wird das Problem durch Ablehnungen von Such-Threadpool-Warteschlangen verursacht. Um dieses Problem zu beheben, skalieren Sie Ihre Domäne, indem Sie einen größeren Instance-Typ wählen. Weitere Informationen finden Sie unter Thread-Pools auf der Elasticsearch-Website.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?