我的 Amazon OpenSearch Service 叢集中的其中一個節點已關閉,我想要避免這種情況發生。
簡短說明
每個 OpenSearch Service 節點都在獨立的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上執行。故障的節點是沒有回應來自其他節點的活動訊號的執行個體。活動訊號是定期信號,用於監控叢集中的資料節點的可用性。
叢集節點故障的常見原因有:
- Java 虛擬機器 (JVM) 記憶體壓力過高
- 硬體故障
解決方案
檢查故障的節點
1. 登入 OpenSearch Service 主控台。
2. 在導覽窗格的受管理的叢集底下,選擇網域。
3. 選擇您的 OpenSearch Service 網域的名稱。
4. 選擇叢集運作狀態標籤,然後選擇節點指標。如果節點數少於您為叢集設定的數目,則節點已關閉。
**注意:**在變更叢集組態或服務的任何例行維護期間,節點指標可能不準確。這是預期的行為。
察覺 JVM 記憶體壓力過高的情況並進行疑難排解
JVM 記憶體壓力是指用於 OpenSearch Service 叢集中所有資料節點的 Java 堆積百分比。JVM 記憶體壓力過高可能會導致高 CPU 使用率和其他叢集效能問題。
JVM 記憶體壓力取決於以下狀況:
- 叢集上的資料數量與資源量成比例。
- 叢集上的查詢負載。
隨著 JVM 記憶體壓力的增加,會發生以下情況:
- 在 75%:OpenSearch Service 會啟動並行標記清除 (CMS) 垃圾回收器。CMS 回收器會與其他程序一起執行,將暫停和中斷機率降至最低。
**注意:**OpenSearch Service 會將數個垃圾回收指標發佈至 Amazon CloudWatch。這些指標可協助您監控 JVM 記憶體用量。如需詳細資訊,請參閱使用 Amazon CloudWatch 監控 OpenSearch 叢集指標。
- 75% 以上:如果 CMS 回收器無法回收足夠的記憶體且用量保持在 75% 以上,則 OpenSearch Service JVM 會嘗試釋放記憶體。OpenSearch Service JVM 也會嘗試透過減慢或停止處理程序來防止 JVM OutOfMemoryError (OOM) 例外狀況。
- 如果 JVM 繼續增長並且空間未回收,則 OpenSearch Service JVM 將停止嘗試配置記憶體的處理程序。如果重要處理程序已停止,一或多個叢集節點可能會失敗。這是將 CPU 使用率保持在 80% 以下的最佳實務。
若要防止高 JVM 記憶體壓力,請遵循以下最佳實務:
- 避免大範圍查詢,例如萬用字元查詢。
- 避免同時傳送大量請求。
- 確保您具有適當數量的碎片。如需索引策略的詳細資訊,請參閱選擇碎片數目。
- 確保您的碎片在節點之間均勻分配。
- 避免對文字欄位進行彙總。這有助於防止欄位資料增加。您擁有的欄位資料越多,就會耗用更多堆積空間。使用 GET _cluster/stats API 操作來檢查欄位資料。如需詳細資訊,請參閱 Elasticsearch 說明文件中的 fielddata 相關內容。
- 如果您必須對文字欄位進行彙總,請將映射類型變更為關鍵字。如果 JVM 記憶體壓力過高,請使用以下 API 操作來清除欄位資料快取:POST /index_name/_cache/clear (索引層級快取) 和 POST */_cache/clear (叢集層級快取)。
**注意:**清除快取可能會中斷進行中的查詢。
識別並疑難排解硬體故障問題
有時硬體故障可能會影響叢集節點的可用性。若要限制潛在硬體故障的影響,請考量以下因素:
相關資訊
Amazon OpenSearch Service 的操作最佳實務
如何提升我的 Amazon OpenSearch Service 網域容錯能力?
如何縱向擴展或橫向擴展 Amazon OpenSearch Service 網域?
為何我的 Amazon OpenSearch Service 網域停留在「正在處理」狀態?