聊一聊Elasticsearch的索引分片的恢复机制

devtools/2024/11/19 9:44:13/

1、什么是索引分片的恢复?

所谓索引分片的恢复指的是在某些条件下,索引分片丢失,ES会把某索引的分片复制一份来得到该分片副本的过程。

2、触发分片恢复的场景有哪些?

  • 分片的分配

    当集群中节点的数量发生变化,或者配置了分片的过滤,使得某节点上的分片需要移动到另外一个节点上,就需要进行分片的分配。在分片分配的过程当中,当某个索引的分片缺失,则会通过分片恢复来创建对应的分片。

  • 增加索引的副本数

  • 从索引备份的快照中恢复数据

3、分片恢复的类型

  • 从本地分片复制而来,称为本地存储恢复(local store recovery)。
  • 从其他节点上分片复制而来,称为对等恢复(peer recovery)。
  • 从索引备份的快照文件中恢复的,称为快照恢复(snapshot recovery)。

4、分片恢复的过程

我们假设在一个有3个节点(节点1、节点2、节点3)的集群中创建一个索引(test_index),该索引有3个主分片(P1、P2、P3),每个主分片有1个副本分片(R1、R2、R3)。经过分片分配,每个节点上被分配2个分片,如下图:
在这里插入图片描述
让我们来看看此时的分片分配过程都发生了什么?首先在创建索引的时候,分别在3个节点上创建3个主分片,这三个主分片是在本地创建了3个空分片。然后会将这3个主节点复制到其他节点上产生副本分片(这3个副本分片是从其他节点上的分片复制而来,所以这里发生了3次对等恢复)。

我们再假设下如果节点3下线了会发生什么?节点3下线后,首先要将节点3上的主分片P0恢复,将P0复制到节点1上(我的理解是将节点1上的副本分片R0选举为新的P0主分片),如图:
在这里插入图片描述
然后将缺失的副本(R0、R2)恢复,即分别从节点1上的P0复制到节点2上形成R0,从节点2上的P2复制到节点1上形成R2,如图:
在这里插入图片描述

5、减少不必要的分片恢复

在生产环境中,通常会有很多节点、索引、分片,且索引分片的容量都比较大,若某个节点临时断网或者集群重启时未及时启动所有节点,就会使集群增加很多不必要的分片恢复。

我们可以通过以下两种方式来尽量避免这些不必要的分片恢复:

  1. 延时分片恢复:ES提供了一种索引级别的动态配置,可以通过来指定节点下线多久后开始分片恢复,默认是1分钟。
  2. 调整触发分片恢复的条件:通过ES的elasticsearch.yml文件中添加与网关相关的配置来设置分片恢复的触发条件。

6、参考文献

  • 《Elasticsearch数据搜索与分析实战》——王深湛

上一篇:《聊一聊Elasticsearch的索引的分片分配机制》
下一篇:《聊一聊Elasticsearch的索引数据搜索过程》


http://www.ppmy.cn/devtools/135177.html

相关文章

整理iPhone空间:iphone怎么删除相簿

随着时间的积累,我们的iPhone中不仅会堆积大量照片,还可能会有多个不再需要的相簿。这些相簿不仅占用存储空间,还可能使相册应用变得杂乱无章。本文将探讨iphone怎么删除相簿,并介绍精简iPhone相册的技巧,使你的相册管…

MySQL慢日志

慢查询日志顾名思义就是查询慢的sql语句可以记录到一个日志文件里,至于有多慢才会被记录,默认是10秒,但也可以通过系统配置来更改,慢日志在做系统优化时是一个非常好用的工具 #是否开启慢日志 show variables like slow_query_log…

对PolyMarket的突袭

一天清晨六点,美国联邦调查局的探员冲进了纽约市的一间公寓。这间公寓的主人是26岁的Shane Copeland,一个有着凌乱头发的年轻人,也是一个加密货币狂热者。他运营着一个名为PolyMarket的网站——一个允许用户YZ全球事件结果的平台,…

Spring5

Spring 以下内容仅为了方便复制 IOC作用工作原理 1. 类注解ComponentComponent设置实例名 2. 成员注解:注入基本数据类型与引用类型1. Value:注入基本数据类型2. Autowired:引用类型注入3. 注解Qualifier("对象名")通过对象名注入4…

6.C操作符详解,深入探索操作符与字符串处理

C操作符详解,深入探索操作符与字符串处理 C语言往期系列文章目录 往期回顾: C语言是什么?编程界的‘常青树’,它的辉煌你不可不知VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦C语言入门:解锁基础…

Java LinkedList 详解

LinkedList 是 Java 集合框架中常用的数据结构之一,位于 java.util 包中。它实现了 List、Deque 和 Queue 接口,是一个双向链表结构,适合频繁的插入和删除操作。 1. LinkedList 的特点 数据结构:基于双向链表实现,每个…

QT中使用图表之QChart绘制柱状图

绘制条形(柱状)图,系列选择条形系列QBarSeries x轴选择条形图的种类轴QBarCategoryAxis 1、创建图表视图 //1、创建图表视图 QChartView * view new QChartView(this); //开启抗锯齿 view -> setRenderHint(QPainter::Antialiasing); …

vue自定义指令--一键复制

vue项目中想要实现点击按钮一键复制,可以通过vue的自定义指令directive来实现。 一、新建directive.js文件 新建directive.js文件,用于定义所有的自定义指令。 import { Toast } from vant;const directive {// 一键复制copy:{bind (el, { value }) …