ElasticSearch 2 (12) - Shard数调优(ElasticSearch性能)

ElasticSearch 2 (12) - Shard数调优(ElasticSearch性能)

摘要

当建立一个索引的时候,咱们常常会面对一个问题:要为索引分配多少个shard?多少个replica?对于这个问题,仍然没有明确的统一答案,可是本文会给出一些引导,方便在实施ElasticSearch时给出合适的Shard和Replica数。html


版本

elasticsearch版本: elasticsearch-2.xnode

内容

什么是一个Shard?

Shard就是一个Lucene Index,参照文章(深刻理解Shard和Lucene Index)。elasticsearch

Index须要多少个Shard?

回答这个问题,咱们须要先谈谈节点,一个集群有多个节点,具体须要多少个节点合适,是另一个问题,可是这个数字也会影响咱们对Shard数的设置。性能

Shard数 = Node数?

整体上说,当咱们节点数和Shard数相等时,ElasticSearch集群的性能能够达到最优。即,对于一个3节点集群,咱们为每一个集群节点分配一个Shard,总共3个Shard。可是因为ElasticSearch的不可变性(Immutable)的限制,系统没法对Shard进行从新拆分分配,除非从新索引这个文件集合。因此,当咱们须要增长更多节点的时候,又但愿Shard能利用到增长节点带来的系统性能提高时,咱们就不得不进行从新索引,因为重索引开销巨大,这是咱们不但愿看到的。网站

StackExchange用ElasticSearch支持它的搜索,当前(2016-3-1日),它网站的ElasticSearch索引占用440GB。orm

若是须要从新创建索引,将会是一个巨大的开销,为了支持将来可能的水平扩展,咱们会为集群分配比node数更多的shard数,也就是说每一个节点会有多个Shard。htm

若是单个node分配多个shard,就会引入另一系列的性能问题,咱们知道对于任意一次完整的搜索,ElasticSearch会分别对每一个shard进行查询,最后进行汇总。当节点数和shard数是一对一的时候,全部的查询能够并行运行。可是,对于具备多个shard的节点,若是磁盘是15000RPM或SSD,可能会相对较快,可是这也会存在等待响应的问题,因此一般不推荐一个节点超过2个shard。blog

3节点6shard,即每一个节点2shard,这可使咱们在将来轻松的横向扩展到6个节点,应对许多极端的场景。索引

Replicas数呢?

Replica也是Shard,与shard不一样的是,replica只会参与读操做,同时也能提升集群的可用性。对于Replica来讲,它的主要做用就是提升集群错误恢复的能力,因此replica的数目与shard的数目以及node的数目相关,与shard不一样的是,replica的数目能够在集群创建以后变动,切代价较小,因此相比shard的数目而言,没有那么重要。ip

Replica的故事(宕机)

3 node, 3 shard, 0 replica

一个节点宕机

整个服务不可用

3 node, 3 shard, 1 replica (each)

一个节点宕机

两个节点宕机

服务仍然可用

3 node, 3 shard, 2 replica (each)

当存储费用较低时,能够考虑

参考

参考来源:

http://engineering.datarank.com/2015/07/08/balancing-elasticsearch-cluster-by-shard-size.html

http://engineering.datarank.com/2015/06/30/analysis-of-hotspots-in-clusters-of-log-normally-distributed-data.html

https://en.wikipedia.org/wiki/Shard_(database_architecture)

How many shards should Elasticsearch indexes have?

Optimizing Elasticsearch: How Many Shards per Index?

ELASTICSEARCH – HOW MANY SHARDS?

结束

相关文章
相关标签/搜索