【Elasticsearch】索引恢复(recovery)流程梳理之副本分片数据恢复

replica shard重启具体流程

在这里插入图片描述

replica shard node (generic threadpool)

  1. 也是因为应用新的集群状态触发recovery,进入index阶段
  2. 进入translog 阶段。先尝试重放本地的translog到global checkpoint
  3. 向primary shard发起start recovery的请求,请求包含replica的localCheckpoint+1。(如果第二步重放translog了,localCheckpoint自然也会增加)

primary shard node

  1. 如果开启了soft delete并且索引是7.4版本之后创建的(retention lease功能),则使用lucene index作为HistorySource,否则使用translog
  2. 判断是否可以根据seq no按条恢复数据而不是发送segment file,即跳过phase 1,判断需要满足以下条件(其实就是看能不能使用retention lease/translog回放)
    • replica不是没有数据
    • primary shard的retention lease或者translog(取决于history source)包含所有要recovery的数据,retention lease会判断soft delete保存的seq no 是否小于 request.startingSeqNo(replica 开始恢复的seq no)
    • 对于retention lease,需要包含replica没有的数据,判断retentionLease.seqNo < request.startingSeqNo
  3. 执行phase 1——sendFileStep。有限速配置indices.recovery.max_bytes_per_sec
  4. 如果primary和replica的sync id, local checkpoint, maxSeqNo都相同则跳过phase1
  5. 对比primary和replica的segment file元数据,发送所有replica缺失或者不同的segment file
  6. 同步发送给replica请求,让他启动engine准备接收translog
  7. 将replica shard加入replication group,replica将接收到后续的replication request,并确保在下一步中采样最大序列号之前执行此操作,以确保在phase 2发送所有seq No直到 maxSeqNo 的所有文档,保证replica不缺数据。
  8. 执行phase 2。如果是retention lease则直接从Lucene查询出需要发送的doc,如果是translog则获取一个translog的快照,将数据分批发送到replica

Replica shard node

  1. replica 会接收primary的segment file,translog,打开engine的请求
  2. 最后进入进入FINALIZE阶段。执行refresh

一致性问题

因为replica恢复时的phase2阶段既有新写入的replication,也有回放的doc,此时如果针对doc 1有两个更新操作,第一个在回放的操作中,第二个在新的replication,然后replica先执行了replication再执行回放会导致数据不一致,ES通过校验version来解决这个问题,第一个操作的version小于第二个操作,因此即使第一个操作后到达也会被拒绝。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用户ssh正确密码登陆树莓派镜像均报错Permission denied, please try again.处理方法

一个树莓派镜像&#xff0c;启动后发现没有 sshd 功能&#xff0c;于是 启用 openssh&#xff0c;重新启动&#xff0c;又发现树莓派拒绝 ssh 连接请求。 我的一台树莓派IP是&#xff1a;192.168.59.133任何服务器使用任何用户ssh均报错&#xff0c;甚至连自己都不能ssh自己。 …

algotithm -- 排序算法

排序算法总结表&#xff1a; 1. In-place 和 Out-place 含义 参考链接 in-place 占用常数内存&#xff0c;不占用额外内存 假如问题规模是n&#xff0c;在解决问题过程中&#xff0c;只开辟了常数量的空间&#xff0c;与n无关&#xff0c;这是原址操作&#xff0c;就是In-…

HarmonyOS开源软件Notice收集策略说明

开源软件Notice是与项目开源相关的文件&#xff0c;收集这些文件的目的是为了符合开源的规范。 收集目标 只收集打包到镜像里面的模块对应的License&#xff1b;不打包的都不收集&#xff0c;比如构建过程使用的工具&#xff08;如clang、python、ninja等&#xff09;都是不收…

【Linux环境配置】EPYC7642双路服务器Ubuntu22.04安装配置纪要

文章目录 1. 硬件环境配置1.1 WiFi网卡配置1.2 机械键盘配置1.2.1 快速配置1.2.2 按键确认1.2.3 配置存储 1.3 声卡和输出 2. 软件安装2.1 安装常用工具2.1.1 安装Chrome2.1.2 sogou 输入发安装 2.2 开发工具安装2.2.1 安装 vscode2.2.2 文本比较工具 3. 其他环境配置X client,…

如何评估供应商的绩效

在供应链管理中,评估供应商的绩效是一个至关重要的环节。通过对供应商的绩效进行评估,企业可以了解供应商的实际表现,并采取相应的措施进行改进或调整。以下是一些评估供应商绩效的关键方面: 产品质量产品质量是评估供应商绩效的重要指标之一。企业应关注供应商提供的产品是…

【C语言基础考研向】08判断语句与循环语句

1.关系表达式与逻辑表达式 算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符、相同优先级的运算符从左至右进行结合等&#xff0c;那么表达式5>3&&8<4-!0的最终值是多少?其计算过程如下图所示。 2.if-else语句 引入:在你打开衣…

