ES-基本概念


目錄:

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”。此名稱很重要,因為如果節點設置為按名稱加入集群的話,則該節點只能是集群的一部分。
確保不同的環境中使用不同的集群名稱,否則最終會導致節點加入錯誤的集群。
     集群狀態通過 綠,黃,紅 來標識:
     綠色 - 一切都很好(集群功能齊全)。
     黃色 - 所有數據均可用,但尚未分配一些副本(集群功能齊全)。
     紅色 - 某些數據由於某種原因不可用(集群部分功能)。
     注意:當群集為紅色時,它將繼續提供來自可用分片的搜索請求,但您可能需要盡快修復它,因為存在未分配的分片。

分片:
    索引可能存儲大量可能超過單個節點的硬件限制的數據。例如,占用1TB磁盤空間的十億個文檔的單個索引可能不適合單個節點的磁盤,或者可能太慢而無法單獨從單個節點提供搜索請求。
    為了解決這個問題,Elasticsearch 提供了將索引細分為多個稱為分片的功能。創建索引時,只需定義所需的分片數即可。每個分片本身都是一個功能齊全且獨立的“索引”,可以托管在集群中的任何節點上。
   設置分片的目的及原因主要是:

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

   在可能隨時發生故障的網絡/雲環境中,分片非常有用,建議使用故障轉移機制,以防分片/節點以某種方式脫機或因任何原因消失。為此,Elasticsearch 允許您將索引的分片的一個或多個副本制作成所謂的副本分片或簡稱副本。

副本:
     副本,是對分片的復制。目的是為了當分片/節點發生故障時提供高可用性,它允許您擴展搜索量/吞吐量,因為可以在所有副本上並行執行搜索。
總而言之,每個索引可以拆分為多個分片。索引也可以復制為零次(表示沒有副本)或更多次。復制之后,每個索引將具有主分片(從原始分片復制而來的)和復制分片(主分片的副本)。
    可以在創建索引時為每個索引定義分片和副本的數量。創建索引后,您也可以隨時動態更改副本數,但這不是一項輕松的任務,所以預先計划正確數量的分片是最佳方法。
    默認情況下,Elasticsearch 中的每個索引都分配了5個主分片和1個副本,這意味着如果集群中至少有兩個節點,則索引將包含5個主分片和另外5個副本分片(1個完整副本),總計為每個索引10個分片。
 
網關:
    在ES的工作過程中,關於集群狀態,索引設置的各種信息都會被收集起來,並在網關(gateway)中被持久化


免責聲明!

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



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