ElasticSearch:集羣(Cluster),節點(Node),分片(Shard),Indices(索引),replicas(備份)之間關係

Cluster
集羣,一個ES集羣由一個或多個節點(Node)組成,每一個集羣都有一個cluster name做爲標識
------------------------------------------------
node
節點,一個ES實例就是一個node,一個機器能夠有多個實例,因此並不能說一臺機器就是一個node,大多數狀況下每一個node運行在一個獨立的環境或虛擬機上。
------------------------------------------------
index
索引,即一系列documents的集合
------------------------------------------------
shard
分片,ES是分佈式搜索引擎,每一個索引有一個或多個分片,索引的數據被分配到各個分片上,至關於一桶水用了N個杯子裝,分片有助於橫向擴展,N個分片會被儘量平均地(rebalance)分配在不一樣的節點上(例如你有2個節點,4個主分片(不考慮備份),那麼每一個節點會分到2個分片,後來你增長了2個節點,那麼你這4個節點上都會有1個分片,這個過程叫relocation,ES感知後自動完成),分片是獨立的,對於一個Search Request的行爲,每一個分片都會執行這個Request.另外,每一個分片都是一個Lucene Index,因此一個分片只能存放 Integer.MAX_VALUE - 128 = 2,147,483,519 個docs。[LUCENE-5843] IndexWriter should refuse to create an index with more than INT_MAX docs
------------------------------------------------
replica
複製,能夠理解爲備份分片,相應地有primary shard(主分片),主分片和備分片不會出如今同一個節點上(防止單點故障),默認狀況下一個索引建立5個分片一個備份(即5primary+5replica=10個分片),若是你只有一個節點,那麼5個replica都沒法分配(unassigned),此時cluster status會變成Yellow。replica的做用主要包括:

1.容災:primary分片丟失,replica分片就會被頂上去成爲新的主分片,同時根據這個新的主分片建立新的replica,集羣數據安然無恙

2.提升查詢性能:replica和primary分片的數據是相同的,因此對於一個query既能夠查主分片也能夠查備分片,在合適的範圍內多個replica性能會更優(但要考慮資源佔用也會提高[cpu/disk/heap]),另外index request只能發生在主分片上,replica不能執行index request。
對於一個索引,除非重建索引不然不能調整分片的數目(主分片數, number_of_shards),但能夠隨時調整replica數(number_of_replicas)。
------------------------------------------------ node

相關文章
相關標籤/搜索