ES-基本概念

目錄:node

1.  ElasticSearch是什麼
2. 基本概念
3. 幾個關鍵詞
 
正文:
1.  ElasticSearch是什麼
    ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java語言開發的,並做爲Apache許可條款下的開放源碼發佈,是一種流行的企業級搜索引擎。ElasticSearch用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便。官方客戶端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和許多其餘語言中都是可用的。根據DB-Engines的排名顯示,Elasticsearch是最受歡迎的企業搜索引擎,其次是Apache Solr,也是基於Lucene。
 
2. 基本概念
    Lucene是由一個Java語言開發的開源全文檢索引擎工具包。把Lucene用Netty封裝成服務,使用JSON訪問就說是Elasticsearch。
Elasticserach內置了對分佈式集羣和分佈式索引的管理,因此相對Solr來講,不須要額外安裝Zookeeper,其更容易分佈式部署。
使用Elasticsearch的搜索系統整理架構圖以下所示:
 
    Elasticsarch的每個運行實例稱爲一個節點,便可以在同一臺計算機上運行多個實例,也能夠在每臺計算機上只運行一個實例。
在一個分佈式系統裏,多個ES運行實例能夠組成一個集羣(cluster),該集羣裏有一個動態選舉出來的主節點。若是主節點失敗,會自動選出新的節點作爲主節點,因此不存在單點故障。
   在同一個子網內,只須要在每一個節點上設置相同的集羣名,這些集羣名相同的節點會自動組成一個集羣。ES包含了節點和節點之間的通訊模塊及節點之間的數據分配和平衡模塊。
   爲了實現容錯,ES會把查詢文檔集合分解爲多個小的索引,每個小的索引就叫作分片(shards)。每個分片均可以有0到多個副本(replicas),而每個副本也都是分片的完整複製品,這樣也提升了查詢速度。
    一旦ES的某個節點數據損壞或者服務不可用的時候,就能夠用其餘的節點來代替壞掉的節點,以達到高可用的目的。當有節點加入或者退出時,主節點會根據機器的負載對索引分片進行從新分配,當「掛掉」對節點再次重現啓動對時候也會進行數據恢復(recovery)。
    ES經過網關(Gateway)來管理集羣恢復,能夠配置集羣須要加入多少節點才能啓動恢復數據。網關配置用於恢復任務失敗的索引。當節點崩潰並從新啓動時,ES將從網關讀取全部的索引和元數據。
 
3. 幾個關鍵詞
 
索引:
     ES將它的數據存儲在一個或者多個索引中。用sql領域的術語來類比,索引就像數據庫,能夠向索引寫入文檔或者從索引中讀取文檔,並經過ES內部使用的Lucene將數據寫入索引或從索引中檢索數據。
索引是具備某些相似特徵的文檔集合,索引由名稱標識(必須所有小寫)。
 
文檔:
    文檔是能夠創建索引的基本信息單元。例如,您能夠爲單個客戶提供文檔,爲單個產品提供一個文檔,爲單個訂單提供一個文檔。該文檔以JSON(JavaScript Object Notation)表示,JSON是一種廣泛存在的互聯網數據交換格式。
在索引/類型中,您能夠根據須要存儲任意數量的文檔。請注意,儘管文檔實際上駐留在索引中,但實際上必須將文檔編入索引/分配給索引中的類型。
 
映射(mapping):
    ES中的索引模式叫作Mapping。索引中的每一個文檔都有一個type,每一個type擁有本身的模式或者模式定義。
用戶能夠設置一些參數,來決定如何將輸入文本分割爲詞條,哪些詞條應該被過濾掉,或者哪些附加處理時有必要被調用的。如排序時所需的字段內容信息,者就是mapping扮演的角色。
 
類型:
    ES中每一個文檔都有與之對應的類型定義。這容許用戶在一個索引中存儲多種文檔類型,併爲不一樣文檔類型提供不一樣的映射。
 
節點:
     單個的ES服務實例稱爲節點(node)。不少時候部署一個ES節點就足以應付大多數簡單的應用,可是考慮到容錯性或在數據膨脹到單機沒法應付這些情況時,你也許會更傾向於使用多節點的ES集羣。

集羣:
     集羣(cluster)是一組具備相同cluster.name的節點集合,他們協同工做,共享數據並提供故障轉移和擴展功能,固然一個節點也能夠組成一個集羣。
     集羣由惟一名稱標識,默認狀況下爲「elasticsearch」。此名稱很重要,由於若是節點設置爲按名稱加入集羣的話,則該節點只能是集羣的一部分。
確保不一樣的環境中使用不一樣的集羣名稱,不然最終會致使節點加入錯誤的集羣。
     集羣狀態經過 綠,黃,紅 來標識:
     綠色 - 一切都很好(集羣功能齊全)。
     黃色 - 全部數據都可用,但還沒有分配一些副本(集羣功能齊全)。
     紅色 - 某些數據因爲某種緣由不可用(集羣部分功能)。
     注意:當羣集爲紅色時,它將繼續提供來自可用分片的搜索請求,但您可能須要儘快修復它,由於存在未分配的分片。web

分片:
    索引可能存儲大量可能超過單個節點的硬件限制的數據。例如,佔用1TB磁盤空間的十億個文檔的單個索引可能不適合單個節點的磁盤,或者可能太慢而沒法單獨從單個節點提供搜索請求。
    爲了解決這個問題,Elasticsearch 提供了將索引細分爲多個稱爲分片的功能。建立索引時,只需定義所需的分片數便可。每一個分片自己都是一個功能齊全且獨立的「索引」,能夠託管在集羣中的任何節點上。
   設置分片的目的及緣由主要是:sql

  •    它容許您水平拆分/縮放內容量;
  •    它容許您跨分片(可能在多個節點上)分佈和並行化操做,從而提升性能/吞吐量;
  •    分片的分佈方式以及如何將其文檔聚合回搜索請求的機制徹底由 Elasticsearch 管理,對用戶而言是透明的。

   在可能隨時發生故障的網絡/雲環境中,分片很是有用,建議使用故障轉移機制,以防分片/節點以某種方式脫機或因任何緣由消失。爲此,Elasticsearch 容許您將索引的分片的一個或多個副本製做成所謂的副本分片或簡稱副本。數據庫

副本:
     副本,是對分片的複製。目的是爲了當分片/節點發生故障時提供高可用性,它容許您擴展搜索量/吞吐量,由於能夠在全部副本上並行執行搜索。
總而言之,每一個索引能夠拆分爲多個分片。索引也能夠複製爲零次(表示沒有副本)或更屢次。複製以後,每一個索引將具備主分片(從原始分片複製而來的)和複製分片(主分片的副本)。
    能夠在建立索引時爲每一個索引定義分片和副本的數量。建立索引後,您也能夠隨時動態更改副本數,但這不是一項輕鬆的任務,因此預先計劃正確數量的分片是最佳方法。
    默認狀況下,Elasticsearch 中的每一個索引都分配了5個主分片和1個副本,這意味着若是集羣中至少有兩個節點,則索引將包含5個主分片和另外5個副本分片(1個完整副本),總計爲每一個索引10個分片。
 
網關:
    在ES的工做過程當中,關於集羣狀態,索引設置的各類信息都會被收集起來,並在網關(gateway)中被持久化
相關文章
相關標籤/搜索