摘要
当创建一个索引的时候,我们经常会面对一个问题:要为索引分配多少个shard?多少个replica?对于这个问题,仍然没有明确的统一答案,但是本文会给出一些引导,方便在实施ElasticSearch时给出合适的Shard和Replica数。
版本
elasticsearch版本: elasticsearch-2.x
内容
什么是一个Shard?
Shard就是一个Lucene Index,参照文章(深入理解Shard和Lucene Index)。
Index需要多少个Shard?
回答这个问题,我们需要先谈谈节点,一个集群有多个节点,具体需要多少个节点合适,是另外一个问题,但是这个数字也会影响我们对Shard数的设置。
Shard数 = Node数?
总体上说,当我们节点数和Shard数相等时,ElasticSearch集群的性能可以达到最优。即,对于一个3节点集群,我们为每个集群节点分配一个Shard,总共3个Shard。但是由于ElasticSearch的不可变性(Immutable)的限制,系统无法对Shard进行重新拆分分配,除非重新索引这个文件集合。所以,当我们需要增加更多节点的时候,又希望Shard能利用到增加节点带来的系统性能提升时,我们就不得不进行重新索引,由于重索引开销巨大,这是我们不希望看到的。
StackExchange用ElasticSearch支持它的搜索,当前(2016-3-1日),它网站的ElasticSearch索引占用440GB。
如果需要重新建立索引,将会是一个巨大的开销,为了支持未来可能的水平扩展,我们会为集群分配比node数更多的shard数,也就是说每个节点会有多个Shard。
如果单个node分配多个shard,就会引入另外一系列的性能问题,我们知道对于任意一次完整的搜索,ElasticSearch会分别对每个shard进行查询,最后进行汇总。当节点数和shard数是一对一的时候,所有的查询可以并行运行。但是,对于具有多个shard的节点,如果磁盘是15000RPM或SSD,可能会相对较快,但是这也会存在等待响应的问题,所以通常不推荐一个节点超过2个shard。
3节点6shard,即每个节点2shard,这可以使我们在未来轻松的横向扩展到6个节点,应对许多极端的场景。
Replicas数呢?
Replica也是Shard,与shard不同的是,replica只会参与读操作,同时也能提高集群的可用性。对于Replica来说,它的主要作用就是提高集群错误恢复的能力,所以replica的数目与shard的数目以及node的数目相关,与shard不同的是,replica的数目可以在集群建立之后变更,切代价较小,所以相比shard的数目而言,没有那么重要。
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
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?
http://www.cnblogs.com/richaaaard/p/5231905.html
相关推荐
开箱即用,简单粗暴...我们本机启动两个es实例,也就是两个node节点,默认集群名称是elasticsearch,所以他会自动将这两个node凑成一个集群,我们什么都不用配置,它自动发现。shard负载均衡假设我们有1个index,
(2)包含市面上几乎没有的所有Elasticsearch高级知识点:包含地理位置搜索与聚合分析,term vector,suggester search,搜索模板定制,query执行剖析,数十种最全面的聚合分析,span query,shard分配定制,es插件...
分布式搜索elasticsearch研究--- shard和replica的选择 18 分布式搜索elasticsearch研究--- template的使用 18 分布式搜索elasticsearch研究--- mapping简介 20 分布式搜索elasticsearch研究--- API简介 21 分布式...
本文章以PPT的形式,详细展示了elastic search的工作原理、存储、及注意事项,如shard分片原理及设计、相关插件、与solr比较
弹性搜索碎片建议elasticsearch-shard-suggester是一个脚本,该脚本根据当前索引的搜索性能来建议第二天索引中的最佳主碎片数。版本0.02怎么跑 1.虚拟环境设置$ git clone git@github....
10-4 如何设定shard数.avi 10-5 xpack监控功能介绍.avi 11-1 入门及架构简介.avi 11-2 -Life_of_an_Event.avi 11-3 -queue简介.avi 11-4 -线程简介.avi 11-5 配置简介.avi 11-6 多实例运行.avi 11-7 pipeline配置...
Elasticsearch is distributed, which means that indices can be divided into shards and each shard can have zero or more replicas. Each node hosts one or more shards, and acts as a coordinator to ...
android shard分享
filter 的区别query全文检索短语检索高亮检索分组检索平均值的检索区间检索批量查询查询排序查询缓存文档替换与删除ES路由查询路由分词Mapping 映射mapping的概念查看mappingmapping的创建mapping的修改query相关度...
点击鼠标,画多变形,可以设置多少个点,默认是六个
mongodb shard一些特性简介,以及部署架构
Elasticsearch是一个底层基于Lucene的分布式搜索服务 且提供了Restful风格的API 采用多shard(分片)的方式保证数据安全 还提供了自动resharding的功能 Elasticsearch可以快速存储 搜索和分析海量数据 SpringBoot默认...
Search 执行的时候实际分两个步骤运作的 – Query 阶段 – Fetch 阶段 Query-Then-Fetch Query阶段 Fetch阶段 相关性算分问题 相关性算分在shard与shard间是相互独立的,也就意味着同一个term的IDF值在不同shard上...
selected_shard = routing_key % number_of_shards 例如,考虑具有 5 个分片的 Elasticsearch 索引。 下表显示了文档将如何路由到分片,用于各种路由键。 路由密钥selected_shard 0 0 1 1 2 2 3 3 4 4 5 0 6 1 7 2 ...
1. 客户端向Node1 发送索引档请求 2. Node1 根据档ID(_id字段)计算出该档应该属于shard0,然后请求路 3. Node3在P0上执了请求
shard-源码.rar
shard-testtesttesttest