為何我的 Amazon OpenSearch Service 網域停留在「正在處理」狀態?

上次更新日期:2021 年 8 月 5 日

我的 Amazon OpenSearch Service (Amazon Elasticsearch Service 的後繼者) 叢集停留在「正在處理」狀態。為什麼會發生這種情況,而我又該如何預防情況再次發生?

簡短描述

當您的 OpenSearch Service 叢集正在進行組態變更時,它會進入「正在處理」狀態。當下列任何一種情況發生時,叢集可能會停留在「正在處理」狀態:

  • 新的資料節點集無法啟動。
  • 碎片遷移到新的資料節點集失敗。

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

解決方案

無法啟動新的資料節點集

當您在第一次變更完成之前對叢集進行同時組態變更時,您的叢集可能會停滯。請務必檢查叢集中是否有任何正在進行的藍/綠部署。若要驗證是否有任何進行中的藍/綠部署,請檢查 Amazon CloudWatch 中的節點總數。若您觀察到的節點計數高於預期,則藍/綠部署可能正在進行中。

使用下列 API 呼叫來擷取有關其他節點和碎片遷移程序的詳細資訊:

GET /_cluster/health?pretty and GET /_cat/recovery?pretty

如果您使用的是 Amazon Virtual Private Cloud (VPC) 網域,請檢查以確定您的子網路中有足夠的可用 IP 地址。如果您的子網路中沒有指定足夠的 IP 地址,則新節點的啟動會失敗。因此,您的叢集會停留在「正在處理」狀態。如需詳細資訊,請參閱保留 VPC 子網路中的 IP 地址

若您已加密 OpenSearch Service 網域,請在變更組態前,確定您的 AWS 帳戶中有 AWS KMS 金鑰。如果您不小心刪除了 AWS KMS 金鑰,則叢集可能會停留在「正在處理」狀態。

您的叢集也可能因為下列原因而停滯:

  • 某個過載主節點具有太多待處理任務或高 CPU 和 JVM 記憶體壓力級別。請使用 cat 待處理任務 API 來檢查任何待處理的任務。您也可以檢查 Amazon CloudWatch 中的 MasterCPUUtilizationMasterJVMMemoryPressure 指標。
  • 未符合 OpenSearch Dashboards 的 Amazon Cognito 身分驗證先決條件。如果您將 Amazon Cognito 設定為 OpenSearch Dashboards 身分驗證,請確定您符合身分驗證先決條件。例如,OpenSearch Service 必須以正確的許可設定使用者集區、Amazon Cognito 身分集區和 AWS Identity Access Management (IAM) 角色。這個角色的預設名稱是 CognitoAccessForAmazonOpenSearch (附加的 AmazonESCognitoAccess 政策)。
    注意:如果您建立了自訂 IAM 角色,請確定您的角色許可與CognitoAccessForAmazonOpenSearch相同。

碎片遷移到新的資料節點集失敗

碎片遷移(從舊資料節點集到新資料節點集)可能會失敗,原因如下:

  • 您的 OpenSearch Service 叢集目前處於紅色運作狀態。如果叢集處於紅色運作狀態,請疑難排解紅色叢集狀態,使叢集處於運作狀態。
    注意: 當叢集處於運作狀態時,最佳實務是設定叢集。
  • 因高 JVM 記憶體壓力和 CPU 使用率造成處理負載過重,故節點停止運作。若要解決此問題,請降低叢集的網路流量或完全停止網路流量,讓叢集能恢復到運作狀態。否則,您的藍/綠部署程序可能會因逾時而需要手動介入。
  • 由於內部硬體故障,舊資料節點上的碎片可能會在遷移過程中停滯。(注意:根據您的硬體問題,叢集也可能不會自動恢復。) 若叢集沒有自動恢復,則 OpenSearch Service 會執行自我修復指令碼,將節點恢復到運作狀態。遺失節點的根磁碟區可以防止 OpenSearch Service 回應,而 Auto Scaling 群組會自動取代錯誤的節點。如果節點所連接的 EBS 磁碟區故障,則需要手動介入才能取代 EBS 磁碟區。為了幫助識別哪些碎片仍然在使用較舊的節點操作,請使用以下 API 命令:cat 分配 API ,cat 節點 APIcat 碎片 API
  • 由於新節點集內的可用儲存空間不足而造成停滯的碎片遷移。當有新的資料在藍/綠部署程序期間進入叢集時,就會發生這個問題。
    注意: 如果 OpenSearch Service 偵測到的空間小於成功遷移資料所需的空間,則不會觸發藍/綠部署。
  • 被釘選到一組較舊節點集的碎片所造成的停滯碎片遷移。請檢查索引設定,以確保碎片在組態變更前沒有釘選到任何節點上。或者,請檢查您的叢集是否有因為 JVM 記憶體壓力高或磁碟空間不足所造成的寫入區塊。

若要識別哪些索引碎片停滯和其對應的索引設定,請使用下列命令:

curl -X GET "ENDPOINT/_cluster/allocation/explain?pretty"
curl -X GET "ENDPOINT/INDEX_NAME/_settings?pretty"

在索引設定中,檢查是否出現以下任一設定:

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

若您觀察到索引設定中有 "index.routing.allocation.require._name": "NODE_NAME" 則請移除設定如下:

curl -X PUT "ENDPOINT/INDEX_NAME/_settings?pretty" H 'Content-Type: application/json' -d '
{
"index.routing.allocation.require._name": null
}'

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

若您觀察到索引設定中有 "index.blocks.write": true,則您的叢集有寫入區塊。該寫入區塊可能是因 JVM 記憶體壓力高或磁碟空間不足所致。請務必在實作任何其他疑難排解秘訣前解決這些問題。如需疑難排解此例外的詳細資訊,請參閱 ClusterBlockException

注意:若叢集停留在「正在處理」狀態超過 24 小時,則叢集需要手動介入。此外,若您尚未進行任何組態變更,但節點計數高於預期,則系統可能正在執行軟體修補程式


此文章是否有幫助?


您是否需要帳單或技術支援?