Elasticsearch概述

Elasticsearch是一个分布式搜索产品,由节点组成集群,自动平衡数据分布。主节点管理集群变更,每个节点可成为主节点。分片和副本确保数据冗余和高可用性。索引创建涉及主副分片交互,读写操作考虑一致性与超时。在节点故障时,副本分片接管。读操作通过协调节点路由到相关分片。当部分分片不可用时,仍能快速响应。
摘要由CSDN通过智能技术生成

前言

前文介绍的《Lucene概述》是搜索引挚技术,并非产品。而今天简了解下搜索产品Elasticsearch。

架构

一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成,它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。
在这里插入图片描述
与其它的群集产品同,es也有分片及副本的概念

  • 分片:一个底层的工作单元(Lucene 的实例),协调节点根据规则(比如:hash)将数据分发到各分片中。当然,分片会被Master分配到集群各个节点里。 当集群规模扩大或者缩小时, Master 会自动的在各节点中迁移分片,使得分片仍然均匀分布在集群里。
  • 副本: 也是一个分片, 它是为了防止硬件故障时保护数据不丢失的冗余备份分片,顺便为搜索和返回文档等读操作提供服务减轻主分片的压力。
  • 在同一个节点上既保存原始数据又保存副本是没有意义的,因为一旦失去了那个节点,丢失所有副本数据。
  • 各主分片最好不在同一节点上,可以均衡验证,协调请求的压力
  • 在一个ElasticSearch集群中,存在两个维度的选主。Master节点的选主、各个复制组主分片的选主

索引创建流程如下
在这里插入图片描述
ES新节点加入过程
在这里插入图片描述

基本写模型

在这里插入图片描述
以下是在主副分片和任何副本分片上面成功新建和删除文档所需要的步骤顺序:

  1. 客户端向 Node 1 发送新建或者删除文档请求。
  2. 节点Node 1 根据请求中要操作的文档的 _id, 确定文档属于分片 P0 。请求被转发到 Node 3,因为分片 P0 的主分片目前被分配在 Node 3 上。
  3. Node 3 在P0主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本(R0)分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。
  4. 如果Node 3(P0)主分片未在指定时间timeout(默认一分钟)未收到复制分片的成功响应或是收到错误响应,主分片会向Master服务器发送一个请求,请求从同步副本中删除有问题的分片,当主分片确认删除有问题的副本时,Master会指示删除有问题的副本。同时,master还会指示另一个节点开始构建新的分片副本,以便将系统恢复到一个健康状态。
    在这里插入图片描述

有一些可选的请求参数允许您影响这个过程

  • consistency:即一致性。
    • all(必须要主分片和所有副本分片的状态没问题才允许执行_写_操作)
    • quorum 。默认值为 quorum , 即大多数的分片副本状态没问题就允许执行_写_操作。
  • timeout:如果没有足够的副本分片会发生什么? Elasticsearch会等待,希望更多的分片出现。默认情况下,它最多等待1分钟。 如果你需要,你可以使用 timeout 参数 使它更早终止: 100 100毫秒,30s 是30秒。
基本读模型

在Elasticsearch中,可以通过ID进行非常轻量级的查找,也可以使用复杂的聚合来获取非平凡的CPU能力。
在这里插入图片描述
当一个节点接收到read请求时,该节点根据路由规则负责将其转发给相应的数据节点,对响应进行整理,并对客户端作出响应。我们称该节点为该请求的协调节点。基本流程如下:

  1. 将读请求路由到到相关的分片节点。注意,由于大多数搜索条件中不包含分片字段,所以它们通常需要从多个分片组中读取数据
  2. 从每个分片复制组中选择一个副本。读请求可以是复制组中的主分片,也可以是其副本分片。在默认情况下,ElasticSearch分片组内的读请求负载算法为轮询。
  3. 根据第二步选择的各个分片,向选中的分片发送请求。
  4. 汇聚各个分片节点返回的数据,然后返回个客户端,注意,如果带有分片字段的查询,将之后转发给一个节点,该步骤可省略。
    在这里插入图片描述
  1. 当一个分片不能响应一个read请求时,协调节点将从同一个复制组中选择另一个副本,并将分片级搜索请求发送给该副本。
  2. 重复的失败会导致没有碎片副本可用。ElasticSearch会更倾向于快速响应,返回成功的分片数据给客户端 ,并在响应包中指明哪些分片节点发生了错误。
  3. 多分片的深度分页可能但成Es性能问题,最好使用游标的方式

主要参考

Elasticsearch: 权威指南
Elasticsearch: 权威指南之空集群
Elasticsearch: 权威指南之索引
Elasticsearch: 权威指南之添加文档
Elasticsearch: 权威指南之多文档
ES学习分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值