ElasticStack學習(三):ElasticSearch基本概念
1、文件
1)ElasticSearch是面向文件的,文件是所有可搜尋資料的最小單位。例如:
a)日誌檔案中的日誌項;
b)一張唱片的詳細資訊;
c)一篇文章中的具體內容;
2)在ElasticSearch中,文件會被序列化成Json格式:
a)Json物件是由欄位組成的;
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:文件的相關性算分;
2、索引(Index)
1)索引指的就是一類文件的集合,相當於文件的容器。
a)索引體現了邏輯空間的概念,每個索引都有自己的Mapping定義,用來定義所包含的文件的欄位名和欄位型別;
b)索引中的資料(文件)分散在Shard(分片)上,Shard體現了物理空間的概念;
2)索引的Mapping與Setting:
a)Mapping定義文件欄位的型別;
b)Setting定義不同的資料分佈;
3)索引的含義:
a)一般說“索引文件到ElasticSearch的索引中”,前面的索引指的是一個動詞的含義,也就是儲存一個文件到ElasticSearch中。後面的索引是指在ElasticSearch叢集中,可以建立很多個不同的索引;
b)索引分為:B樹索引和倒排索引,而倒排索引在ElasticSearch中是非常重要的;
3、ElasticSearch與RDBMS的代入理解與類比如下:
兩者相對比,若對資料進行全文檢索,以及進行算分時,ElasticSearch更加合適;當涉及的資料事務比較高時,那RDBMS更加合適。在實際生產中,一般是兩者進行結合使用。
4、叢集
ElasticSearch叢集實際上是一個分散式系統,而分散式系統需要具備兩個特性:
1)高可用性
a)服務可用性:允許有節點停止服務;
b)資料可用性:部分節點丟失,不會丟失資料;
2)可擴充套件性
隨著請求量的不斷提升,資料量的不斷增長,系統可以將資料分佈到其他節點,實現水平擴充套件;
ElasticSearch的叢集通過不同的名字來進行區分,預設名字“elasticsearch”;
可以通過配置檔案修改或者命令列修改:-E cluster.name=test
一個叢集中可以有一個或者多個節點;
5、節點
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配置檔案,來確定當前節點扮演什麼角色。在生產環境中,應該將節點設定為單一的角色節點,這樣可以有更好的效能,更清晰的職責,可以針對節點的不同給予不能的機器配置。
6、分片
1)Primary Shard(主分片)
可以解決資料水平擴充套件的問題,通過主分片,可以將資料分佈到叢集內的所有節點之上。
a)一個主分片是一個執行的Lucene的例項;
b)主分片數是在索引建立時指定,後續不允許修改,除非Reindex;
2)Replica Shard(副本)
可以解決資料高可用的問題,它是主分片的拷貝。
a)副本分片數可以動態調整;
b)增加副本數,在一定程度上可以提高服務的可用性;
3)分片的設定
對於生產環境中分片的設定,需要提前做好容量規劃,因為主分片數是在索引建立時預先設定的,後續無法修改。
a)分片數設定過小
導致後續無法增加節點進行水平擴充套件。
導致分片的資料量太大,資料在重新分配時耗時;
b)分片數設定過大
影響搜尋結果的相關性打分,影響統計結果的準確性;
單個節點上過多的分片,會導致資源浪費,同時也會影響效能;
7、ElasticSearch健康狀況的檢視
1)Green:主分片與副本都正常分配;
2)Yellow:主分片全部正常分配,有副本分片未能正常分配;
3)Red:有主分片未能分配;
8、總結
通過上面介紹,我們可以知道,索引與文件更偏向於開發人員的視角,屬於邏輯上的一種概念;節點與分片更偏向於運維人員的視角,屬於物理上的一種概念。
大家可關注我的公眾號
知識學習來源:《Elasticsearch核心技術與實戰》