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

2 分的閱讀內容
0

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

簡短描述

OpenSearch Service 主控台中的監控索引標籤會顯示叢集中運作狀態最不良的索引狀態。顯示紅色狀態的叢集狀態並不表示您的叢集已關閉。此狀態表示至少有一個主碎片及其複本不會分配到節點。如果叢集狀態顯示黃色狀態,則所有索引的主碎片都已分配到叢集中的節點。但是,一個或多個複本碎片沒有分配到任何節點。

**注意:**在您先解決紅色叢集狀態之前,請勿重新設定域。如果您嘗試在域處於紅色叢集狀態時重新設定,可能會卡在「處理中」狀態。如需有關叢集卡在「處理中」狀態的詳細資訊,請參閱為什麼我的 OpenSearch Service 域卡在「處理中」狀態?

您的叢集可能會因為下列原因進入紅色狀態:

  • 多個資料節點故障
  • 為索引使用損毀或紅色碎片
  • 高 JVM 記憶體壓力或 CPU 使用率
  • 磁碟空間不足或磁碟歪斜
  • 未指派的碎片沒有複本碎片

**注意:**在某些情況下,您可能可以刪除然後從自動快照還原索引,以解決紅色叢集狀態。

由於下列原因,您的叢集可能會進入黃色運作狀態:

  • 建立新索引
  • 沒有足夠的節點可分配給碎片或磁碟歪斜
  • 高 JVM 記憶體壓力
  • 單一節點故障
  • 超過碎片分配重試次數上限
  • 複本碎片的數量大於資料節點的數量
  • 由於重新定位資料碎片,正在進行藍色或綠色部署

注意:如果您的黃色叢集狀態無法自行解決,您可以透過更新索引設定或手動重新路由未指派的碎片來解決狀態。如果您的黃色叢集狀態無法自行解決,請識別並疑難排解根本原因。若要避免出現黃色叢集狀態,請套用叢集運作狀態最佳實務

解決方法

識別未指派碎片的原因

若要識別未指派的碎片,請執行下列步驟:

1.    列出未指派的碎片:

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

2.    擷取為什麼未指派該碎片的詳細資訊:

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

3.    (選用) 對於紅色叢集狀態,請刪除有問題的索引,識別並解決根本原因:

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

然後,識別可用的快照並從快照還原索引

curl -XGET 'domain-endpoint/_snapshot?pretty'

對於黃色叢集狀態,請解決根本原因,以便分配碎片。

疑難排解紅色或黃色叢集狀態

沒有足夠的節點可分配給碎片

複本碎片不會指派給與其主碎片相同的節點。具有複本碎片的單一節點叢集始終以黃色叢集狀態初始化。單一節點叢集會以這種方式初始化,是因為 OpenSearch Service 沒有其他可用的節點可以指派複本。

對於 OpenSearch Service 7.x 版及更新版本,cluster.max_shards_per_node 設定還有一個預設限制為 "1,000"。最佳實務是維持 cluster.max_shards_per_node 設定為預設值 "1,000"。如果您設定碎片分配篩選條件來控制 OpenSearch Service 如何分配碎片,則碎片可能會因為篩選後沒有足夠的節點而變為未指派。若要避免此節點短缺,請增加您的節點數量。確認每個主碎片的複本數量小於資料節點的數量。您也可以減少複本碎片的數量。如需詳細資訊,請參閱調整 OpenSearch Service 域大小OpenSearch Service 碎片分配解密

磁碟空間不足或磁碟歪斜

如果磁碟空間不足,您的叢集可能進入紅色或黃色運作狀態。OpenSearch Service 必須有足夠的磁碟空間來容納碎片,才能分發碎片。

若要檢查叢集中每個節點有多少可用儲存空間,請使用下列語法:

$ curl domain-endpoint/_cat/allocation?v

如需有關儲存空間問題的詳細資訊,請參閱如何疑難排解 OpenSearch Service 域中儲存空間不足問題?

嚴重的磁碟歪斜也可能導致某些資料節點的儲存空間不足問題。如果您決定重新分配任何碎片,碎片可能會在碎片分發期間變為未指派。若要解決此問題,請參閱如何重新平衡 OpenSearch Service 叢集中不均勻的碎片分佈?

以磁碟為基礎的碎片分配設定也可能導致碎片未指派。例如,如果 cluster.routing.allocation.disk.watermark.low 指標設定為 50 GB,則指定的磁碟空間數量必須可用於碎片分配。

若要檢查現有的以磁碟為基礎的碎片分配設定,請使用下列語法:

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

