跳至內容

為什麼我的 OpenSearch Service 叢集處於紅色或黃色狀態?

2 分的閱讀內容
0

我的 Amazon OpenSearch Service 叢集處於紅色或黃色的叢集狀態。

簡短說明

OpenSearch Service 主控台中的 Monitoring(監控) 索引標籤會顯示叢集中運作狀態最不良的索引狀態。當 OpenSearch Service 未配置一個或多個主要碎片及其複本時,會出現紅色狀態。當 OpenSearch Service 已配置所有主要碎片,但尚未配置一個或多個複本碎片時,會出現黃色狀態

**重要:**紅色叢集狀態表示部分資料無法使用。雖然黃色狀態不表示資料遺失,但黃色狀態代表您的叢集缺乏完整備援。若節點發生故障,可能會導致資料遺失。

解決方法

**重要:**若要重新設定網域,您必須先解決紅色叢集狀態。如果嘗試重新設定處於紅色狀態的網域,其可能會卡在「修改中」狀態

識別未指派碎片的原因

若要識別並疑難排解未指派碎片的根本原因,請使用 AWSSupport-TroubleshootOpenSearchRedYellowCluster 執行手冊。如需操作指引,請參閱操作指示中的 AWSSupport-TroubleshootOpenSearchRedYellowCluster

或者,若要手動識別未指派的碎片,請執行以下命令:

curl -XGET 'domain-endpoint/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED

**注意:**將 domain-endpoint 替換為您的網域端點。在輸出中,請記下碎片 ID。

然後執行以下命令以取得該碎片未指派的詳細原因:

curl -XGET 'domain-endpoint/_cluster/allocation/explain?pretty' -H 'Content-Type:application/json' -d'{
    "index": "index-name",
    "shard": shardID,
    "primary": false
}'

**注意:**將 domain-endpoint 替換為您的網域端點、將 index-name 替換為您的索引名稱,並將 shardID 替換為未指派的碎片 ID。如果該碎片為主要碎片,請將 false 替換為 true

紅色或黃色狀態疑難排解

若要識別叢集狀態為黃色或紅色的原因,請執行以下操作:

  • 檢查 ClusterStatus.yellowClusterStatus.redShards.unassignedCPUUtilizationJVMMemoryPressure、以及 FreeStorageSpace Amazon CloudWatch 指標

  • 執行以下查詢以識別受影響的索引:

    GET /_cat/indices?v&health=yellow
    GET /_cat/indices?v&health=red
  • 執行以下查詢以了解整個叢集中碎片未指派的原因:

    GET /_cluster/allocation/explain

    **注意:**此命令的輸出會顯示整個叢集中未指派碎片及其配置狀態的完整檢視。您可以使用這些資訊來取得配置問題的整體概觀。

若要解決紅色叢集狀態,請執行以下命令以刪除紅色索引:

curl -XDELETE 'domain-endpoint/index-names'

**注意:**將 domain-endpoint 替換為您的網域端點,並將 index-names 替換為您的索引名稱。

然後,從快照還原索引

如果您的黃色叢集狀態未自動恢復,請使用有關碎片未指派原因的資訊,以解決根本原因。

沒有足夠的節點可用於配置碎片

主要與複本碎片必須位於不同節點上。因此,具有複本碎片的單一節點叢集在初始化時,總是會以黃色狀態啟動,因為 OpenSearch Service 無法配置複本碎片。

OpenSearch Service 版本 7.x 及更新版本的 cluster.max_shards_per_node 預設配額為 1000。最佳實務是遵循 cluster.max_shards_per_node 預設值。如需詳細資訊,請參閱 OpenSearch 網站上的叢集層級碎片、區塊與任務設定

如果您設定了碎片配置篩選器,則可能因為可用節點不足而導致碎片未指派。如需碎片配置篩選器的詳細資訊,請參閱 OpenSearch 網站上的索引層級索引設定

為避免發生此問題,請採取以下措施:

如需詳細資訊,請參閱 調整 OpenSearch Service 網域大小以及 深入了解 OpenSearch Service 碎片配置

儲存空間問題

