我想對卡在「修改」狀態的 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 API、cat assignment API 和 Cluster 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_ENDPOINT 和 INDEX_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_ENDPOINT 和 INDEX_NAME 替換為您的值。
如需詳細資訊,請參閱 Elastic 網站上的索引層級碎片分配篩選。
如果您在索引設定中看到 "index.blocks.write": true,則表示您的索引具有寫入區塊。此寫入區塊問題可能是由於 ClusterBlockException 錯誤所引起的。如需詳細資訊,請參閱如何解決 OpenSearch Service 中的 403 "index_create_block_exception" 或 "cluster_block_exception" 錯誤?
若要監控組態變更的進度,請執行 DescribeDomainChangeProgress API 作業。
對於卡在修改狀態的叢集或卡在刪除舊資源狀態超過 24 小時的網域,請聯絡 AWS Support。