分片和複製(shards and replicas)
一個索引能夠存儲超出單個結點硬件限制的大量數據。好比,一個具備 10 億文檔的索引佔據 1TB 的磁盤空間,而任一節點可能沒有這樣大的磁盤空間來存儲或者單個節點處理搜索請求,響應會太慢。node
爲了解決這個問題,Elasticsearch 提供了將索引劃分紅多片的能力,這些片叫作分片。當你建立一個索引的時候,你能夠指定你想要的分片的數量。每一個分片自己也是一個功能完善而且獨立的「索引」,這個「索引」 能夠被放置到集羣中的任何節點上。數據庫
分片之因此重要,主要有兩方面的緣由:json
- 容許你在分片(位於多個節點上)之上進行分佈式的、並行的操做,進而提升性能/吞吐量
至於一個分片怎樣分佈,它的文檔怎樣聚合回搜索請求,是徹底由 Elasticsearch 管理的,對於做爲用戶的你來講,這些都是透明的。網絡
在一個網絡/雲的環境裏,失敗隨時均可能發生。在某個分片/節點由於某些緣由處於離線狀態或者消失的狀況下,故障轉移機制是很是有用且強烈推薦的。爲此, Elasticsearch 容許你建立分片的一份或多份拷貝,這些拷貝叫作複製分片,或者直接叫複製。app
複製之因此重要,有兩個主要緣由:
- 在分片/節點失敗的狀況下,複製提供了高可用性。複製分片不與原/主要分片置於同一節點上是很是重要的。由於搜索能夠在全部的複製上並行運行,複製能夠擴展你
的搜索量/吞吐量
- 總之,每一個索引能夠被分紅多個分片。一個索引也能夠被複制 0 次(即沒有複製)或屢次。一旦複製了,每一個索引就有了主分片(做爲複製源的分片)和複製分片(主分片的拷貝)。
- 分片和複製的數量能夠在索引建立的時候指定。在索引建立以後,你能夠在任什麼時候候動態地改變複製的數量,可是你不能再改變分片的數量。
- 5.X 默認 5:1 5 個主分片,1 個複製分片
默認狀況下,Elasticsearch 中的每一個索引分配 5 個主分片和 1 個複製。這意味着,若是你的集羣中至少有兩個節點,你的索引將會有 5 個主分片和另外 5 個複製分片(1 個徹底拷貝),這樣每一個索引總共就有 10 個分片。
對應關係:
索引 ------------數據庫
類型 ------------表
文檔------------數據
映射------------對索引類型的配置