如果磁碟空間不足,您的叢集可能會進入紅色或黃色運作狀態。在 OpenSearch Service 分配碎片之前,您的節點必須具備足夠的磁碟空間來容納這些碎片。

若要檢查叢集中每個節點可用的儲存空間量,請執行以下命令:

curl domain-endpoint/_cat/allocation?v

**注意:**將 domain-endpoint 替換為您的網域端點。

如果碎片分配不均,則某些節點可能會在其他節點仍有可用容量時耗盡空間。這可能導致碎片重新配置過程中出現問題,使得 OpenSearch Service 無法在重新平衡期間指派新的碎片。

若要檢查您的碎片分配設定,請執行以下命令:

curl -XGET domain-endpoint/_cluster/settings?include_defaults=true&flat_settings=true

**注意:**將 domain-endpoint 替換為您的網域端點。

最佳實務是定期監控磁碟空間並主動解決磁碟偏斜問題,以維護叢集運作狀態。

如需詳細資訊,請參閱如何疑難排解 OpenSearch Service 網域中的可用儲存空間不足問題?以及如何在 OpenSearch Service 叢集中重新平衡不均的碎片分佈?

高 JVM 記憶體壓力

碎片配置是一個資源密集的程序,會耗用 CPU、堆積空間、磁碟及網路資源。持續的高 Java 虛擬機器 (JVM) 記憶體壓力可能會干擾碎片成功執行配置。若要解決此問題,請對高 JVM 記憶體壓力問題進行疑難排解。在降低 JVM 記憶體壓力後,請採取以下動作以將叢集還原為綠色狀態:

  • 執行下列命令以增加預設的碎片重試值:
    PUT /index-name/_settings
    {
      "index.allocation.max_retries": 10
    }
    
    **注意:**將 index-name 替換為您的索引名稱,並將 10 替換為您的重試值。
  • 將碎片重試值變更為 0 以停用複本碎片。然後再將其變更為正值以重新啟用碎片。

節點故障

節點故障會導致其配置的碎片變為未指派。若沒有複本碎片,即使單一節點故障也可能導致運作狀態為紅色。然而,當您為索引設定複本碎片時,節點故障通常會導致暫時的黃色狀態。此黃色狀態會在 OpenSearch Service 自動復原時出現。當故障節點恢復運作良好狀態,或 OpenSearch Service 將碎片重新指派至其他節點時,黃色狀態即會結束。

為防範硬體故障,請採取以下動作:

如需有關如何識別節點故障的詳細資訊,請參閱叢集節點故障

重複出現的黃色叢集運作狀態

您的叢集可能因以下原因而經常處於黃色運作狀態:

  • 當節點暫時故障且複本碎片未指派時,會發生暫時性的節點故障或重新啟動。
    **注意:**當節點恢復或 OpenSearch Service 重新平衡碎片時,叢集可能會自行復原。
  • 由於資源限制或組態問題,您超出碎片配置故障或重試的配額。
  • 在高資源使用率的叢集中,排程的維護、備份作業或大量負載高峰可能會導致節點波動或拒絕碎片配置。
  • 重複的升級或自動建立的索引可能產生超出叢集容量的新複本。

若要防止並疑難排解重複出現的黃色運作狀態,請採取以下動作:

  • 對於單一節點叢集,請確保所有索引的複本數為 0。
    **注意:**對於單一節點叢集,OpenSearch Service 會自動管理並設定系統索引 (例如 opendistro_security)。您無法修改系統索引的設定。
  • 對於多節點叢集,請至少保留一個複本節點。若需更高的備援能力,請增加節點與複本的數量。
  • 為高可用性與容錯能力設定多可用區域網域
    **注意:**若碎片配置故障,請確認叢集中的節點數量、可用區域及待命組態是否符合叢集需求。
  • 若碎片未能取得記憶體內鎖定,請增加 index.allocation.max_retries 的值。
  • 為避免資源耗盡,請在高負載期間擴展您的網域
  • 若要主動監控資源需求的變化,請為 ClusterStatus.yellowClusterStatus.redJVMMemoryPressureAutomatedSnapshotFailureFreeStorageSpace 指標建立 CloudWatch 警示

如需詳細資訊,請參閱 OpenSearch Service 的營運最佳實務