如何解決 Amazon OpenSearch Service 上 OpenSearch Dashboards 中的「Courier 擷取:n 個碎片失敗,共 m 個碎片」錯誤?

2 分的閱讀內容
0

當我嘗試在我的 Amazon OpenSearch Service 網域的 OpenSearch Dashboards 中載入儀表板時,它會傳回 Courier 擷取錯誤。如何解決此錯誤?

簡短說明

在 OpenSearch Dashboards 中載入儀表板後,搜尋請求會傳送至 OpenSearch Service 網域。搜尋請求會路由至叢集節點,而該節點充當要求的 協調節點。當協調節點無法完成搜尋請求的 擷取階段時,就會發生 "Courier fetch: n of m shards failed" (Courier 擷取:n 個碎片失敗,共 m 個碎片) 錯誤。有兩種類型的問題通常會造成此錯誤:

  • 持續性問題:映射衝突或未分配的碎片。如果您的索引模式中有多個索引使用相同的名稱但不同的 映射類型,則可能會收到 Courier 擷取錯誤。如果您的叢集處於 紅色叢集狀態,則意味著至少有一個碎片未分配。由於 OpenSearch Service 無法從未分配的碎片中擷取文件,因此處於紅色狀態的叢集會擲回 Courier 擷取****錯誤。如果每次收到錯誤訊息時,Courier 擷取錯誤訊息中的 "n" 值都是相同的,那麼這可能是一個持續性問題。請檢查應用程式錯誤日誌以取得疑難排解建議。
    **注意:**持續性問題無法透過重試或佈建更多叢集資源來解決。
  • 暫時性問題:暫時性問題包括執行緒集區的拒絕、搜尋逾時,以及觸發欄位資料斷路器。當叢集上沒有足夠的運算資源時,就會發生此類問題。當您每次間歇性的收到有不同 “n” 值的錯誤訊息時,暫時性問題可能是原因。您也可以監控 Amazon CloudWatch 指標,如 CPUUtilizationJVMMemoryPressureThreadpoolSearchRejected,以判斷暫時性問題是否造成 Courier 擷取錯誤

解析度

啟用網域的應用程式錯誤記錄。記錄可協助您識別暫時性和持續性問題的根本原因和解決方案。如需詳細資訊,請參閱檢視 OpenSearch Service 錯誤記錄

持續性問題

下列範例顯示由持續性問題所造成的Courier 擷取****錯誤的記錄項目:

[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.

在這個範例中,問題是由 request_departure_date 欄位所造成。記錄項目顯示您可以藉由在索引中設定或使用關鍵字欄位設定 fielddata=true 來解決這個問題。

暫時性問題

大部分的暫時性問題都可以透過佈建更多運算資源或降低查詢的資源使用率來解決。

佈建更多運算資源

降低查詢的資源使用率

  • 請確認您遵循碎片和叢集架構的最佳實務。設計不良的叢集無法使用所有可用資源。某些節點可能會在其他節點閒置時過載。OpenSearch Service 無法從過載節點擷取文件。
  • 您也可以減少查詢的範圍。例如,在您查詢時間範圍時,可以減少日期範圍或透過在 Kibana 中設定索引模式來篩選結果。
  • 請避免在大型索引上執行 select * 查詢。相反地,請使用篩選條件來查詢索引的一部分,並盡可能減少搜尋欄位。如需詳細資訊,請參閱 Elasticsearch 網站上的調整搜尋速度查詢及篩選條件內容
  • 請重新索引並減少碎片數量。您叢集中的碎片越多,您就越有可能造成Courier 擷取****錯誤。因為每個碎片都有自己的資源分配和費用,因此大量碎片會對叢集造成過度壓力。如需詳細資訊,請參閱為何我的 OpenSearch Service 網域停留在「正在處理」狀態?

下列範例顯示由暫時性問題所造成之 Courier 擷取錯誤的日誌項目:

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

在這個範例中,問題是由搜尋執行緒集區佇列拒絕所造成。若要解決這個問題,請選擇較大的執行個體類型來為您的網域擴充規模。如需詳細資訊,請參閱 Elasticsearch 網站上的執行緒集區


相關資訊

Amazon OpenSearch Service 的最佳實務

針對 Amazon OpenSearch Service 進行疑難排解

AWS 官方
AWS 官方已更新 3 年前