ElasticSearch(一):基本概念
學習課程連接《Elasticsearch核心技術與實戰》node
基本概念示意圖
索引與文檔更偏向於開發人員的視角,屬於邏輯上的一種概念;節點與分片更偏向於運維人員的視角,屬於物理上的一種概念。api
索引
- Index——索引是文檔的容器,是一類文檔的集合
- Index體現了邏輯空間的概念:每一個索引都有本身的Mapping定義,用於定義包含的文檔的字段名和字段類型
- Shard體現了物理空間的概念:索引中的數據分散在Shard上
- 索引的Mapping與Settings
- Mapping定義文檔字段的類型
- Setting定義不一樣的數據分佈
- 索引的不一樣語意
- 名詞:一個Elasticsearch集羣中,能夠建立不少個不一樣的索引
- 動詞:保存一個文檔到Elasticsearch的過程也叫索引(indexing);索引(動詞)文檔到ElasticSearch的索引(名詞)中
- 名詞:一個B樹索引,一個倒排索引
文檔(Document)
- Elasticsearch是面向文檔的,文檔是全部可搜索數據的最小單位。
- 日誌文件中的日誌項
- 一部電影的具體信息/一張唱片的詳細信息
- MP3播放器裏的一首歌/一篇PDF文檔中的具體內容
- 文檔會被序列化成JSON格式,保存在Elasticsearch中
- JSON對象由字段組成
- 每一個字段都有對應的字段類型(字符串/數值/布爾/日期/二進制/範圍類型)
- 每一個文檔都有一個惟一的ID
- 你能夠本身指定ID
- 或者經過Elasticsearch自動生成
- 文檔的元數據
_index
——文檔所屬的索引名
_type
——文檔所屬的類型名
_id
——文檔惟一ID
_version
——文檔的版本信息
_scope
——相關性打分
_source
——文檔的原始JSON數據
集羣
- ElasticSearch集羣其實是一個分佈式系統,而分佈式系統須要具有兩個特性:
- 高可用性: 服務可用性:容許有節點中止服務;數據可用性:部分節點丟失,不會丟失數據。
- 可擴展性:隨着請求量的不斷提高,數據量的不斷增加,系統能夠將數據分佈到其餘節點,實現水平擴展。
- Elasticsearch的分佈式架構
- 不一樣的集羣經過不一樣的名字來區分,默認名字
elasticsearch
- 經過配置文件修改,或者在命令行中
-E cluster.name=geektime
進行設定
- 一個集羣能夠有一個或者多個節點
節點
- 節點是一個Elasticsearch的實例,本質上就是一個Java進程。
- 每一個節點都有名字,能夠經過配置文件進行配置,也能夠經過命令行進行指定,如:-E node.name=node1。
- 每一個節點在啓動以後,會被分配一個UID,保存在data目錄下。
節點類型
- Master-Eligible Node與Master Node
- 每一個節點啓動以後,默認就是一個Master Eligible節點,固然能夠在配置文件中將其禁止,node.master:false。
- Master-Eligible Node能夠參加選主流程,成爲Master Node。
- 當第一個節點啓動時,它會將其選舉爲Master Node。
- 每一個節點都保存了集羣狀態,但只有Master Node才能修改集羣的狀態。
- Data Node
- 能夠保存數據的節點,負責保存分片數據,在數據擴展上起到相當重要的做用。
- Coordinating Node
- 它經過接受Rest Client的請求,會將請求分發到合適的節點,最終將結果聚集到一塊兒。
- 每一個節點都默認起到Coordinating Node的職責
- Hot &Warm Node
- 不一樣硬件配置的Data Node,來實現Hot &Warm架構,下降集羣部署的成本。
- Machine Learning Node
節點類型配置
- 開發環境中一個節點能夠承擔多種角色。
- 生成環境中,應該設置單一的節點角色
master eligible |
node.master |
true |
data |
node.data |
true |
ingest |
node.ingest |
true |
coordinating only |
無 |
設置其餘類型所有爲false |
machine learning |
node.ml |
true |
分片
- 主分片用於解決數據水平擴展的問題,經過主分片,能夠將數據分佈到集羣內的全部節點之上。
- 一個主分片是一個運行的Lucene的實例
- 主分片數是在索引建立時指定,後續不容許修改,除非Reindex
- 副本用於解決數據高可用的問題,它是主分片的拷貝。
- 副本分片數能夠動態調整
- 增長副本數,在必定程度上能夠提升服務的可用性
分片的設定
對於生產環境中分片的設定,須要提早作好容量規劃,由於主分片數是在索引建立時預先設定的,後續沒法修改。架構
- 分片數設置太小
- 致使後續沒法增長節點進行水平擴展。
- 致使分片的數據量太大,數據在從新分配時耗時;
- 分片數設置過大
- 影響搜索結果的相關性打分,影響統計結果的準確性;
- 單個節點上過多的分片,會致使資源浪費,同時也會影響性能;
Index 相關 API
#查看索引相關信息
GET kibana_sample_data_ecommerce
#查看索引的文檔總數
GET kibana_sample_data_ecommerce/_count
#查看前10條文檔,瞭解文檔格式
POST kibana_sample_data_ecommerce/_search
{
}
#_cat indices API
#查看indices
GET /_cat/indices/kibana*?v&s=index
#查看狀態爲綠的索引
GET /_cat/indices?v&health=green
#按照文檔個數排序
GET /_cat/indices?v&s=docs.count:desc
#查看具體的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt
#How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc
Cluster相關API
GET _cat/nodes?v
GET /_nodes/es7_01,es7_02
GET /_cat/nodes?v
GET /_cat/nodes?v&h=id,ip,port,v,m
GET _cluster/health
GET _cluster/health?level=shards
GET /_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
GET /_cluster/health/kibana_sample_data_flights?level=shards
# cluster state
GET /_cluster/state
#cluster get settings
GET /_cluster/settings
GET /_cluster/settings?include_defaults=true
GET _cat/shards
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason