1. 程式人生 > >ElasticStack學習(三):ElasticSearch基本概念

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核心技術與實戰》