ElasticStack學習(三):ElasticSearch基本概念

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

相關文章
相關標籤/搜索