一、文檔node
1)ElasticSearch是面向文檔的,文檔是全部可搜索數據的最小單位。例如:數據庫
a)日誌文件中的日誌項;數組
b)一張唱片的詳細信息;app
c)一篇文章中的具體內容; 運維
2)在ElasticSearch中,文檔會被序列化成Json格式:機器學習
a)Json對象是由字段組成的;elasticsearch
b)每一個字段都有對應的字段類型(如:字符串、數值、日期類型等);分佈式
3)每一個文檔都有一個惟一的ID(Unique ID)性能
a)能夠本身指定此ID;學習
b)也能夠經過ElasticSearch自動生成;
4)咱們能夠將文檔理解成關係型數據庫中的一條數據記錄,一條記錄包含了一系列的字段。
5)Json文檔的格式不須要預先定義
a)字段的類型能夠指定或者由ElasticSearch自動推算;
b)Json支持數組、支持嵌套,以下圖所示:
6)每個文檔中都包含有一份元數據,元數據的做用主要是用來標註文檔的相關信息,如:
a)_index:文檔所屬的索引名;
b)_type:文檔所屬的類型名(從7.0開始,每個索引只能建立一個Type:_doc,在此以前一個索引是能夠設置多個Type的);
c)_id:文檔的Unqie Id;
d)_source:文檔的原始Json數據;
e)_version:文檔的版本信息;
f)_score:文檔的相關性算分;
二、索引(Index)
1)索引指的就是一類文檔的集合,至關於文檔的容器。
a)索引體現了邏輯空間的概念,每一個索引都有本身的Mapping定義,用來定義所包含的文檔的字段名和字段類型;
b)索引中的數據(文檔)分散在Shard(分片)上,Shard體現了物理空間的概念;
2)索引的Mapping與Setting:
a)Mapping定義文檔字段的類型;
b)Setting定義不一樣的數據分佈;
3)索引的含義:
a)通常說「索引文檔到ElasticSearch的索引中」,前面的索引指的是一個動詞的含義,也就是保存一個文檔到ElasticSearch中。後面的索引是指在ElasticSearch集羣中,能夠建立不少個不一樣的索引;
b)索引分爲:B樹索引和倒排索引,而倒排索引在ElasticSearch中是很是重要的;
三、ElasticSearch與RDBMS的代入理解與類好比下:
二者相對比,若對數據進行全文檢索,以及進行算分時,ElasticSearch更加合適;當涉及的數據事務比較高時,那RDBMS更加合適。在實際生產中,通常是二者進行結合使用。
四、集羣
ElasticSearch集羣其實是一個分佈式系統,而分佈式系統須要具有兩個特性:
1)高可用性
a)服務可用性:容許有節點中止服務;
b)數據可用性:部分節點丟失,不會丟失數據;
2)可擴展性
隨着請求量的不斷提高,數據量的不斷增加,系統能夠將數據分佈到其餘節點,實現水平擴展;
ElasticSearch的集羣經過不一樣的名字來進行區分,默認名字「elasticsearch」;
能夠經過配置文件修改或者命令行修改:-E cluster.name=test
一個集羣中能夠有一個或者多個節點;
五、節點
1)節點是什麼?
a)節點是一個ElasticSearch的實例,其本質就是一個Java進程;
b)一臺機器上能夠運行多個ElasticSearch實例,可是建議在生產環境中一臺機器上只運行一個ElasticSearch實例;
2)每一個節點都有名字,能夠經過配置文件進行配置,也能夠經過命令行進行指定,如:-E node.name=node1
3)每一個節點在啓動以後,會被分配一個UID,保存在data目錄下;
4)Master-Eligible【有資格、勝任者】 Node與Master Node的說明:
a)每一個節點啓動以後,默認就是一個Master Eligible節點,固然能夠在配置文件中將其禁止,node.master:false
b)Master-Eligible Node能夠參加選主流程,成爲Master Node;
c)當第一個節點啓動時,它會將其選舉爲Master Node;
d)每一個節點都保存了集羣狀態,但只有Master Node才能修改集羣的狀態,包括以下:
全部的節點信息;
全部的索引和其相關的Mapping與Setting信息;
分片的路由信息;
5)Data Node與Coordinating【協調、整合】 Node的說明:
a)Data Node:能夠保存數據的節點,負責保存分片數據,在數據擴展上起到相當重要的做用;
b)Coordinating Node:它經過接受Rest Client的請求,會將請求分發到合適的節點,最終將結果聚集到一塊兒,再返回給Client;
每一個節點都默認起到Coordinating Node的職責;
6)Hot Node(熱節點)與Warm Node(冷節點)的說明:
Hot Node:有更好配置的節點,其有更好的資源配置,如磁盤吞吐、CPU速度;
Warm Node:資源配置較低的節點;
7)Machine Learning Node:負責機器學習的節點,經常使用來作異常檢測;
8)配置節點類型
每一個節點在啓動時,會讀取elasticsearch.yml配置文件,來肯定當前節點扮演什麼角色。在生產環境中,應該將節點設置爲單一的角色節點,這樣能夠有更好的性能,更清晰的職責,能夠針對節點的不一樣給予不能的機器配置。
六、分片
1)Primary Shard(主分片)
能夠解決數據水平擴展的問題,經過主分片,能夠將數據分佈到集羣內的全部節點之上。
a)一個主分片是一個運行的Lucene的實例;
注意:一個節點對應一個ES實例;
一個節點能夠有多個index(索引);
一個index能夠有多個shard(分片);
一個分片是一個lucene index(此處的index是lucene本身的概念,與ES的index不是一回事);
b)主分片數是在索引建立時指定,後續不容許修改,除非Reindex;
2)Replica Shard(副本)
能夠解決數據高可用的問題,它是主分片的拷貝。
a)副本分片數能夠動態調整;
b)增長副本數,在必定程度上能夠提升服務的可用性;
3)分片的設定
對於生產環境中分片的設定,須要提早作好容量規劃,由於主分片數是在索引建立時預先設定的,後續沒法修改。
a)分片數設置太小
致使後續沒法增長節點進行水平擴展。
致使分片的數據量太大,數據在從新分配時耗時;
b)分片數設置過大
影響搜索結果的相關性打分,影響統計結果的準確性;
單個節點上過多的分片,會致使資源浪費,同時也會影響性能;
七、ElasticSearch健康情況的查看
1)Green:主分片與副本都正常分配;
2)Yellow:主分片所有正常分配,有副本分片未能正常分配;
3)Red:有主分片未能分配;
八、總結
經過上面介紹,咱們能夠知道,索引與文檔更偏向於開發人員的視角,屬於邏輯上的一種概念;節點與分片更偏向於運維人員的視角,屬於物理上的一種概念。
你們可關注個人公衆號
知識學習來源:《Elasticsearch核心技術與實戰》