聊一聊Elasticsearch的索引的分片分配机制

1、什么是分片分配

分片分配是由ES主节点将索引分片移动到ES集群中各个节点上的过程。

该过程尽量保证,同一个索引的分片尽量分配到更多的节点上,以此来达到读写索引的时候可以利用更多硬件资源的效果。

在分配过程当中,也不能将某个主分片和它的副本分片分配到同一个节点上,或者将某个主分片的多个副本分片分配到同一个节点上。之所以这样是因为怕某个节点挂掉了会导致整个集群丢失数据。这里引申出以下一个问题:

如果某索引的副本分片数量大于集群中的节点数量,那多出来的副本分片会如何呢?

答案是:多出来的副本分片将无法得到分配,在集群中也将无法发挥任何作用。

2、分片分配的过程

本节将通过一个ES集群中节点数量的变化,来看下分片的分配情况。

  1. 场景一:假设在一个单节点的ES集群中,创建一个索引,该索引有3个主分片,每个主分片有一个副本分片。 在这里插入图片描述
    如上图:由于ES集群中只有一个节点(节点-0),所以索引的三个主分片(主分片-0、主分片-1、主分片-2)都被分配到了该节点上,而与这三个主分片对应的三个副本分片,则由于集群中无其他节点,使得它们没有得到分配。
  2. 场景二: 基于【场景一】我们在ES集群中再加一个新的节点(节点-1),此时ES集群中有2个节点,分别为:节点-0、节点-1。 在这里插入图片描述
    如上图:与3个主分片对应的副本分片(副本分片-0、副本分片-1、副本分片-2、)被分配到了新的节点(节点-1)上。
  3. 场景三: 还是基于【场景一】我们把S集群中有的节点增加为3个,分别为:节点-0、节点-1、节点-2。 在这里插入图片描述
    如上图:ES集群中每个节点上都有两个分片(达到了分片平衡),并且任一节点挂掉都不会导致数据的丢失。
  4. 场景四:试想如果节点的数量超过了分片的数量,即将【场景一】中的集群扩充到7个节点或者更多。
    在这里插入图片描述
    如上图:当ES集群中的节点数N达到了总分片数,继续增加节点的数量也无法提升该索引的读写性能(新增的节点上无可分配的索引分片,所以也就无法提供写服务和读服务了)。

3、分片分配的感知

基于上边介绍的【场景三】为例,我们再增加一个场景条件:「节点-0」和「节点-1」是分属于同在一台物理服务器(服务器A)上的两个不同虚拟机(虚拟机-0和虚拟机-1),而「节点-2」是另外一台物理服务器(服务器B)上的虚拟机(虚拟机-2),如下图所示:
在这里插入图片描述
我们来设想下如果「服务器A」挂掉了会怎么样?由于「主分片-0」和它的副本分片「副本分片-0」都在服务器A上,所以「服务器A」挂掉后会导致「主分片-0」上的数据丢失。

为了要解决这个问题,我们可以使用分片分配的感知,来人为对副本分片分配的位置进行干预。将ES集群中的节点进行区域划分,不允许副本分片被分配到它的主分片所属的区域内

使用分片分配感知后的结果如下图:
在这里插入图片描述
如上图:我们可以看到在同一个区域内,不允许主分片和它的副本分片同时存在,这样的话即使「节点-0」和「节点-1」都挂掉了,也不会出现数据丢失的问题。

4、分片分配的过滤

所谓的分片分配的过滤指的是:我们可以通过配置来指定分片分配的时候只能分配到某些节点上或不能分配到某些节点上。

当我们要从ES集群中删除某个节点的时候,在该节点被删除前,我可以使用分片分配过滤将该节点上的所有分片分配到其他节点上。

使用该功能有一个前提条件:为每一个节点设置一些属性,以便于设置过滤条件的时候将节点区分开来。例如,在某个节点的elasticsearch.yml中自定义一个state属性,如下:

node.attr.state: vip​​

5、参考文献

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

上一篇:《聊一聊Elasticsearch的基本原理与形成机制》

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

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

相关文章

springboot的增删改查商城小实践(b to c)

首先准备一张表,根据业务去设计表 订单编号是参与业务的,他那订单编号里面是有特殊意义的,比如说像什么一些年月日什么的,一些用户的ID都在那编号里面呢?不能拿这种东西当主件啊 根据数据量去决定数据类型 价格需要注意…

Ubuntu 安装 RTL8811cu 网卡驱动

一、支持的网卡 RTL8811AU、RTL8811CU、RTL8821AU、RTL8821CU 二、下载驱动 github:https://github.com/brektrou/rtl8821CU 直接下载zip源码即可 三、安装驱动 sudo su -i #切换到root用户 apt-get update #更新安装源 apt-get install -y dkms …

解锁炎症和肿瘤免疫治疗新靶点:TREM1&TREM2

前 言 TREM家族属于细胞表面受体,介导调控炎症反应,现已成为癌症、神经退行性疾病以及炎症性疾病等多种疾病最有潜力的药物靶点。截至2023年6月,有5项FDA注册的临床前或临床试验正在进行中,有3项是TREM2在阿尔茨海默症&#xff…

【Unity】Unity拖拽在Android设备有延迟和卡顿问题的解决

