Teng's blog Teng's blog
首页
Java
H5前端
GitHub (opens new window)
首页
Java
H5前端
GitHub (opens new window)
  • 认知

  • 入门

  • 环境

  • 进阶

    • 核心概念
    • 系统架构
    • 单节点集群
    • 故障转移
    • 水平扩容
    • 应对故障
    • 路由计算
    • 分片控制
    • 写操作流程
      • 步骤
      • 参数
    • 数据读流程
    • 更新操作流程
    • 批量操作流程
    • 倒排索引
    • 文档搜索
    • 文档刷新-刷写-合并
    • 文档分析-分词器
    • 文档控制
    • 文档展示-kibana
  • 框架集成

  • 优化

  • 面试题

  • Database-Elasticsearch
  • 进阶
Shetengteng
2022-02-03

写操作流程

笔记

新建、索引和删除请求都是写操作 必须在主分片上面完成之后才能被复制到相关的副本分片

# 步骤

  • 客户端向Node 1发送新建、索引或者删除请求
  • 节点使用文档的_id 确定文档属于分片 0。请求会被转发到 Node 3,因为分片0的主分片目前被分配在 Node 3上
  • Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2的副本分片上;一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。在客户端收到成功响应时,文档变更已经在主分片和所有副本分片执行完成,变更是安全的

# 参数

有一些可选请求参数允许影响这个过程,以数据安全为代价提升性能;由于Elasticsearch 已经很快,这些选项很少使用

consistency 一致性

  • 在默认设置下,即使仅仅是在试图执行一个写操作之前,主分片都会要求必须要有规定数量(quorum,即)的分片副本处于活跃可用状态,才会去执行写操作 (其中分片副本可以是主分片或者副本分片);为了避免在发生网络分区故障(network partition)的时候进行写操作,进而导致数据不一致
  • consistency 参数的值可以设为
    • 默认值 quorum:规定数量(即大多数)的分片副本状态没问题就允许执行写操
      • 规定数量计算公式
      • int( (primary + number_of_replicas) / 2 ) + 1
      • 其中 number_of_replicas 索引设置中的设定副本分片数,而不是指当前处理活动状态的副本分片数
      • 如果索引设置中指定了当前索引拥有3个副本分片,那规定数量的计算结果即:int( (primary + 3 replicas) / 2 ) + 1 = 3 =((1+3)/2+1) 如果此时只启动两个节点,那么处于活跃状态的分片副本数量就达不到规定数量,将无法索引和删除任何文档
    • one:只要主分片状态 ok 就允许执行写操作
    • all:必须要主分片和所有副本分片的状态没问题才允许执行写操作

timeout

  • 如果没有足够的副本分片会发生什么? Elasticsearch 会等待,希望更多的分片出现
  • 默认值 1min

注意

新索引默认有1个副本分片,为满足规定数量应该需要两个活动的分片副本。 但默认的设置会阻止在单一节点上做任何事情。为了避免这个问题,要求只有当number_of_replicas 大于1的时候,规定数量才会执行

笔记

写操作的延时:主分片延时+并行写入副本的最大延时

Last Updated: 2022/04/10, 13:57:31
分片控制
数据读流程

← 分片控制 数据读流程→

Theme by Vdoing | Copyright © 2021-2022 Shetengteng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式