- 背景
- 上行資料寫入
- 下行資料讀取
- es優化邏輯
- 總結
背景
随着日志量的增加,es 叢集需要不停的調整,結構層面的冷熱資料分離、master 和 client 節點的分離,es 叢集層面的 index 優化、flush 優化、merge 優化、記憶體熔斷優化,系統層面的 GC、檔案描述符、程序數、關閉交換分區調整等等。
其實 es 優化是一個法無定法的事兒,并不是死闆的調固定參數,而是要不停的去試各種參數值在自己的業務場景下哪個表現最好,但是總結起來,首先了解了 es 的資料寫入和讀取過程,才知道如何下手,我們做的所有調優都是為了更快的索引速度、更快更大資料量的搜尋性能、更穩定的服務。
下面從上下行的角度做個介紹。
上行資料寫入
下圖将生産環境裡真實的寫入過程進行完全的抽象并展現出來,es 裡面有很多的概念,這個網上有很多介紹,不展開說。
從這張圖看,首先資料的寫入不依賴 master 節點,其實讀取也是一樣的,每一個節點都可以作為協調節點處理請求,并将資料路由到資料該有的節點,每個節點都可以查詢到叢集和文檔的詳細資訊,那 master 的作用是什麼呢?
es 叢集 master 節點的作用是維護元資訊和管理叢集狀态,master 節點隻是維護元資訊并不是所有元資訊的存放點,它負責了删除和建立索引等系列操作,但資料的寫入和資料的查詢都不需要經過 master 節點的。

資料寫入的整個過程如下:
資料寫入請求——> 協調節點接收後資料路由處理——> 存入對應資料節點的 index buffer 并記錄 translog 日志——> 經過 refresh 重新整理為 segment 存入檔案緩存并變為可搜尋——> 資料永久重新整理到磁盤并清空 translog 日志
到此一次資料就寫完了,同時背景根據 merge 政策進行段的合并操作,在一個索引中,segment 越少,搜尋效率越高,一個 shard 最小可以 merge 合并成一個 segment,segment 就是倒序索引。
下行資料讀取
從整體上看,下行資料的搜尋沒有資料寫入那麼複雜,es 叢集也是類似于 map reduce 的方式進行查詢的,分層聚合計算,中間會有打分制等算法,最後在 client 節點做結果彙聚傳回給用戶端。
全過程大緻是當用戶端節點收到 search 請求後,計算出牽涉到的 shard 并将請求分發出去,收到請求的節點進行第一步的彙聚,然後将彙聚結果傳回到 client 節點,client 節點再次處理後,将結果發給用戶端。
es 叢集優化邏輯
總結
知道了 es 的寫入和查詢原理後,就可以根據實際的業務場景做出調整,搭建過程可以進行分層次的調優,靈活處理線上問題。
轉自 : https://mp.weixin.qq.com/s/_nhI-EEev9FJQhu7gcWdRQ