為什麼我的 Amazon OpenSearch Service 網域卡在「處理中」狀態?

2 分的閱讀內容
0

我的 Amazon OpenSearch Service 叢集卡在「處理中」狀態。

簡短描述

您的 OpenSearch Service 叢集會在組態變更時進入「處理中」狀態。如果發生以下任何情況,該叢集可能會卡在**「處理中」**狀態:

  • 驗證檢查失敗並顯示錯誤。
  • 一組新的資源無法啟動。
  • 碎片遷移到新的資料節點集未完成。
  • 舊的資源集無法終止。

啟動組態變更時,網域狀態會變更為「處理中」,而 OpenSearch Service 會建立新的環境。在新環境中,OpenSearch Service 會啟動一組新的適用節點,例如資料節點、專用主節點或 UltraWarm 節點。遷移完成後,較舊的節點會終止。

您可以在網域狀態下的主控台中檢視組態變更的進度。您也可以使用 DescribeDomainChangeProgress API 監控組態變更的進度。如需詳細資訊,請參閱組態變更的階段

解決方法

驗證檢查失敗並顯示錯誤

當您啟動組態變更或執行 OpenSearch Service 網域版本升級時,OpenSearch Service 會先執行一系列驗證檢查。驗證檢查可確保您的網域符合升級資格。當驗證檢查失敗並顯示錯誤時,網域可能會卡在**「處理中」**狀態。驗證檢查失敗有多種原因。若要解決此問題,請參閱對驗證錯誤進行疑難排解。請遵循與驗證錯誤關聯的疑難排解步驟,然後重試組態變更。

一組新的資源無法啟動

在第一次組態變更完成之前向叢集提交同時組態變更時,叢集可能會卡住。提交新的組態變更時,請等到提交完成後再提交另一個組態變更。

驗證階段中對網域的驗證檢查在整個組態變更期間保持有效。如果您的組態通過驗證階段,請避免修改網域所依賴的資源。例如,請勿停用用於加密的 AWS Key Management Service (KMS) 金鑰。

如果遇到 ClusterBlockException 錯誤,您的網域也可能會卡住。這可能是因為缺少可用的儲存空間或 JVM 記憶體壓力過高。如需詳細資訊和疑難排解,請參閱 ClusterBlockException
**注意:**您可以在 Amazon CloudWatch 中檢查 FreeStorageSpaceMasterCPUUtilizationMasterJVMMemoryPressure 指標。

碎片遷移到新的資料節點集尚未完成

OpenSearch Service 建立新資源之後,碎片將開始從舊的資料節點集遷移到新集。此階段可能需要幾分鐘到幾個小時,具體取決於叢集的負載和大小。

若要監控舊節點與新節點之間碎片的目前遷移,請執行下列 API 呼叫:

GET /<DOMAIN_ENDPOINT>/_cat/recovery?active_only=true

碎片遷移可能會因下列原因而失敗:

  • OpenSearch Service 叢集目前處於紅色運作狀態。如果叢集處於紅色運作狀態,請對紅色叢集狀態進行疑難排解,直到叢集處於良好運作狀態為止。如需詳細資訊,請參閱為什麼我的 Amazon OpenSearch Service 叢集處於紅色或黃色狀態?
  • 您的叢集超載,無法分配資源來處理碎片遷移。CPU 和 JVM 壓力較高的叢集可能會超載。監控 CloudWatch JVMMemoryPressure 和 CPUUtilization 指標。如需詳細資訊,請參閱在 CloudWatch 中檢視指標
  • 新節點集中缺少可用儲存空間。在藍/綠部署程序期間有新的資料進入叢集時,就會發生這個問題。當舊節點具有無法分配給新節點的大碎片時,也可能會發生此問題。

若要查看碎片的大小,請在 Elasticsearch 網站上使用 cat shards API
若要查看指派給每個節點的碎片數量,請使用 Elasticsearch 網站上的 cat allocation API
若要找出無法將某些碎片指派給新節點的原因,請在 Elasticsearch 網站上使用 cluster allocation explain API
如果您有不再需要的舊索引,則可以使用 Elasticsearch 網站上的 delete index API 來釋放儲存空間。

如果碎片因超過重試次數上限而無法指派給節點,則可以重試分配。使用下列 API 呼叫,增加與該碎片關聯的 "index.allocation.max_retries" 索引設定:

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

**注意:**依預設,叢集會嘗試最多連續分配 5 次碎片。

  • 由於內部硬體故障,舊資料節點上的碎片在遷移期間可能會卡住。
    **注意:**視您的硬體問題而定,OpenSearch Service 會執行自我修復指令碼,將節點恢復為運作良好狀態。
  • 固定到舊節點集的碎片導致碎片重新定位卡住。為確保碎片未固定至任何節點,請檢查索引設定。或者,檢查您的叢集是否有 ClusterBlockException 錯誤。

若要識別無法分配給新節點的碎片以及對應的索引設定,請使用下列命令:

GET /<DOMAIN_ENDPOINT>/_cluster/allocation/explain?pretty
GET /<DOMAIN_ENDPOINT>/<INDEX_NAME>/_settings?pretty

在 Elasticsearch 網站上使用 get index settings API,檢查是否出現以下任一設定:

{
    "index.routing.allocation.require._name": "NODE_NAME" (OR)
    "index.blocks.write": true
}

如果在索引設定中發現 "index.routing.allocation.require._name": "<NODE_NAME>",則使用下列 API 呼叫重設該設定:

PUT /<DOMAIN_ENDPOINT>/<INDEX_NAME>/_settings
{
    "index.routing.allocation.require._name": null
}

如需詳細資訊,請參閱 Elasticsearch 網站上的索引級碎片分配篩選

如果在索引設定中看到 "index.blocks.write": true,則表示索引有寫入區塊。此寫入區塊問題可能是 ClusterBlockException 錯誤所致。如需詳細資訊,請參閱如何解決 OpenSearch Service 中的 403 "index_create_block_exception" 或 "cluster_block_exception" 錯誤?

最佳實務

為避免 OpenSearch Service 叢集卡在 **「處理中」**狀態,請遵循下列最佳實務:

  • 在提交組態變更之前,請確定您的叢集可以支援藍/綠部署程序。
  • 在提交組態變更之前,請先提交試運行變更。
  • 確定您的叢集未超載。
  • 避免同時提交多個組態變更。
  • 考慮在低流量時段提交組態變更。
  • 監控組態變更的進度。

**注意:**如果發生以下任何情況,請聯絡 AWS Support

  • 您的叢集卡在 「處理中」 狀態超過 24 小時。
  • 您的網域卡在「正在刪除舊資源」階段。
AWS 官方
AWS 官方已更新 1 年前