摘要
当创建一个索引的时候,我们经常会面对一个问题:要为索引分配多少个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
相关推荐
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...
5. **分片(Shard)**:为了实现水平扩展,Elasticsearch将每个索引划分为多个分片。分片可以分布在不同的节点上,允许并行操作,提高性能。 6. **副本(Replica)**:分片的副本是数据冗余的一种形式,用于提高可用性...
2. **Transport客户端**:直接通过Elasticsearch的内部传输协议进行通信,性能较好,但配置相对复杂。 3. **High-Level REST客户端**:官方推荐的现代客户端,提供更高级别的抽象,简化常用操作。 **五、搜索优化与...
1. **数据存储与索引**:Elasticsearch以分布式的方式存储数据,通过分片(Shard)和副本(Replica)机制确保数据的高可用性和可扩展性。每个文档都会被分配到一个主分片和零个或多个副本分片,以实现数据冗余和故障...
Elasticsearch是一个开源的全文搜索引擎,它以其高效、可扩展和实时性著称。这个"最新版linux elasticsearch-7.17.1-linux-x86_64.tar.gz"文件是为Linux平台设计的Elasticsearch 7.17.1版本的二进制发行版,适用于64...
这份“Elasticsearch权威指南中文版”是ES官网的中文翻译,为中文用户学习和理解Elasticsearch提供了详尽的资料。 **一、Elasticsearch的核心概念** 1. **文档(Document)**:在Elasticsearch中,数据是以JSON...
Elasticsearch(简称ES)是一款开源的全文搜索引擎,基于Lucene构建,设计目标是实现分布式、可扩展、实时的搜索和分析引擎。它不仅能够提供强大的全文检索功能,还能进行数据分析和数据可视化,广泛应用于日志分析...
Elasticsearch 7.9.2在Linux环境中的应用涉及到多个层面,从基础的安装配置到复杂的性能调优,都需要对系统、网络和数据处理有深入理解。随着技术的发展,Elasticsearch持续提供高效、可扩展的解决方案,满足不断...
1. **健康检查**:Elasticsearch提供API来检查集群状态,包括节点、索引和 shard 的健康状况。 2. **性能优化**:包括JVM调优、硬件选择、索引生命周期管理等,6.1版本可能提供更精细的性能监控工具和指导。 **六...
在分布式特性方面,Elasticsearch采用了分片(Shard)和副本(Replica)的概念,自动将数据分散到多个节点,提高了系统的可扩展性和容错性。每个索引可以被划分为多个分片,而每个分片又可以有零个或多个副本,当...
- **ES插件开发**:教授如何开发自定义插件来扩展Elasticsearch的功能。 #### 2.2 复杂项目实战 - **实战项目**:开发一款基于地理位置的智能餐厅App搜索引擎和数据分析系统。 - **应用高级知识点**:综合运用从...
- **分片(Shard)**与**副本(Replica)**:为了提高性能和可靠性,Elasticsearch支持将索引划分为多个分片,并为每个分片创建一个或多个副本。 - **动态路由与再平衡**:当集群状态发生变化时(如新增或删除节点)...
本文主要探讨了Elasticsearch的写入、读取、检索数据的底层原理以及性能调优策略。 **Elasticsearch 写入数据流程** 1. 当客户端发起POST或PUT请求时,请求会被随机发送到ES集群中的一个节点,该节点作为协调节点...
Elasticsearch 7.6.2 是一个高度可扩展、高性能的开源全文搜索引擎,由Apache许可协议授权。这个版本特别针对Linux系统进行了优化,确保在Linux环境下运行的稳定性和效率。"elasticsearch-7.6.2-linux-x86_64.tar.gz...
在京东到家的订单系统中,Elasticsearch处理了大量数据和高查询量,随着业务发展,其集群架构经历了从单点到集群隔离,再到物理机部署和节点副本调优的演进过程,确保了服务的稳定性和高性能。 总结来说,Elastic...
1. **索引过程**:当数据被添加到Elasticsearch时,会被拆分为多个Shard,并在各个节点上分布。每个Shard都是一个完整的Lucene实例,负责数据的索引和搜索。 2. **搜索过程**:搜索请求会路由到包含所需数据的节点...
Elasticsearch 1.0 是一个高性能、可扩展的全文搜索引擎,基于 Lucene 库构建,提供了分布式、实时、多租户的功能。它不仅是一个搜索服务,还具备数据分析与数据存储的能力,广泛应用于日志分析、监控、推荐系统等...
在现代大数据处理领域,Elasticsearch(简称ES)与大数据平台的集成变得越来越重要,尤其在结合Spark等处理引擎时,能实现高效的数据检索、分析和可视化。本资料集主要探讨了如何将Elasticsearch与大数据平台进行...