一、介绍 在制作Block类游戏时,其核心的逻辑就是拖拽方块放入到地图中,这里最先想到的就是Unity的拖拽接口IDragHandler,然后通过 IPointerDownHandler, IPointerUpHandler 这两个接口判断按下和松手,具体的实现逻辑就是下面 public void On…

Postman断言与依赖接口测试详解!

在接口测试中,断言是不可或缺的一环。它不仅能够自动判断业务逻辑的正确性,还能确保接口的实际功能实现符合预期。Postman作为一款强大的接口测试工具,不仅支持发送HTTP请求和接收响应,还提供了丰富的断言功能,帮助测试…

NewStar CTF 2024 misc WP

decompress 压缩包套娃,一直解到最后一层,将文件提取出来 提示给出了一个正则,按照正则爆破密码,一共五位,第四位是数字 ^([a-z]){3}\d[a-z]$ 一共就五位数,直接ARCHPR爆破,得到密码 xtr4m&…

鸿蒙开发案例:七巧板

【1】引言(完整代码在最后面) 本文介绍的拖动七巧板游戏是一个简单的益智游戏,用户可以通过拖动和旋转不同形状的七巧板块来完成拼图任务。整个游戏使用鸿蒙Next框架开发,利用其强大的UI构建能力和数据响应机制,实现了…

C++_STL_xx_番外01_关于STL的总结(常见容器的总结;关联式容器分类及特点;二叉树、二叉搜索树、AVL树(平衡二叉搜索树)、B树、红黑树)

文章目录 1. 常用容器总结2. 关联式容器分类3. 二叉树、二叉搜索树、AVL树、B树、红黑树 1. 常用容器总结 针对常用容器的一些总结: 2. 关联式容器分类 关联式容器分为两大类: 基于红黑树的set和map;基于hash表的unorder_set和unorder_ma…

Django目录结构最佳实践

Django项目目录结构 项目目录结构配置文件引用修改创建自定义子应用方法修改自定义注册目录从apps目录开始 项目目录结构 └── backend # 后端项目目录(项目名称)├── __init__.py├── logs # 项目日志目录├── manage.py #…

AnytimeCL:难度加大,支持任意持续学习场景的新方案 | ECCV‘24

来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Anytime Continual Learning for Open Vocabulary Classification 论文地址:https://arxiv.org/abs/2409.08518论文代码:https://github.com/jessemelpolio/AnytimeCL 创新…

2020年美国总统大选数据分析与模型预测

数据集取自:2020年🇺🇸🇺🇸美国大选数据集 - Heywhale.com 前言 对2020年美国总统大选数据的深入分析,提供各州和县层面的投票情况及选民行为的可视化展示。数据预处理阶段将涉及对异常值的处理&#xff0…

工业以太网PLC无线网桥,解决用户布线难题!

工业以太网无线网桥 功能概述 本产品是工业以太网(Profinet、EtherNet/IP、ModbusTCP等)转无线设备,成对使用(一对一),出厂前已经配对好,用户不需要再配对,即插即用。适用于用户布线不方便的场景。使用方式简单,只需要把拨码开关设置好并上电即可工作,无需进行其它设置。支持P…

Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑

一、前言 接上回说到,修改了程序,增加了接口,却不知道有没有什么问题,于是心怀忐忑等了几天。果然过了几天,应用那边的小伙伴报过来了问题。用户证书安装没有问题,系统证书(新增的接口)还是出现了问题。调…

AUTOSAR CP NVRAM Manager规范导读

一、NVRAM Manager功能概述 NVRAM Manager是AUTOSAR(AUTomotive Open System ARchitecture)框架中的一个模块,负责管理非易失性随机访问存储器(NVRAM)。它提供了一组服务和API,用于在汽车环境中存储、维护和恢复NV数据。以下是NVRAM Manager的一些关键功能: 数据存储和…

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…

LeetCode25:K个一组翻转链表

原题地址:. - 力扣(LeetCode) 题目描述 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那…

k8s图形化显示(KRM)

在master节点 kubectl get po -n kube-system 这个命令会列出 kube-system 命名空间中的所有 Pod 的状态和相关信息,比如名称、状态、重启次数等。 systemctl status kubelet #查看kubelet状态 yum install git #下载git命令 git clone https://gitee.com/duk…

Github 2024-11-07 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10HTML项目1Kubernetes: 容器化应用程序管理系统 创建周期:3618 天开发语言:Go协议类型:Apache License 2.0Star数量:106913 个Fork数…

HTML 标签属性——<a>、<img>、<form>、<input>、<table> 标签属性详解

文章目录 1. `<a>`元素属性hreftargetname2. `<img>`元素属性srcaltwidth 和 height3. `<form>`元素属性actionmethodenctype4. `<input>`元素属性typevaluenamereadonly5. `<table>`元素属性cellpaddingcellspacing小结HTML元素除了可以使用全局…

制造业仓储信息化总体规划方案

文件是一份关于制造业仓储信息化的总体规划方案&#xff0c;主要内容包括项目背景、现状调研、项目目标、建设思路、业务蓝图设计方案、系统设计方案以及场景展示等。以下是对PPT内容的分析和总结&#xff1a; 1. 项目背景 目标&#xff1a;通过物流执行系统&#xff08;LES&a…