跳至內容

為什麼我的 OpenSearch Service 網域卡在「修改」狀態?

2 分的閱讀內容
0

我想對卡在「修改」狀態的 Amazon OpenSearch Service 叢集進行疑難排解。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時遇到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

當您進行組態變更時,您的 OpenSearch Service 叢集將會進入修改狀態。組態變更包括新增資料節點、佈建每秒讀寫次數 (IOPS) 或設定 AWS Key Management Service (KMS) 金鑰。

**注意:**在提交組態變更之前,最佳做法是檢查您的叢集是否支援藍/綠部署。在提交組態變更前,請先執行試運行

驗證檢查失敗並顯示錯誤

當您啟動組態變更時,OpenSearch Service 會執行驗證檢查,以確認您的網域符合升級條件。如果驗證失敗,您的網域將保持在修改狀態。若要解決此問題,請完成針對錯誤的疑難排解步驟。然後,重試組態變更。

一組新資源無法啟動

如果您同時提交多個組態變更,那麼您的叢集可能會卡住。提交組態變更時,請等到變更完成後再提交另一個組態變更。

驗證階段完成的驗證檢查在組態變更期間仍然有效。如果您的組態通過了驗證階段,則請勿修改網域所需的資源。例如,請勿停用用於加密的 AWS KMS key。

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

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

若要監控目前碎片在舊節點和新節點之間的遷移情況,請使用下列 API 作業:

GET /DOMAIN_ENDPOINT/_cat/recovery?active_only=true

**注意:**將 DOMAIN_ENDPOINT 替換為您的網域端點。

如果您的 OpenSearch Service 叢集處於紅色叢集狀態,則碎片遷移失敗。若要對紅色運作狀態進行疑難排解,請參閱為什麼我的 Amazon OpenSearch Service 叢集處於紅色或黃色狀態?

當叢集超載時,叢集無法分配資源來處理碎片遷移。CPU 和 JVM 壓力較高的叢集可能會超載。若要對此問題進行疑難排解,請監控 JVMMemoryPressure 和 CPUUtilization Amazon CloudWatch 指標

如果新節點集中缺少可用儲存空間,則碎片遷移可能會失敗。在藍/綠部署過程中向叢集新增資料時,可能會出現此問題。當舊節點具有較大的碎片,而 OpenSearch Service 無法指派給新節點時,也會發生此問題。

若要釋放儲存空間,請使用刪除索引 API 作業,刪除不再需要的舊索引。如需詳細資訊,請參閱 Elastic 網站上的刪除索引 API

若要查看碎片的大小,請使用 cat shards API 作業。然後,若要查看每個節點所指派的碎片數量,請使用 cat assignment API 作業。如果新節點沒有所有必要的碎片,請使用叢集分配說明 API 作業來找出原因。如需詳細資訊,請參閱 Elastic 網站上的 cat shards APIcat assignment APICluster assignment explain API

如果您的碎片超過了最大重試次數並且仍未指派給節點,請重試分配。

預設情況下,叢集最多會連續 5 次嘗試分配碎片。若要增加碎片的 index.allocation.max_retries 索引設定,請使用下列 API 作業:

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

**注意:**將 INDEX_NAME 替換為您的索引名稱。

內部硬體故障可能會導致舊資料節點上的碎片在遷移過程中卡住。視您的硬體問題而定,OpenSearch Service 會執行自我修復指令碼,將節點恢復為運作良好狀態。

當您將碎片釘選到較舊的節點集時,可能會發生碎片重新定位卡住的情況。若要確認碎片未釘選到任何節點,請檢查索引設定。或者,檢查您的叢集是否存在 ClusterBlockException 錯誤。

若要識別無法指派給新節點的碎片以及相應的索引設定,請執行下列命令:

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

**注意:**將 DOMAIN_ENDPOINTINDEX_NAME 替換為您的值。

檢查索引設定輸出中是否出現以下設定:

  • "index.routing.allocation.require._name": "NODE_NAME"
  • "index.blocks.write": true

如果您在索引設定中看到 “index.routing.allocation.require._name”: "NODE_NAME",請執行下列命令重設設定:

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

**注意:**將 DOMAIN_ENDPOINTINDEX_NAME 替換為您的值。

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

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

若要監控組態變更的進度,請執行 DescribeDomainChangeProgress API 作業。

對於卡在修改狀態的叢集或卡在刪除舊資源狀態超過 24 小時的網域,請聯絡 AWS Support

AWS 官方已更新 7 個月前