[小程序]使用代码渲染页面

一、条件渲染 1.单个控制 使用wx:if"{{条件}}"来判断是否需要渲染这段代码&#xff0c;同时可以结合wx:elif和wx:else来判断 <view wx:if"{{type0}}">0</view> <view wx:elif"{{type1}}">1</view> <view wx:else>…

MySQL UNION 操作符

昨天介绍了 MySQL 数据库使用 LIKE 子句来进行筛选查询&#xff0c;今天主要讲解下 MySQL UNION 操作符。 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合&#xff0c;并去除重复的行。UNION 操作符必须由两个或多个 SELECT 语句组成&#xff0c;每…

Angular系列教程之父子组件通信详解

文章目录 前言组件通信方法1. 输入属性&#xff08;Input Properties&#xff09;2. 输出属性&#xff08;Output Properties&#xff09;3. 服务&#xff08;Services&#xff09;4. ViewChild与ContentChild 示例代码说明结论 前言 在Angular应用程序开发中&#xff0c;父子…

将输入框的数据输出成json

刚学&#xff0c;做一下记录 先上效果图&#xff0c;来不及解释了&#xff0c;后面再说 源码&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1pV8hDVwpB1kresHag7gIew 提取码&#xff1a;**** 操作&#xff1a; 进入项目目录下&#xff0c;cmd 清除npm缓存&#xff1…

(二十三)Kubernetes系列之prometheus+grafana安装

1.kube-prometheus安装 1.1 下载 访问地址&#xff1a;https://github.com/prometheus-operator/kube-prometheus/releases 点击Source code (tar.gz)进行下载&#xff0c;并上传到k8s服务器master节点 1.2解压 tar zxvf kube-prometheus-0.11.0.tar.gz 1.3进入kube-prome…

C++函数对象-函数包装器-调用空的 std::function 时抛出的异常(std::bad_function_call)

任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象&#xff0c;同时也提供了许多内置的函数对象。 函数包装器 std::function 提供存储任意类型函数对象的支持。 用空的 std::function 时抛出的异常 std::bad_function_call class bad_function_cal…

“gradle project sync failed”

很久没打开AndroidStudio了&#xff0c;打开电脑发现这个软件都没了。重新安装后创建项目不成功&#xff0c;就提示了这个错误。 错误原因 “gradle project sync failed”&#xff1a;gradle没有配置成功。在安卓项目下找到目标文件&#xff1a;gradle --> wrapper -->…

尝试解决githubclone失败问题

BV1qV4y1m7PB 根据这个视频 似乎是我的linux的github似乎下好了 我没有配置好 比如我的ssh-key 现在根据视频试试 首先需要跳转到ssh的文件夹&#xff1a; cd ~/.ssh 然后生成一个ssh-key&#xff1a; ssh-keygen -t rsa -C "<github资料里的邮箱>" 然后…

面试题String怎么帮助我们处理循环依赖的?

String怎么帮助我们处理循环依赖的&#xff1f; 三级缓存。三级缓存存的是什么样的数据&#xff1f; 一级缓存Map 存放完整的Bean&#xff08;流程跑完的&#xff09;、 二级缓存Map 存放不完整的Bean&#xff08;只实例化完&#xff0c;还没属性赋值、初始化&#xff09;、…

IaC基础设施即代码:Terraform 创建 docker 网络与容器资源

目录 一、实验 1.环境 2.Terraform查看版本 3.Linux主机安装Docker 4.Terraform使用本地编译&#xff08;In-house&#xff09;的Providers 5.Docker-CE 开启远程API 6. Linux主机拉取镜像 7.Terraform 创建docker 网络资源 8.Terraform 创建docker 容器资源 一、实验 …

C语言算法赛——蓝桥杯(省赛试题)

一、十四届C/C程序设计C组试题 十四届程序C组试题A#include <stdio.h> int main() {long long sum 0;int n 20230408;int i 0;// 累加从1到n的所有整数for (i 1; i < n; i){sum i;}// 输出结果printf("%lld\n", sum);return 0; }//十四届程序C组试题B…

[机缘参悟-129] :我个人对人生之苦解决之道的思考

目录 前言&#xff1a; 第1层&#xff1a;环境层 1.1 环境的分类 1.2 理解环境的运作的基本原理 1.3 主动选择适合自己的愉快的环境 1.4 主动构建适合自己的愉快的环境 第2层&#xff1a;生理层 2.1 生理健康和情绪之间的关系 2.2 学习人的生物、生理、健康的基本知识…

基于SpringBoot Vue档案管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

(2024,小波变换,空文本反演,负提示反演)基于扩散的图像编辑中文本反演的小波引导加速

Wavelet-Guided Acceleration of Text Inversion in Diffusion-Based Image Editing 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 初步分析 2.1. 空文本优化分析 2.2. 频率…