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的實例;

    注意:一個節點對應一個ES實例;

      一個節點可以有多個index(索引);

      一個index可以有多個shard(分片);

      一個分片是一個lucene index(此處的index是lucene自己的概念,與ES的index不是一回事);

    b)主分片數是在索引創建時指定,后續不允許修改,除非Reindex;

  2)Replica Shard(副本)

    可以解決數據高可用的問題,它是主分片的拷貝。

    a)副本分片數可以動態調整;

    b)增加副本數,在一定程度上可以提高服務的可用性;

  3)分片的設定

  對於生產環境中分片的設定,需要提前做好容量規划,因為主分片數是在索引創建時預先設定的,后續無法修改。

    a)分片數設置過小

      導致后續無法增加節點進行水平擴展。

      導致分片的數據量太大,數據在重新分配時耗時;

    b)分片數設置過大

      影響搜索結果的相關性打分,影響統計結果的准確性;

      單個節點上過多的分片,會導致資源浪費,同時也會影響性能;

 7、ElasticSearch健康狀況的查看

  

  1)Green:主分片與副本都正常分配;

  2)Yellow:主分片全部正常分配,有副本分片未能正常分配;

  3)Red:有主分片未能分配;

8、總結

  通過上面介紹,我們可以知道,索引與文檔更偏向於開發人員的視角,屬於邏輯上的一種概念;節點與分片更偏向於運維人員的視角,屬於物理上的一種概念。

 

  大家可關注我的公眾號

  

  知識學習來源:《Elasticsearch核心技術與實戰》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM