-
Elasticsearch自頂向下的架構體系
-
文檔,索引
文檔(Document)
-
- Elasticsearch是面向文檔的,文檔是所有可搜索數據的最小單位
- 文檔會被序列化成JSON格式,保持在Elasticsearch中
- 每一個文檔都有一個UniqueID
文檔的元數據
-
- 元數據,用於標注穩定的相關信息
- _index -文檔所屬的索引名
- _type -文檔所屬的類型名
- _source-文檔的原始Json數據
- _version-文檔的版本信息
- _score-相關性打分
索引(Index)
Index- 索引是文檔的容器,是一類文檔的結合
-
- Index體現了邏輯空間的概念:每一個索引都有自己的Mapping定義,用於定義包含的文檔的字段名和字段類型
- Shard體現了物理空間的概念:索引中的數據分散在Shard上
索引的Mapping與Settings
-
- Mapping定義文檔字段的類型
- Setting定義不同的數據分布
Type
-
- 在7.0之前,一個index可以設置多個Types
- 6.0開始,Type已經被Deprecated。7.0開始一個索引只能創建一個Type -"_doc"
-
集群/節點/分片/副本
- 分布式系統的可用性與擴展性
- 高可用
- 服務可用性-允許有節點停止服務
- 數據可用性-部分節點丟失,不會丟失數據
- 可擴展性
- 存儲的水平擴容 請求量提升/數據的不斷增長(將數據分布到所用節點上)
- 高可用
- 集群
- 多台Es服務器的結合的統稱叫ES集群
- 集群的健康狀態
- Green-主分片與副本都正常分配
- Yellow-主分片全部正常分配,有副本分片未能正常分配
- Red-有主分片未能分配(例如 當服務器的磁盤容量超過85%時,去創建了一個新的索引)
- 節點

-
- 節點是一個Elasticsearch的實例,本質上就是一個JAVA進程
- 每一個節點都有名字,通過配置文件配置,或者啟動時候指定
- 每一個節點在啟動之后,會分配一個UID,保存在data目錄下
- Master-eligible nodes 和Master Node(主節點)
- 每個節點啟動后,默認就是一個Master eligible節點(可以設置node.master:false禁止)
- Master-eligible節點可以參加選主流出,成為Master節點
- 每個節點上都保存了集群的狀態,只有Master節點才能修改集群的狀態信息
- 集群狀態(cluster state)維護了一個集群中必要的信息所有節點的信息/所有的索引和其相關的Mapping與Setting信息/分片的路由信息
- 任意節點都能修改信息會導致數據的不一致性
- DataNode(數據節點)
-
可以保存數據的節點。負責保存分片數據。在數據擴展上起到了至關重要的作用
-
- Coordination Node(協調節點)
-
負責接收Client的請求,將請求分發到合適的節點,最終把結果匯集到一起
- 每個節點默認都起到了Coordination Node的職責
-
- Hot&Warm Node
-
不同硬件配置的Data Node,用來實現Hot&Warm架構,降低集群部署的成本
-
- Machine Learning Node
- 負責跑機器學習的Job,用來做異常檢測
- Ingest Node
-
Ingest Node 可以看作是數據前置處理轉換的節點,支持 pipeline管道 設置,可以使用 ingest 對數據進行過濾、轉換等操作,類似於 logstash 中 filter 的作用。
-
- Tribe Node
-
5.3開始使用Cross Cluster Search)TribeNode 連接到不同的Elasticsearch集群,並且支持將這些集群當成一個單獨的集群處理
-
節點角色划分及資源使用情況
角色
|
描述
|
存儲
|
內存
|
計算
|
網絡
|
數據節點
|
存儲和檢索數據
|
極高
|
高
|
高
|
中
|
主節點
|
管理集群狀態
|
低
|
低
|
低
|
低
|
Ingest 節點
|
轉換輸入數據
|
低
|
中
|
高
|
中
|
機器學習節點
|
機器學習
|
低
|
極高
|
極高
|
中
|
協調節點
|
請求轉發和合並檢索結果
|
低
|
中
|
中
|
中
|
- 分片(Primary Shard & Replica Shard)
-
- 將數據切分放在每個分片中,分片又被放到集群中的節點上。
- 每個分片都是獨立的lucene實例
- 分片數設置過小
- 導致后續無法增加節點實現水平擴展
- 單個分片的數據量太大,導致數據重新分配耗時
- 分片數設置過大
- 影響搜索結構的相關性打分,影響統計結果的准確性
- 單個節點上過多的分片,會導致資源浪費,同時也會影響性能
- 分片為主分片和備份分片
- 副本分片數提高了數據冗余量
- 主分片掛掉以后能夠自動由副本分片升為主分片
- 備份分片還能夠降低主分片的查詢壓力(會消耗更多的系統性能)
-
REST API
Elasticsearch提供了一個非常全面和強大的REST API,使用它與集群進行交互
-
- 檢查群集,節點和索引運行狀況,狀態和統計信息
- 管理您的群集,節點和索引數據和元數據
- 對索引執行CRUD(創建,讀取,更新和刪除)和搜索操作
- 執行高級搜索操作,例如分頁,排序,過濾,腳本編寫,聚合等