Elasticsearch的架構原理可以詳細分為以下幾個方面進行介紹:
一、Elasticsearch基本概念
Elasticsearch(簡稱ES)是一個基于Lucene構建的開源、分布式、RESTful搜索和分析引擎。它支持全文搜索、結構化搜索、半結構化搜索、數據分析、地理位置和對象間關聯關系搜索等功能。ES使用Java編寫,隱藏了Lucene的復雜性,為開發者提供了一套統一的API和client。
二、Elasticsearch節點類型
- Master節點:
- 主要負責:管理索引(如創建、刪除索引)、分配分片、維護元數據、管理集群節點狀態。
- 特點:不負責數據寫入和查詢,比較輕量級。
- 選舉過程:通過Zen Discovery機制找到集群中的其他節點,并建立連接,然后從候選主節點中選舉出一個主節點。
- DataNode節點:
- 主要負責:數據寫入、數據檢索。大部分ES的壓力都集中在DataNode節點上。
- 特點:可以保存數據的節點,負責保存分片數據。
- 決策:由Master Node決定如何把分片分發到數據節點上。
- 其他節點類型:
- Master eligible nodes:可以參與選舉的合格節點,每個節點啟動后默認就是一個Master eligible節點。
- Ingest Node:數據前置處理轉換節點,支持pipeline管道設置,用于對數據進行過濾、轉換等操作。
- Machine Learning Node:負責運行機器學習的Job,用于異常檢測等。
三、分片和副本機制
- 分片(Shard):
- ES將索引的數據分成若干部分,分布在不同的服務器節點中。每個分片是一個獨立的、可讀寫的Lucene索引。
- 主分片數在索引創建時指定,后續不允許修改。
- 副本分片(Replica Shard):
- 是主分片的拷貝,用于實現數據的冗余和高可用性。
- 每個分片可以有多個副本分片,副本分片可以分布在不同的節點上。
四、Elasticsearch重要工作流程
- 文檔寫入原理:
- 選擇任意一個DataNode發送請求,該節點成為coordinating node(協調節點)。
- 通過路由計算公式確定文檔要寫入的分片。
- coordinating node將請求轉發給對應的primary shard所在的DataNode。
- Primary Shard處理請求,寫入數據到索引庫中,并將數據同步到Replica shard。
- 檢索原理:
- client發起查詢請求,某個DataNode接收到請求后成為coordinating node。
- coordinating node將查詢請求廣播到每一個數據節點,數據節點的分片處理查詢請求。
- 各分片將符合條件的數據返回給coordinating node,coordinating node匯總并排序結果后返回給client。
五、數據存儲與索引
- ES使用Lucene作為其底層數據存儲引擎,數據存儲在Lucene索引中。
- ES支持近實時索引,通過refresh、flush和segment合并等機制確保數據的快速檢索和更新。
六、集群管理
- ES通過HTTP協議進行節點之間的通信,實現集群的狀態管理和數據同步。
- 支持集群的彈性伸縮,可以通過添加或移除節點來調整集群的規模。
以上是對Elasticsearch架構原理的詳細介紹,涵蓋了其基本概念、節點類型、分片和副本機制、重要工作流程、數據存儲與索引以及集群管理等方面。
后續會持續更新分享相關內容,記得關注哦!