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

上次更新日期:2023 年 1 月 11 日

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

簡短描述

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

  • 新的資料節點集無法啟動。
  • 碎片遷移到新的資料節點集失敗。
  • 驗證檢查失敗並顯示錯誤。

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

注意:如果 OpenSearch Service 網域在嘗試從「正在處理」狀態刪除之後卡在刪除狀態,請聯絡 AWS Support

解決方案

無法啟動新的資料節點集

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

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

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

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

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

您的叢集也可能因為下列原因而卡住:

  • 某個過載主節點具有太多待處理任務或高 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 分配 APIcat 節點 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
}

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

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

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

驗證檢查失敗並顯示錯誤

服務軟體更新或版本升級驗證檢查失敗並顯示錯誤時,網域可能會卡在正在處理狀態。若要解決此問題,請參閱疑難排解驗證錯誤


此文章是否有幫助?


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