ES(elasticsearch) 是一個高可擴展的、開源的全文檢索和分析引擎,它容許你存儲、檢索、分析海量數據,以一種快到近乎實時的速度。html
ES用例場景:apache
使用ES存儲商品目錄、清單,提供檢索、輸入提示的服務。api
使用ES收集日誌或交易數據,且你想分析和挖掘這些數據來查看趨勢、統計、總覽和異常。可使用Logstash來收集、聚合而且解析你的數據,而後將數據餵給ES,而後你就能夠在ES中運行檢索和聚合來挖掘任何你感興趣的信息。服務器
使用ES用於分析和商業智能的需求,能夠快速調研、分析、可視化以及基於大數據即時提問。使用Kibana構建自定義的面板能夠可視化你的數據切面,以不一樣的角度。網絡
基本概念併發
NRT:幾乎實時,指:從你索引一個文檔的時間到它能夠檢索到的時間的延時(一般一秒)。elasticsearch
Cluster:集羣,是一個或者多個節點(服務器)的集合。它們持有全部的數據,而且提供跨全部節點來聯合索引和檢索能力,一個集羣默認有一個惟一的名字爲「elasticsearch」,這個名字很重要,由於一個節點只能是集羣的一部分,若是該節點經過它的名字設置加入集羣。ide
Node:節點,是一個服務器,一個集羣的一部分,存儲數據,參與集羣的索引和搜索能力。節點也有名字,默認是隨機的UUID,能夠自定義。一個節點能夠配置加入一個指定的集羣名,默認地,每隔節點被設置加入一個名爲「elasticsearch」的集羣,意味着,若是你在網絡中啓動多個節點(假設這些節點網絡互通),它們會自動地造成一個集羣(elasticsearch)。在單個節點,你能夠想要多少就有多個節點,此外,若是沒有其餘elasticsearch節點在網絡中,啓動單個節點會自動造成一個集羣(elasticsearch),該集羣有一個節點。性能
Index:索引,是有某種程度類似特徵的文檔的集合。你能夠有客戶數據的索引,產品目錄的索引,甚至其餘數據的索引。一個索引有一個名字(全小寫)。當執行索引、檢索、更新、刪除操做時,這個名字被用來引用索引。在單個集羣中,你能夠定義多個索引。大數據
Document:文檔,是能夠被索引的信息的基本單元。文檔被描述爲JSON結構,這是一種廣泛使用的互聯網數據交換格式。雖然文檔是物理駐留在索引中,一個文檔實際上必須被索引/分配到索引中的一個類型中。
分片和複製:單個索引可能存儲大量的數據,以致於超過單機的存儲能力。例如十億文檔佔據1TB的磁盤空間可能不太適合單機節點,或者也可能太慢以致於不能從單節點服務請求。爲了解決這個問題,elasticsearch提供了分解索引爲多個分片,當你建立一個索引你能夠簡單的定義分片的數量,每一個碎片自己都是一個徹底有效的、獨立的「索引」,能夠託管在集羣中的任何節點。
分片是很重要的,有倆個主要緣由:它容許你水平分割/擴展你的內容卷積;它容許你跨分片(可能在多個節點上)分發和並行化操做,以此提升性能和吞吐量。
一個分片是如何分發,以及它的文檔是如何被聚合到檢索請求的機制是徹底由Elasticsearch管理,並對用戶透明的。
在一個網絡或雲環境中,失敗是隨時可能發生的,高度推薦有一個故障轉移機制以避免單個分片或者節點下線或者消失(因某種緣由),所以Elasticsearch容許你製做你的索引的一個或者多個拷貝,它被稱之爲「複製分片」,或者簡單稱之爲「複製」。
複製是很重要的,有倆個主要緣由:它提供了高可用性,以避免分片或者節點失敗,所以,須要注意一個複製分片不會和主分片分配到同一個節點,複製分片從主分片複製數據。它容許你擴展搜索卷和吞吐量,由於檢索能夠在全部複製分片上併發的執行。
總而言之,每一個索引能夠被分割成多個分片,每一個索引也能夠複製0次或屢次。一旦複製,每一個索引會有主分片(被複制的原始分片)和複製分片(主分片的拷貝)。分片和複製的數量在索引建立的時候定義,在建立以後你能夠任意時刻動態修改,使用_shrink和_split apis改變已存在索引的分片數量。這個任務很重,預先規劃好分片數量纔是最佳辦法。默認地,Elasticsearch中每一個索引都分配了5個主分片和一個複製,意味着,若是你至少有倆個節點在集羣中,你的索引會有五個主分片,以及另外五個複製分片(1個徹底複製),總共每一個索引十個分片。
注意:每一個 Elasticsearch shard 是一個 Lucene index. 單個Lucene索引有最大文檔數量。依據
LUCENE-5843
, 文檔數量限制爲2,147,483,519
(= Integer.MAX_VALUE - 128) documents. You can monitor shard sizes using the_cat/shards
API.