阿里雲Elasticsearch智能運維繫統最佳實踐

摘要:

隨着業務的增長與發展,不同的Elasticsearch集羣承擔着多厚多樣的功能需求。尤其是當集羣規模增長、業務龐大時,需要耗費大量的精力運維集羣。阿里雲Elasticsearch研發了一套智能運維繫統,可通多專家經驗與數據驅動兩個重要抓手幫助用戶運維集羣、提升業務的穩定性。本篇文章將結合運維常見問題展開阿里雲Elasticsearch智能運維繫統最佳實踐的介紹。

一、診斷集羣異常

最壞的情況,Elasticsearch集羣(後簡稱ES集羣)崩潰,無法正常承擔各項業務。導致ES集羣崩潰的大多數原因是master節點、數據節點的宕機,而出現這些情況絕不是“空穴來風”,智能運維繫統要幫助用戶做的便是“有跡可尋”,從而“有則改之,無則加勉”。

Case 1:節點負載過高,導致節點失聯

以ES集羣的數據節點與master節點爲例,當有任何一個節點負載過高,都可能導致單節點宕機從而挑戰集羣的可用性。而通過系統自動與用戶手動觸發的方式,智能運維繫統可幫助用戶監測過去一段時間內節點負載情況,若存在危險,則提示用戶原因與解決方案,幫助用戶提前獲知、拯救集羣於崩潰邊緣。

Case 2 : 索引副本丟失,數據可靠性受損

索引的副本一方面是保證數據的可靠性,保證在數據丟失的狀態下依舊可以恢復如初,一方面副本數的增加可提高查詢的性能。在存儲空間佔用過滿時,極有可能導致索引副本丟失,檢查副本的存在狀態,可幫助用戶提高數據的可靠性。在集羣重啓的過程中,只有在副本數量完整時才能保證服務的持續進行。

Case 3:數據寫入失敗,集羣壓力過大

在寫操作進行的過程中,可能因集羣壓力,堆積過多的讀寫任務,而對於用戶來說可能會產生所有寫入均返回失敗的誤區。如果在此情況下繼續增加寫入,則可能會引起集羣的崩潰。通過推薦用戶調用線程池查看實際成功、失敗任務情況,使用分批寫入的方式解決寫入堆積困境,給集羣減壓。

二、提升集羣性能

如何在固定配置的情況下更大程度發揮集羣可用性能,是用戶最關心的問題。從Elasticsearch內部邏輯與架構,數據節點是任務載體與執行依託,shard是索引與搜索的主要承擔者,副本是提升性能的重要抓手,分批寫入與防止稀疏是必備方式。如何提升集羣性能,智能運維繫統從數據節點負載、shard合理性以及用戶操作規範三個面入手,幫助用戶挖掘集羣能力。

Case 1:數據節點抓偏離,防止單節點瓶頸

在各數據節點負載均衡的條件下,性能會趨向於最優的實踐。如果發生單節點負載過高,與其他節點產生較大差異,則高負載節點可能成爲“拖油瓶”,拉低整體集羣數據節點任務執行,甚至存在脫離集羣的風險。通過檢測數據節點間的負載偏離情況,能引導用戶均衡負載,提升性能的同時保障穩定性。

Case 2:shard、segment合理性評估,升性能調負載

不同的ES集羣應用場景對性能承載着不同的需求。索引的載體就是shard,搜索結果的返回也是多個shard共同的返回結果。Shard數與節點間的負載均衡、查詢性能和存儲空間利用均有着非常重要的關係。智能運維可讀取用戶索引shard、節點shard,並檢測是否因索引segment過多導致碎片化,引發離線數據寫入過慢,從而提示用戶在適當的時間執行段合併操作,從而提升離線數據的寫入速度。幫助推薦用戶最佳的shard指定情況、在合適的時機執行段合併,從而均衡負載、提升性能、節省空間。

Case 3:規範操作方式,保證狀態合理

在保證index:type=1:1的狀態時,能有效防止稀疏數據的產生,從type個數診斷科可幫助用戶合理化設置,輔以禁用dynamic映射自定義映射類型、別名的日常使用以及使用分批(bulk)合理操作的基本方式,幫助用戶規範化、便捷化操作,加之集羣狀態頻繁變更的監測,可提示用戶減少讀寫,避免對集羣造成更大的壓力,引發更大的風險。

總結:

綜上,是智能運維繫統在診斷集羣異常與提升集羣性能作出的檢測、析因、建議的主要實踐。輔之以集羣狀態走勢的監測圖,從各個狀態診斷項的個數變化,向用戶展示最近時間段內的集羣整體情況,從而全局查看,並增強知識提取、常見問題歸納的統計。

不同的ES集羣在使用智能運維繫統時會有不同的診斷結果,在ES集羣變更的過程中,智能運維繫統可持續跟進,給出用戶ES集羣各個狀態的異常探測、風險規避與調優推薦,從而幫助用戶合理化、科學化、便捷化運維集羣。



本文作者:工程師甲

閱讀原文

本文爲雲棲社區原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章