ElasticSearch(一):基本概念

ElasticSearch(一):基本概念

學習課程連接《Elasticsearch核心技術與實戰》node


基本概念示意圖

file

索引與文檔更偏向於開發人員的視角,屬於邏輯上的一種概念;節點與分片更偏向於運維人員的視角,屬於物理上的一種概念。api


索引

  • Index——索引是文檔的容器,是一類文檔的集合
    • Index體現了邏輯空間的概念:每一個索引都有本身的Mapping定義,用於定義包含的文檔的字段名和字段類型
    • Shard體現了物理空間的概念:索引中的數據分散在Shard上
  • 索引的Mapping與Settings
    • Mapping定義文檔字段的類型
    • Setting定義不一樣的數據分佈
  • 索引的不一樣語意
    • 名詞:一個Elasticsearch集羣中,能夠建立不少個不一樣的索引
    • 動詞:保存一個文檔到Elasticsearch的過程也叫索引(indexing);索引(動詞)文檔到ElasticSearch的索引(名詞)中
    • 名詞:一個B樹索引,一個倒排索引


文檔(Document)

  • Elasticsearch是面向文檔的,文檔是全部可搜索數據的最小單位。
    • 日誌文件中的日誌項
    • 一部電影的具體信息/一張唱片的詳細信息
    • MP3播放器裏的一首歌/一篇PDF文檔中的具體內容
  • 文檔會被序列化成JSON格式,保存在Elasticsearch中
    • JSON對象由字段組成
    • 每一個字段都有對應的字段類型(字符串/數值/布爾/日期/二進制/範圍類型)
  • 每一個文檔都有一個惟一的ID
    • 你能夠本身指定ID
    • 或者經過Elasticsearch自動生成
  • 文檔的元數據
    • _index——文檔所屬的索引名
    • _type——文檔所屬的類型名
    • _id——文檔惟一ID
    • _version——文檔的版本信息
    • _scope——相關性打分
    • _source——文檔的原始JSON數據


集羣

  • ElasticSearch集羣其實是一個分佈式系統,而分佈式系統須要具有兩個特性:
    • 高可用性: 服務可用性:容許有節點中止服務;數據可用性:部分節點丟失,不會丟失數據。
    • 可擴展性:隨着請求量的不斷提高,數據量的不斷增加,系統能夠將數據分佈到其餘節點,實現水平擴展。
  • Elasticsearch的分佈式架構
    • 不一樣的集羣經過不一樣的名字來區分,默認名字elasticsearch
    • 經過配置文件修改,或者在命令行中 -E cluster.name=geektime進行設定
    • 一個集羣能夠有一個或者多個節點


節點

  • 節點是一個Elasticsearch的實例,本質上就是一個Java進程。
  • 每一個節點都有名字,能夠經過配置文件進行配置,也能夠經過命令行進行指定,如:-E node.name=node1。
  • 每一個節點在啓動以後,會被分配一個UID,保存在data目錄下。


節點類型

  • Master-Eligible Node與Master Node
    • 每一個節點啓動以後,默認就是一個Master Eligible節點,固然能夠在配置文件中將其禁止,node.master:false。
    • Master-Eligible Node能夠參加選主流程,成爲Master Node。
    • 當第一個節點啓動時,它會將其選舉爲Master Node。
    • 每一個節點都保存了集羣狀態,但只有Master Node才能修改集羣的狀態。
  • Data Node
    • 能夠保存數據的節點,負責保存分片數據,在數據擴展上起到相當重要的做用。
  • Coordinating Node
    • 它經過接受Rest Client的請求,會將請求分發到合適的節點,最終將結果聚集到一塊兒。
    • 每一個節點都默認起到Coordinating Node的職責
  • Hot &Warm Node
    • 不一樣硬件配置的Data Node,來實現Hot &Warm架構,下降集羣部署的成本。
  • Machine Learning Node
    • 負責機器學習的節點,經常使用來作異常檢測。


節點類型配置

  • 開發環境中一個節點能夠承擔多種角色。
  • 生成環境中,應該設置單一的節點角色
節點類型 配置參數 默認值
master eligible node.master true
data node.data true
ingest node.ingest true
coordinating only 設置其餘類型所有爲false
machine learning node.ml true


分片

  • 主分片用於解決數據水平擴展的問題,經過主分片,能夠將數據分佈到集羣內的全部節點之上。
    • 一個主分片是一個運行的Lucene的實例
    • 主分片數是在索引建立時指定,後續不容許修改,除非Reindex
  • 副本用於解決數據高可用的問題,它是主分片的拷貝。
    • 副本分片數能夠動態調整
    • 增長副本數,在必定程度上能夠提升服務的可用性


分片的設定

對於生產環境中分片的設定,須要提早作好容量規劃,由於主分片數是在索引建立時預先設定的,後續沒法修改。架構

  • 分片數設置太小
    • 致使後續沒法增長節點進行水平擴展。
    • 致使分片的數據量太大,數據在從新分配時耗時;
  • 分片數設置過大
    • 影響搜索結果的相關性打分,影響統計結果的準確性;
    • 單個節點上過多的分片,會致使資源浪費,同時也會影響性能;


Index 相關 API

#查看索引相關信息
GET kibana_sample_data_ecommerce

#查看索引的文檔總數
GET kibana_sample_data_ecommerce/_count

#查看前10條文檔,瞭解文檔格式
POST kibana_sample_data_ecommerce/_search
{
}

#_cat indices API
#查看indices
GET /_cat/indices/kibana*?v&s=index

#查看狀態爲綠的索引
GET /_cat/indices?v&health=green

#按照文檔個數排序
GET /_cat/indices?v&s=docs.count:desc

#查看具體的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt

#How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc


Cluster相關API

GET _cat/nodes?v
GET /_nodes/es7_01,es7_02
GET /_cat/nodes?v
GET /_cat/nodes?v&h=id,ip,port,v,m


GET _cluster/health
GET _cluster/health?level=shards
GET /_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
GET /_cluster/health/kibana_sample_data_flights?level=shards

# cluster state
GET /_cluster/state

#cluster get settings
GET /_cluster/settings
GET /_cluster/settings?include_defaults=true

GET _cat/shards
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason
相關文章
相關標籤/搜索