本文由雲+社區發表作者:老生薑
本文由雲+社區發表
一、遇到的問題
與大多數分散式系統一樣,Elasticsearch按照一定的Hash規則把用戶數據切分成多個分片,然後打散到不同機器進行存儲,從而實現大規模數據的分散式存儲。
cluster.png
然而在一些複雜的應用場景中使用Elasticsearch,經常會遇到分片過多引發的一系列問題。起初我們在支撐內部某業務時,單集群內有約1000個子業務,大部分子業務保留31天的數據。如果每個子業務按天滾動建立Index,每個Index 5個分片、一主兩從共三副本的情況下,集群內部會有多達45w~個分片。在集群內分片過多時,經常遇到下面這些問題:
1. 創建分片慢:Elasticsearch創建分片的速度會隨著集群內分片數的增加而變慢。以ES 5.5.2版本、3節點集群為例,在默認配置下,當集群分片數超過1w時,創建index的耗時一般在幾十秒甚至以上。 2. 集群易崩潰:在凌晨觸發Elasticsearch自動創建Index時,由於創建速度太慢,容易導致大量寫入請求堆積在內存,從而壓垮集群。 3. 寫入拒絕:分片過多的場景中,如果不能及時掌控業務變化,可能經常遇到單分片記錄超限、寫入拒絕等問題。
二、解決過程
三、後續
目前,Elasticsearch的分片均衡策略尚有瑕疵,例如:1. 機器的空間利用不是非常均衡,對於此類場景,用戶可暫時通過調整機器空間的高低水位線配置觸發數據均衡;2. 當集群擴容新節點時,Elasticsearch會把大量新建分片分配到新機器,導致新機器壓力過高,目前用戶可臨時通過index.routing.allocation.total_shards_per_node配置進行限制。
這是我們後續在分片使用方面的優化工作,通過直接優化分片均衡策略,更優雅的解決上述問題。如果大家有分片使用方面的問題 或 經驗,歡迎一起交流討論!
此文已由騰訊雲+社區在各渠道發布
獲取更多新鮮技術乾貨,可以關注我們騰訊雲技術社區-雲加社區官方號及知乎機構號
推薦閱讀: