作者:來自 Elastic?Kofi Bartlett
解釋如何防止和處理磁盤過滿(過度使用)以及磁盤容量未被充分利用的情況。
想獲得 Elastic 認證?了解下一次 Elasticsearch Engineer 培訓的時間吧!
Elasticsearch 擁有許多新功能,幫助你為自己的使用場景構建最佳搜索解決方案。瀏覽我們的示例筆記本了解更多內容,開始免費云端試用,或立即在本地機器上嘗試 Elastic。
磁盤管理在任何數據庫中都非常重要,Elasticsearch 也不例外。如果你沒有足夠的磁盤空間,Elasticsearch 將停止向該節點分配分片。這最終會導致你無法向集群寫入數據,應用程序可能因此面臨數據丟失的風險。另一方面,如果你有太多磁盤空間,那么你就為不需要的資源付出了額外成本。
關于水位線的背景 - watermarks
在你的 Elasticsearch 集群中有各種 “水位線 ”閾值,用于幫助你跟蹤可用磁盤空間。隨著節點上的磁盤逐漸填滿,第一個被觸發的閾值是 “low disk watermark - 低磁盤水位線”。第二個閾值是“high?disk watermark?threshold - 高磁盤水位線閾值”。最后,會達到 “disk flood stage - 磁盤洪水階段”。一旦超過這個閾值,集群將阻止寫入所有在該節點上有一個分片(主分片或副本分片)的索引。讀取(搜索)仍然是可行的。
如何防止和處理磁盤過滿(過度使用)的情況
當你的 Elasticsearch 磁盤過滿時,有多種方法可以處理:
- 刪除舊數據:通常,數據不應永久保存。防止和解決磁盤過滿的一種方法是確保當數據達到一定年齡時,被可靠地歸檔并刪除。可以使用 ILM 來實現這一點。
- 增加存儲容量:如果你不能刪除數據,可能需要添加更多數據節點或增加磁盤容量,以便保留所有數據而不影響性能。如果你需要為集群增加存儲容量,應該考慮是否只需要增加存儲容量,還是也需要按比例增加 RAM 和 CPU 資源(見下面關于磁盤大小、RAM 和 CPU 比例的部分)。
如何為你的 Elasticsearch 集群增加存儲容量
- 增加數據節點數量:請記住,新節點應與現有節點大小相同,并使用相同的 Elasticsearch 版本。
- 增加現有節點的大小:在基于云的環境中,通常可以輕松增加現有節點的磁盤大小和 RAM/CPU。
- 僅增加磁盤大小:在基于云的環境中,通常可以相對輕松地增加磁盤容量。
- 快照與還原:如果你愿意通過自動化流程從備份中按需檢索舊數據,你可以對舊索引進行快照、刪除它們,并在需要時從快照中臨時還原數據。
- 減少每個分片的副本數:另一種減少數據的方式是減少每個分片的副本數量。為了實現高可用性,通常每個分片會有一個副本,但當數據變舊時,你可能可以在沒有副本的情況下運行。這通常適用于數據是持久性的,或你有備份可以在需要時還原。
- 創建告警:為了防止未來磁盤被填滿并主動采取行動,你應該根據磁盤使用情況創建告警,當磁盤開始填滿時會通知你。
如何防止和處理磁盤容量未被充分利用的情況
如果你的磁盤容量未被充分利用,有多種方法可以減少集群中的存儲體積。
如何減少 Elasticsearch 集群的存儲體積
以下是幾種減少集群存儲體積的方法:
1 . 減少數據節點數量
如果你希望同時減少數據存儲以及 RAM 和 CPU 資源,這是一種最簡單的策略。下線不必要的節點通常可以帶來最大的成本節省。
在下線節點之前,你應當:
- 確保要下線的節點不是必須的 MASTER 節點。你應始終至少保留三個擁有 MASTER 角色的節點。
- 將數據分片從要下線的節點遷移出去。
2. 用更小的節點替換現有節點
如果你不能進一步減少節點數量(通常最小配置為 3 個節點),那么你可以考慮縮小現有節點的規格。請記住,建議所有數據節點的 RAM 和磁盤大小相同,因為分片是根據每個節點上的分片數量來平衡的。
操作流程如下:
- 向集群添加新的、更小的節點
- 將分片從要下線的節點遷移出去
- 關閉舊節點
3. 減少節點的磁盤大小
如果你只想減少節點上的磁盤大小,而不改變整個集群的 RAM 或 CPU,那么你可以為每個節點減少磁盤容量。減少 Elasticsearch 節點的磁盤大小并不是一個簡單的過程。
最簡單的方法通常是:
- 從節點上遷移分片
- 停止該節點
- 為節點掛載一個合適大小的新數據卷
- 將所有數據從舊磁盤卷復制到新卷
- 卸載舊卷 A
- 啟動節點并將分片遷移回該節點
這個過程要求其他節點有足夠容量來臨時存放該節點的分片。在很多情況下,管理這個過程的成本可能會超過節省的磁盤開銷。因此,直接用一個具有目標磁盤大小的新節點替換原節點可能更簡單(參見上文 “用更小的節點替換現有節點”)。
當你為不必要的資源付費時,顯然可以通過優化資源使用來降低成本。
磁盤大小、RAM 和 CPU 之間的關系
集群中磁盤容量與 RAM 的理想比例取決于你具體的使用場景。因此,在考慮更改存儲容量時,你也應該評估當前的磁盤/RAM/CPU 比例是否平衡,以及是否需要按比例增加或減少 RAM/CPU。
RAM 和 CPU 的需求取決于索引活動的數量、查詢的數量和類型,以及被搜索和聚合的數據量。這些通常與存儲在集群中的數據量成正比,因此也應與磁盤大小相關。
磁盤容量與 RAM 之間的比例會根據使用場景的不同而變化。以下是一些示例:
Index activity | Retention | Search activity | Disk capacity | RAM | |
---|---|---|---|---|---|
Enterprise search app | Moderate log ingestion | Long | Light | 2TB | 32GB |
App monitoring | Intensive log ingestion | Short | Light | 1TB | 32GB |
E-commerce | Light data indexing | Indefinite | Heavy | 500GB | 32GB |
請記住,修改節點機器的配置必須小心進行,因為這可能涉及節點停機,你需要確保分片不會開始遷移到其他已經超負荷的節點上。
原文:How to optimize Elasticsearch disk space and usage - Elasticsearch Labs