ES時面向文件的,文件是所有課搜尋的最小單位
文件會被序列化城JSON格式,儲存在ES裡面
每個文件有個UNIQUE ID -可以自動生成也可以指定
JSON文件
一篇文件包含一系列的欄位,類似資料庫-表裡的一條記錄(ROW)
文件格式靈活,不需要預先規定格式
類似MYSQL裡面的CHAR\VARCHAR型別
,可以自己指定,也可以ES自動推算,支援陣列、跟巢狀TODO未懂
文件的後設資料
索引
文件裡的_index 對應索引的名TYPE
7.0開始,一個索引只能建立一個TYPE-‘_doc’
類似INODB的概念
抽象與類比
REST API-方便被各種語言呼叫
節點
節點是一個ES的例項
本質就是一個JAVA程式
一臺機器上可以執行多個ES程式
每個節點都有名字,通過配置檔案配置,或者啟動
-E node.name=lsk
指定每個節點啟動之後,會分配一個UID,儲存在data目錄下
不同節點承擔不同角色。
Master-eligible nodes
每個節點啟動之後,預設就是Master eligible節點
- 可以設定 node.master:false 禁止
Mater-eligible 節點可參加選主流程,成為Master節點
當第一個節點啟動時候,它會將自己選舉城Mater節點
每個節點都儲存了叢集的狀態,只有Master節點才能修改叢集的狀態資訊
- 叢集狀態(Cluster State) ,維護了一個叢集中必要的資訊
- 所有節點資訊
- 所有的索引和其相關的Mapping 與 Setting 資訊
- 分片的路由資訊
- 如果任意節點都能修改資訊導致資料不一致
Data Node
- 可以儲存資料的節點,負責儲存分片資料。
Coordinating Node
- 負責接收Client的請求,將請求分發到合適的節點,最終把結果匯聚到一起
- 每個節點預設都起到 Coorinating Node的職責
其他的節點型別
- Hot & Warm Node (冷熱節點)
- 不同的硬體配置的Data Node,用來實現Hot(熱資料) & Warn(舊資料)架構,以降低叢集部署的成本
- Machine Learning Node
- 負責跑機器學習的JOB,用來做異常檢測
- Tribe Node ( 未來要被淘汰)
- 5.3 開始使用 Cross Cluster Serach
- 叢集狀態(Cluster State) ,維護了一個叢集中必要的資訊
配置節點型別
分片(Primary Shard & Replica Shard)
主分片,用來解決資料水平擴充套件問題。通過中分片,可以將資料分佈到叢集內的所有節點之上
- 一個分片是一個執行的Lucene的例項
- 主分片數在索引建立時指定,後期不允許修改,除非 Reindex
副本,解決資料高可用問題。分片是主分片的拷貝
- 副本分片數,可以動態的調整
- 增加副本數,可以在一個程度上提高服務的可用性(讀取的吞吐)
圖中,3個主分片分散到3個節點上,副本分配到其他節點上
分片的設定
- 對於生產環境中分片的設定,需要提前組好容量規劃
- 分片數設定過小
- 導致後續無效增加節點實現水平擴充套件
- 單個分片的資料量太大,導致資料重新分配耗時
- 分片數設定過大,7.0開始,預設主分片設定成1(之前是5),解決了 over-sharding 的問題
- 影響搜素結果的相關性打分,影響統計結果的準確性
- 單個節點上過多的分片,會導致資源的浪費,同時也會影響效能
- 分片數設定過小
ES提供API ,瞭解叢集情況
- Green - 主分片跟副本都正常分配
- Yellow - 主分片全部分配正常,有副本分片問能正常分配
- Red - 有主分片未能分配
- 例如:有磁碟容量超過85%時,去建立新的索引
GET _cluster/health //檢視健康 { "cluster_name" : "lsk", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 2, "active_shards" : 4, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
GET _cat/nodes // 相關node資訊 //172.22.0.2 35 96 1 0.00 0.01 0.05 dim * es7_01 //172.22.0.4 33 96 1 0.00 0.01 0.05 dim - es7_02
GET _cat/shards //分片資訊 .kibana_1 0 p STARTED 4 18.3kb 172.22.0.2 es7_01 .kibana_1 0 r STARTED 4 18.3kb 172.22.0.4 es7_02 .kibana_task_manager 0 p STARTED 2 29.6kb 172.22.0.2 es7_01 .kibana_task_manager 0 r STARTED 2 29.6kb 172.22.0.4 es7_02
- 例如:有磁碟容量超過85%時,去建立新的索引
- 對於生產環境中分片的設定,需要提前組好容量規劃
本作品採用《CC 協議》,轉載必須註明作者和本文連結