ES索引和分片
Posted 1234aaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES索引和分片相关的知识,希望对你有一定的参考价值。
1.为了将数据添加到ES,我们需要索引(index),索引是一个存储关联数据的地方。实际上,索引只是一个用来指定一个或多个分片的"逻辑命名空间"
2.一个分片(shard)是一个最小级别"工作单元",它只是保存了索引中的所有数据的一部分,每个分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。
3.分片是ES在进群中分发数据的关键,可以把分片想想成数据的容器。文档存储在分片中,然后分片分配到集群中的节点上。当集群扩容或缩小,ES将会自动在节点间迁移分片,以使集群保持平衡。
4.分片可以是主分片或者是复制分片,索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
5.理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况:硬件存储的大小,文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间
6.复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供请求,比如搜索或者从别的shard取回文档。
7.当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整
一.下面是分片的详细解说:
1.我们能够发送请求给集群中任意一个节点。每个节点都有能力处理任意请求。每个节点都知道任意文档所在的节点
2.新建索引和删除请求都是写操作,它们必须在主分片上成功完成才能赋值到相关的复制分片上
3.在主分片和复制分片上成功新建、索引或删除一个文档必要的顺序步骤:
(1) 客户端给Node1 发送新建、索引或删除请求。
(2) 节点使用文档的_id确定文档属于分片0.转发请求到Node3,分片0位于这个节点上。
(3) Node3在主分片上执行请求,如果成功,它转发请求到相应的位于Node1和Node2的复制节点上。当所有的复制节点报告成功,Node3报告成功到请求的节点,请求的节点再报告给客户端。
(4)客户端接收到成功响应的时候,文档的修改已经被用于主分片和所有的复制分片,修改生效了。
二.ES分片复制
复制默认的值是sync。这将导致主分片得到复制分片的成功响应后才返回。
如果你设置replication为async,请求在主分片上被执行后就会返回给客户端。它依旧会转发给复制节点,单你将不知道复制节点成功与否。
上面的这个选项不建议使用。默认的sync复制允许ES强制反馈传输。async复制可能会因为在不等待其他分片就绪的情况下发送过多的请求而使ES过载。
以上是关于ES索引和分片的主要内容,如果未能解决你的问题,请参考以下文章