es如何知道哪个分片应该存储这个文档?
当我们创建一个新的文档,es怎么知道它应该存在分片1还是2?
处理不是随机的,因为我们将来还需要检索这个文档,事实上,由一个非常简单的公式计算。
shard = hash(routing) % number_of_primary_shards
routing值是一个字符串,默认是文档的_id,但是也可以是其它值
这个解释了,为什么主分片的个数仅仅在索引创建时决定而不能再改变了
如果改变了,所有的之前的值都无效,文档也找不到了。
所有的文档API(
get
, index, delete, bulk, update and mget)接受一个路由参数,
这个参数可以用来决定文档到分片的映射
http://my.oschina.net/qiangzigege/blog/264438
为了解释的目的,我们想象一下,我们有一个集群,有3个节点,
它包含了一个blogs索引,有2个主分片,
每个主分片有2个从分片备份,一个主分片的从分片不会放在主分片所在节点上,
所以,我们的集群看起来如图8所示,
Figure 8. A cluster with three nodes and one index
Figure 8. 集群,3个节点,1个索引
我们可以发送请求至任意一个节点,每个节点都可以服务请求,
每个节点知道每个文档的位置,可以路由请求给正确的节点,
我们发送所有的请求给节点1,称之为请求节点。
发送请求,我们可以轮流发送给所有的节点,实现轮询达到负载均衡的目的。
http://my.oschina.net/qiangzigege/blog/264441
创建,索引和删除请求是写操作,必须在主分片上成功完成,然后才能复制到相关的从分片。
Figure 9. Creating, indexing or deleting a single document
图9:创建,索引和删除一个文档。
如图9所示,流程,
1)客户发送一个创建,索引或者删除的请求到节点1.
2)节点使用文档的_id来决定文档属于分片0转发请求给节点3.
3)节点3执行请求,如果成功,并发的转发请求给它的从分片。一旦所有从分片报告成功,
节点3报告成功给请求节点,请求节点报告成功给客户端。
一旦客户端接受到了成功的响应,文档改变已经在所有的主从分片上执行了,客户的改变是安全的。
这里有很多可选请求参数来影响这个过程,不过很少使用因为es已经很快。
replication
默认的主从同步是同步执行的,引起主分片来等待从分片的成功响应。
如果你设置主从同步是异步的,它将返回成功给客户端,然后仍然转发请求给从分片,
但是你不知道从分片成功还是失败。
建议使用默认的同步策略。
consistency 一致性
主分片需要quorum或者说是最大分片备份数(一份备份可以是主分片,也可以是从分片)
用于写操作前的一致性校验。
quorum = int((主分片+从分片数量)/2)+1
这里的“从分片数量”是指 索引设置中定义的值,而非当前系统中活跃的分片数量
quorum的值可以是主分片个数、全部分片个数(主+从)、默认的quorum、分片备份的最大值
如果定义了一个索引有3个从分片, 则quorum=int((主分片+3从分片)/2)+1=3
但如果只开启了2个节点,则没有足够的活跃节点来支持完成写操作
超时
如果没有足够的从分片可用怎么办,es等待,默认等待1分钟,你可以使用timeout参数来设置。
100是100 毫秒,30s 是30秒。
一个新的索引默认有1个从分片 http://my.oschina.net/qiangzigege/blog/264460
一个文档可以从主分片或者任何一个从分片读取。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< span ></ span > Figure 10. 检索一个文档
下面我们列出了检索文档的顺序。 1)客户端发请求给节点1. 2)节点通过_id知道文档属于分片0. 分片0在3个机器上都有,这种情形下,转发请求给节点2. 3)节点2返回文档给节点1. 对于读请求,请求节点会选择一个不同的节点来达到负载均衡,。。 轮询所有的分片。 有可能文档已经被索引在主分片上,但是还没有复制到从分片, 这种情况下,一个从分片会报告文档不存在,此时主分片会返回文档。 |
http://my.oschina.net/qiangzigege/blog/264471
相关推荐
Elasticsearch(ES)是一种基于Lucene的分布式、RESTful搜索和分析引擎,广泛用于大数据的实时分析和检索。在本讲座中,我们将深入探讨Elasticsearch中的索引概念及其重要性。 首先,让我们理解一下ES中的“索引”...
索引插件是Elasticsearch生态系统中的重要组成部分,它们扩展了Elasticsearch的功能,提供了更多管理和操作索引的便利性。"plugin-head"是其中一款知名的插件,主要用于提供一个直观的Web界面,帮助用户更轻松地管理...
elasticsearch索引流程,以前的笔记,希望有用
在Elasticsearch中,索引恢复是一个关键的过程,它涉及到索引数据在集群节点间的重新分布或者从备份中恢复数据。本文将深入探讨Elasticsearch索引恢复的原理、原因及步骤。 一、索引恢复的原因 1. 节点故障:当...
利用kibana的快照存储库备份es索引.md
同时,确保正确安装和启动Elasticsearch服务,并根据需求调整索引设置,如分词器的选择、映射的定义等。 在压缩包文件`elsauto`中,可能包含了示例代码、配置文件或测试用例,可以帮助我们更好地理解和实现上述功能...
该项目是一个基于Java与Shell脚本结合的Elasticsearch索引清理定时任务设计源码,包含25个文件,涵盖5个批处理文件(bat)、5个shell脚本(sh)、3个Java源文件(java)、2个属性文件(properties)、2个帮助文档...
以下是一些关键的Elasticsearch索引和查询性能优化策略。 首先,硬件配置的选择至关重要。由于Elasticsearch依赖于磁盘I/O,特别是随机读取性能,固态硬盘(SSD)被推荐用于提升查询速度。在文档检索场景中,SSD...
在IT行业中,日志管理是系统维护和故障排查的关键环节,而Elasticsearch(简称ES)作为一款强大的全文搜索引擎,常被用来存储和分析大量日志数据。然而,随着日积月累,这些数据可能会变得非常庞大,如果不进行有效...
es索引模板
另外索引创建之后,数据库数据如有改动,索引无法联动修改,ElasticSearch没有相关功能,我们只能根据修改频率重建索引,基本上没有实时性可言。 db-river-es正是为了解决这些问题而生。 项目介绍 名称:es-...
Elasticsearch 索引优化
elasticsearch-gmail, 使用Elasticsearch索引你的Gmail收件箱 面向初学者的 Elasticsearch: 索引你的Gmail收件箱 这是什么?I I,I,space,space,emails,emails,emails,emails,emails,emails,emails,emails...
3. **错误处理**:处理可能出现的异常,如网络中断、ES索引冲突等,确保系统的健壮性。 4. **索引分片和副本**:根据集群资源设置合适的Elasticsearch索引分片和副本数量,提高读写性能。 5. **监控与调优**:定期...
Elasticsearch索引旋转器 一个使您能够安全地轮转索引而无需停机的最终用户的库。 我为什么要用这个? 在许多情况下,Elasticsearch用作临时数据存储,用于获取结构化或关系数据并使其快速搜索该数据。 通常,这是...
**Elasticsearch 7.0 备份索引脚本详解** 在大数据分析和日志管理领域,Elasticsearch(ES)是一个广泛使用的开源搜索引擎和分析引擎。它提供了实时、可扩展的搜索和分析功能。然而,数据的安全性和可靠性至关重要...
Elasticsearch数据导出工具是一种高效实用的解决方案,它允许用户方便地从Elasticsearch(ES)集群中抽取数据,并将其导出到不同的目标,如MySQL数据库或本地文件系统。这款工具尤其适用于需要进行数据迁移、备份或...
ES索引的基础操作postman API操作例子
以脚本方式创建es 索引和结构映射. 莎士比亚在不经意间这样说过,本来无望的事,大胆尝试,往往能成功。我希望诸位也能好好地体会这句话。 一般来讲,我们都必须务必慎重的考虑考虑。 就我个人来说,我秃头了对我的...
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...