`

ElasticSearch 如何索引

阅读更多
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

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

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.
 
对于读请求,请求节点会选择一个不同的节点来达到负载均衡,。。
轮询所有的分片。
 
有可能文档已经被索引在主分片上,但是还没有复制到从分片,
这种情况下,一个从分片会报告文档不存在,此时主分片会返回文档。

 

 
 
 
 
更新API包含读和写的过程。
 
1)客户端发送更新请求给节点1.
2)转发请求给节点3.
3)节点3检索文档,改变文档,重新索引文档,如果期间文档被别人修改了,则重新尝试直到达到最大次数。
4)如果节点3更新文档成功,转发新的文档给从分片,一旦从分片报告成功,节点3报告成功给请求节点。
 
注意:这里主从间交互的是更新过的文档,而不是转发请求。

 

 

http://my.oschina.net/qiangzigege/blog/264471
 
 
 
 
 
 
分享到:
评论

相关推荐

    elasticsearch索引介绍.pptx

    Elasticsearch(ES)是一种基于Lucene的分布式、RESTful搜索和分析引擎,广泛用于大数据的实时分析和检索。在本讲座中,我们将深入探讨Elasticsearch中的索引概念及其重要性。 首先,让我们理解一下ES中的“索引”...

    elasticsearch索引插件

    索引插件是Elasticsearch生态系统中的重要组成部分,它们扩展了Elasticsearch的功能,提供了更多管理和操作索引的便利性。"plugin-head"是其中一款知名的插件,主要用于提供一个直观的Web界面,帮助用户更轻松地管理...

    elasticsearch索引流程

    elasticsearch索引流程,以前的笔记,希望有用

    Elasticsearch索引恢复

    在Elasticsearch中,索引恢复是一个关键的过程,它涉及到索引数据在集群节点间的重新分布或者从备份中恢复数据。本文将深入探讨Elasticsearch索引恢复的原理、原因及步骤。 一、索引恢复的原因 1. 节点故障:当...

    利用kibana的快照存储库备份es索引.md

    利用kibana的快照存储库备份es索引.md

    springBoot动态操作Elasticsearch组件

    同时,确保正确安装和启动Elasticsearch服务,并根据需求调整索引设置,如分词器的选择、映射的定义等。 在压缩包文件`elsauto`中,可能包含了示例代码、配置文件或测试用例,可以帮助我们更好地理解和实现上述功能...

    基于Java与Shell脚本结合的elasticsearch索引清理定时任务设计源码

    该项目是一个基于Java与Shell脚本结合的Elasticsearch索引清理定时任务设计源码,包含25个文件,涵盖5个批处理文件(bat)、5个shell脚本(sh)、3个Java源文件(java)、2个属性文件(properties)、2个帮助文档...

    Elasticsearch索引和查询性能调优.pdf

    以下是一些关键的Elasticsearch索引和查询性能优化策略。 首先,硬件配置的选择至关重要。由于Elasticsearch依赖于磁盘I/O,特别是随机读取性能,固态硬盘(SSD)被推荐用于提升查询速度。在文档检索场景中,SSD...

    Nodejs实现自动清理elasticsearch过期索引(日志清理)

    在IT行业中,日志管理是系统维护和故障排查的关键环节,而Elasticsearch(简称ES)作为一款强大的全文搜索引擎,常被用来存储和分析大量日志数据。然而,随着日积月累,这些数据可能会变得非常庞大,如果不进行有效...

    elasticsearch索引模板

    es索引模板

    es-index-db:一种从数据库创建Elasticsearch索引的简便方法,并在数据库更新时实时更新索引

     另外索引创建之后,数据库数据如有改动,索引无法联动修改,ElasticSearch没有相关功能,我们只能根据修改频率重建索引,基本上没有实时性可言。  db-river-es正是为了解决这些问题而生。 项目介绍 名称:es-...

    02-Elasticsearch 索引优化-小红书刘显鹏 12.02 2023 Beijing

    Elasticsearch 索引优化

    elasticsearch-gmail, 使用Elasticsearch索引你的Gmail收件箱.zip

    elasticsearch-gmail, 使用Elasticsearch索引你的Gmail收件箱 面向初学者的 Elasticsearch: 索引你的Gmail收件箱 这是什么?I I,I,space,space,emails,emails,emails,emails,emails,emails,emails,emails...

    springBoot整合kafka和elasticSearch,实现批量拉取日志以及批量更新到es里

    3. **错误处理**:处理可能出现的异常,如网络中断、ES索引冲突等,确保系统的健壮性。 4. **索引分片和副本**:根据集群资源设置合适的Elasticsearch索引分片和副本数量,提高读写性能。 5. **监控与调优**:定期...

    elasticsearch-index-rotator:安全轮换Elasticsearch索引,而无需停机给最终用户

    Elasticsearch索引旋转器 一个使您能够安全地轮转索引而无需停机的最终用户的库。 我为什么要用这个? 在许多情况下,Elasticsearch用作临时数据存储,用于获取结构化或关系数据并使其快速搜索该数据。 通常,这是...

    Elasticsearch7.0备份索引脚本

    **Elasticsearch 7.0 备份索引脚本详解** 在大数据分析和日志管理领域,Elasticsearch(ES)是一个广泛使用的开源搜索引擎和分析引擎。它提供了实时、可扩展的搜索和分析功能。然而,数据的安全性和可靠性至关重要...

    Elasticsearch数据导出工具

    Elasticsearch数据导出工具是一种高效实用的解决方案,它允许用户方便地从Elasticsearch(ES)集群中抽取数据,并将其导出到不同的目标,如MySQL数据库或本地文件系统。这款工具尤其适用于需要进行数据迁移、备份或...

    ES索引的基础操作.postman_collection.json

    ES索引的基础操作postman API操作例子

    es自动化脚本:创建索引和结构映射

    以脚本方式创建es 索引和结构映射. 莎士比亚在不经意间这样说过,本来无望的事,大胆尝试,往往能成功。我希望诸位也能好好地体会这句话。 一般来讲,我们都必须务必慎重的考虑考虑。 就我个人来说,我秃头了对我的...

    ElasticSearch官方测试数据

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...

Global site tag (gtag.js) - Google Analytics