若要解決磁碟空間問題,請考慮下列方法:

  • 刪除黃色和紅色叢集的任何不需要的索引。
  • 刪除紅色叢集的紅色索引
  • 縱向擴展 EBS 磁碟區。
  • 新增更多資料節點。

**注意:**避免在叢集處於紅色運作狀態時對其進行任何組態變更。如果您嘗試在域處於紅色叢集狀態時重新設定,可能會卡在「處理中」狀態。

高 JVM 記憶體壓力

每個碎片分配都會使用 CPU、堆積空間以及磁碟和網路資源。持續的高程度 JVM 記憶體壓力可能會導致碎片分配失敗。例如,如果 JVM 記憶體壓力超過 95%,則會觸發記憶體父斷路器。然後分配執行緒就會取消,導致碎片未指派。

若要解決此問題,請先降低 JVM 記憶體壓力程度。在您的 JVM 記憶體壓力降低之後,請考慮下列額外提示,讓叢集恢復綠色運作狀態:

  • 將預設碎片重試值增加到 "5" 或更高。
  • 停用再啟用複本碎片。
  • 手動重試未指派的碎片。

用於增加重試值的範例 API:

PUT <index-name>/_settings
{
 "index.allocation.max_retries" : <value>
}

如需有關降低 JVM 記憶體壓力的詳細資訊,請參閱如何疑難排解 OpenSearch Service 叢集上的高 JVM 記憶體壓力?

節點故障

當叢集遇到節點故障時,分配給該節點的碎片會變為未指派。當指定索引沒有可用的複本碎片時,即使單一節點故障也可能導致紅色運作狀態。擁有兩個複本碎片和多可用區部署可保護叢集,避免在硬體故障期間遺失資料。

如果您所有的索引都有複本碎片,則單一節點故障可能會導致叢集暫時進入黃色運作狀態。如果您的叢集暫時進入黃色運作狀態,則 OpenSearch Service 會在節點再次運作良好時自動復原。或者,當碎片指派給新節點時,OpenSearch Service 即可復原。

您可以透過檢查您的 Amazon CloudWatch 指標來確認節點故障。如需有關識別節點故障的詳細資訊,請參閱故障的叢集節點

**注意:**同樣的,最佳實務是為每個索引指派一個複本碎片,或使用專用的主節點並啟動區域感知。如需詳細資訊,請參閱 Elasticsearch 網站上的處理故障

超過重試次數上限

在 OpenSearch Service 中,您的叢集不得超過碎片分配的時間限制上限 (5,000 毫秒) 或重試次數 (5 次)。如果叢集已達到最大閾值,則必須手動觸發碎片分配。若要手動觸發碎片分配,請停用再重新啟用索引的複本碎片。

叢集上的組態變更也會觸發碎片分配。有關碎片分配的詳細資訊,請參閱 Elasticsearch 網站上的每個碎片都應當有個去處

**注意:**如果叢集的工作負載繁重,手動觸發碎片分配並不是最佳實務。如果從索引移除所有複本,則索引必須僅依賴主碎片。當節點故障時,您的叢集會進入紅色運作狀態,因為主碎片保持未指派。

若要停用複本碎片,請將 number_of_replicas 的值更新為 "0":

$ curl -XPUT 'domain-endpoint/<indexname>/_settings' -H 'Content-Type: application/json' -d'
{
     "index" : {
          "number_of_replicas" : 0
     }
}

此外,請檢查以確認 index.auto_expand_replicas 設定為 "false"。當叢集恢復綠色狀態時,您可以將 index.number_of_replicas 的值設定回所需的值,以觸發複本碎片的分配。如果碎片分配成功,您的叢集將進入綠色運作狀態。

叢集運作狀態最佳實務

若要解決黃色或紅色叢集狀態,請考慮下列最佳實務:

  • AutomatedSnapshotFailure 設定建議的 Amazon CloudWatch 警示。有了警示,當叢集進入紅色狀態時,您可以確保具備可用的快照來復原索引。
  • 如果您的叢集處於持續繁重的工作負載下,請擴展叢集。如需有關擴充叢集的詳細資訊,請參閱如何縱向擴展 OpenSearch Service 域?
  • 監控磁碟使用率、JVM 記憶體壓力和 CPU 使用率,並確保它們未超過設定的閾值。如需詳細資訊,請參閱建議的 CloudWatch 警示叢集指標
  • 確保所有主碎片都有複本碎片,以防止節點故障。

如需詳細資訊,請參閱 Amazon OpenSearch Service 操作最佳實務

AWS 官方
AWS 官方已更新 1 年前