Elasticsearch基础篇(七):分片大小修改和路由分配规则

  • Elasticsearch基础篇(七):分片大小修改和路由分配规则
  • 1. 分片
    • 1.1 主分片(Primary Shard)
    • 1.2 副本分片(Replica Shard)
    • 1.3 分片路由(Routing Shard)
  • 2. 分片分配的基本策略
  • 3. 分片写入验证
    • 3.1 数据写入测试
    • 3.2 路由机制
  • 4. 修改分片数量
    • 4.1 修改主分片数量
    • 4.2 Reindex修改主分片的数量
    • 4.3 修改副分片数量

Elasticsearch基础篇(七):分片大小修改和路由分配规则

1. 分片

在Elasticsearch中,分片是对索引数据的水平划分和分布。索引被分成多个分片,每个分片可以在集群的不同节点上存储。这种分片的设计提供了一种水平扩展的能力,允许将大量数据分布到多个节点上,从而提高性能和可伸缩性。每个分片就是一个Lucene的实例,具有完整的功能。

1.1 主分片(Primary Shard)

每个索引都被划分成若干个主分片,每个主分片都是一个独立的索引。主分片负责处理所有的读和写操作。主分片的数量在索引创建时确定,之后不能更改。

1.2 副本分片(Replica Shard)

为了提高系统的可用性和容错性,每个主分片都可以有零个或多个副本分片。副本分片是主分片的完整复制,位于不同的节点上。如果某个节点故障,系统仍然能够通过副本分片提供服务。副本的数量可以在索引运行时动态调整。

1.3 分片路由(Routing Shard)

数据被分配到特定的分片是通过分片路由机制实现的。默认情况下,Elasticsearch使用文档ID的哈希值进行路由,确保数据在不同主分片上均匀分布。开发者也可以自定义路由值。

2. 分片分配的基本策略

  • ES使用数据分片(shard)来提高服务的可用性,将数据分散保存在不同的节点上以降低当单个节点发生故障时对数据完整性的影响,同时使用副本(repiica)来保证数据的完整性。关于分片的默认分配策略,在7.x之前,默认5个primary shard,每个primary shard默认分配一个replica,即5主1副,而7.x之后,默认1主1副
  • ES在分配单个索引的分片时会将每个分片尽可能分配到更多的节点上。但是,实际情况取决于集群拥有的分片和索引的数量以及它们的大小,不一定总是能均匀地分布。
  • Paimary只能在索引创建时配置数量,而replica可以在任何时间分配,并且primary支持读和写操作,而replica只支持客户端的读取操作,数据由es自动管理,从primary同步。
  • ES不允许Primary和它的Replica放在同一个节点中,并且同一个节点不接受完全相同的两个Replica

3. 分片写入验证

es集群,ip: 192.168.0.156,节点端口:9201,9202,9203

设置索引分片数量

http://192.168.0.156:9201/test_index/
{"settings": {"index": {"number_of_shards": "3","number_of_replicas": "2"}}
}

image-20240111144943997

包含三个节点(node1、node2、node3)的ES集群,每个主分片有3个主分片和2个副分片,分片分布如下:

  • Node1: 主分片0、副本1、副本2
  • Node2: 主分片1、副本0、副本2
  • Node3: 主分片2、副本0、副本1
#查看所有索引的分片信息
http://192.168.0.156:9201/_cat/indices?vhealth status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   test_index       sX7MP6snQ7m3XjX5LXfM3w   3   2          0            0      1.9kb           681b

参数说明:

  • index: 索引名称
  • docs.count:文档总数
  • docs.deleted:已删除文档数
  • store.size: 存储的总容量
  • pri.store.size:主分片的存储总容量

3.1 数据写入测试

新增一条测试数据

image-20240111152205044

# 查看数据写入分片信息
http://192.168.0.156:9201/_cat/shards/test_index?v

image-20240111152847438

当新增一条数据时,该数据将被写入到其中一个主分片,并且它的两个副本被分配到其他两个节点上。这样设计可以提高系统的可用性和容错性,因为数据的多个副本分布在不同的节点上,即使某个节点发生故障,系统仍然可以继续工作。总的来说,具体的分配取决于Elasticsearch的集群配置和负载均衡策略。系统会尽量保证数据在不同节点上的均匀分布,以提高性能和可靠性。

3.2 路由机制

往索引中增加100条数据,文档分布如下:三个主分片的文档数量正好为100,随着文档数量的增加,三个主分片的数量会越来越均衡

image-20240111155703397

es 中的路由机制是通过哈希算法,将具有相同哈希值的文档放到一个主分片中,分片位置的计算方式如下:

shard=hash(routing) % number_of_primary_shards# 路由公式参数说明:
shard_num:最终选择分片序号
routing:路由ID,不指定则为文档ID
number_of_primary_shards:主分片数量

routing 可以是一个任意字符串,es 默认是将文档的 id 作为 routing 值,通过哈希函数根据 routing 生成一个数字,然后将该数字和分片数取余,取余的结果就是分片的位置。

默认的这种路由模式,最大的优势在于负载均衡,这种方式可以保证数据平均分配在不同的分片上。劣势在查询时候无法确定文档的位置,此时 会将请求广播到所有的分片上去执行

4. 修改分片数量

4.1 修改主分片数量

PUT test_index/_settings
{"index" : {"number_of_shards" : 6}
}

报错信息如下:证明索引创建后无法修改分片数

image-20240111162326407

4.2 Reindex修改主分片的数量

[Reindex API | Elasticsearch Guide 8.11] | Elastic

在Elasticsearch中,一旦索引创建时确定了主分片的数量,就不能直接修改。主分片的数量是索引创建时固定的,因为这个值与数据的分布和索引结构有关。要修改主分片的数量,需要采取以下步骤:

  1. 创建新索引: 创建一个新的索引,设置新的主分片数量。这个步骤需要提前计划,因为主分片数量一旦确定,就不能更改。

  2. 重新索引(Reindex): 使用Elasticsearch的Reindex API将旧索引中的数据重新索引到新创建的索引中。这一步会消耗一些计算和存储资源,因此在生产环境中可能需要谨慎操作。

  3. 切换到新索引: 在完成重新索引后,将应用中的写操作切换到新的索引,确保新数据写入新的索引。

  4. 删除旧索引(可选): 如果确认新索引运行正常且数据完整,可以选择删除旧索引释放资源。

通过创建新索引来修改主分片的数量示例:

# 创建新索引(示例中主分片数量为6PUT new_test_index
{"settings": {"index": {"number_of_shards": "6","number_of_replicas": "2"}}
}# 使用Reindex API将旧索引数据重新索引到新索引
POST _reindex
{"source": {"index": "test_index"},"dest": {"index": "new_test_index"}
}# 切换应用中的写操作到新索引# 可选:删除旧索引
DELETE /old_index

image-20240111163355752

4.3 修改副分片数量

PUT test_index/_settings
{"index" : {"number_of_replicas" : 1}
}

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

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

相关文章

2024年前端最新面试题-vue3(持续更新中)

文章目录 前言正文什么是 MVVC什么是 MVVM什么是 SPA什么是SFC为什么 data 选项是一个函数Vue 组件通讯(传值)有哪些方式Vue 的生命周期方法有哪些如何理解 Vue 的单项数据流如何理解 Vue 的双向数据绑定Vue3的响应式原理是什么介绍一下 Vue 的虚拟 DOM介…

设计模式-- 3.适配器模式

适配器模式 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色和职责 请求者(client):客户端角色,需要使用适配器的对象,不需要关心适配器内部的实现,…

常用的检测数据异常值方式,以及异常数据如何处理!!

清除数据异常值 1.箱线图检测数据异常值方法2.3σ原则检测数据异常值方法3. 异常数据处理方式:总结(小白看看就行) 1.箱线图检测数据异常值方法 箱线图检测:箱线图是一种常用的异常值检测方法,它以数据的分位数为基础…

常见的加密算法

加密算法 AES 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: RSA RSA 加密算法是一种典型的非对称加密算法&am…

Java后端开发——Mybatis实验

文章目录 Java后端开发——Mybatis实验一、MyBatis入门程序1.创建工程2.引入相关依赖3.数据库准备4.编写数据库连接信息配置文件5.创建POJO实体6.编写核心配置文件和映射文件 二、MyBatis案例:员工管理系统1.在mybatis数据库中创建employee表2.创建持久化类Employee…

嵌套的CMake

hehedalinux:~/Linux/multi-v1$ tree . ├── calc │ ├── add.cpp │ ├── CMakeLists.txt │ ├── div.cpp │ ├── mult.cpp │ └── sub.cpp ├── CMakeLists.txt ├── include │ ├── calc.h │ └── sort.h ├── sort │ ├── …

基于面向对象编程,C++实现单链表

链表:在内存空间中是非连续存储 组成:链表是由一个个节点组成的,每个节点都包含两个元素:数据和指针 节点头文件: 建立一个ListNode.h头文件 #pragma once class ListNode { public:int value;ListNode* next;Lis…

当浏览器输入url的时候会发生什么?

说在前面 当我们在浏览器中输入URL并按下回车时,背后发生了一系列神秘的操作。本文将带您深入了解,从URL解析到页面渲染,揭秘浏览器输入URL的完整流程。 具体步骤 当浏览器输入URL时,一般经过以下细节步骤: 1、引言 …

利用Qt输出XML文件

使用Qt输出xml文件 void PixelConversionLibrary::generateXML() {QFile file("D:/TEST.xml");//创建xml文件if (!file.open(QIODevice::WriteOnly | QIODevice::Text))//以只写方式&#xff0c;文本模式打开文件{qDebug() << "generateXML:Failed to op…

语义分割miou指标计算详解

文章目录 1. 语义分割的评价指标2. 混淆矩阵计算2.1 np.bincount的使用2.2 混淆矩阵计算 3. 语义分割指标计算3.1 IOU计算方式1(推荐)方式2 3.2 Precision 计算3.3 总体的Accuracy计算3.4 Recall 计算3.5 MIOU计算 参考 MIoU全称为Mean Intersection over Union&#xff0c;平均…

Docker五部曲之三:镜像构建

文章目录 前言Docker构建架构构建指令构建上下文本地目录Git存储库压缩文件纯文本文件.dockerignore文件 Dockerfile解析器指令环境变量命令执行格式exec格式shell格式 FROMRUNCMDLABELEXPOSEENVADDCOPYENTRYPOINTVOLUMEUSERWORKDIRARGONBUILDSHELL 多级构建 前言 本文均翻译自…

对快速排序思想的进一步理解,分而治之,欧几里得算法(常用求最大公约数的方法)

自己找到的最优的快排的代码 快速排序 思想 分而治之使用欧几里得算法&#xff08;辗转相除法&#xff09;来求解一个应用题 假设有一块地&#xff0c;现在用这个同样大小的正方形来铺满&#xff0c;求所可用的最大的正方形地砖的面积 这两个方法放在一起是因为这个欧几里得要…

Linux环境之Ubuntu安装Docker流程

今天分享Linux环境之Ubuntu安装docker流程&#xff0c;Docker 是目前非常流行的容器&#xff0c;对其基本掌握很有必要。下面我们通过阿里云镜像的方式安装&#xff1a; 本来今天准备用清华大学镜像安装呢&#xff0c;好像有点问题&#xff0c;于是改成阿里云安装了。清华安装…

抓交通肇事犯(python)

问题描述&#xff1a; 一辆卡车违反交通规则&#xff0c;撞人后逃跑。现场有三人目击该事件&#xff0c;但都没有记住车号&#xff0c;只记下了车号的一些特征。甲说&#xff1a;牌照的前两位数字是相同的&#xff1b;乙说&#xff1a;牌照的后两位数字是相同的&#xff0c;但…

GVM垃圾收集器

Serial收集器&#xff08;新生代&#xff09; Serial&#xff08;串行&#xff09;收集器是最基本、历史最悠久的垃圾收集器&#xff0c;采用“标记-复制”算法负责新生代的垃圾收集。它是Hotspot虚拟机运行在客户端模式下的默认新生代收集器。 它是一个单线程收集器。它会使用…

软件测试学到这个程度,面试轻松拿下20K

很多人认为&#xff0c;软件测试是一个简单的职位&#xff0c;职业生涯走向也不会太好&#xff0c;但是随着时间的推移&#xff0c;软件测试行业的变化&#xff0c;人们开始对软件测试行业的认知有了新的高度&#xff0c;越来越多的人开始关注这个行业&#xff0c;开始重视这个…

v-if控制div内容显示,克隆这个div但是v-if没有效果

问题描述&#xff1a; 我的子页面打印的时候通过isPdf来隐藏“选择参加人员”按钮。 我子页面有个el-dialog&#xff0c;el-dialog里面有个大的div它的id为app-pre-meet-add&#xff0c;在子页面我通过isPdf来显示我想要的内容。现在我在父页面先通过this.$refs.child.control…

分布式缓存

分布式缓存 缓存雪崩 缓存雪崩我们可以简单的理解为&#xff1a;由于原有缓存失效&#xff0c;新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了&#xff0c;而对数据库 CPU 和内存造成巨大压力&#xff0c;严重的会造成数据库宕机。从而形成一系列连锁反应&#xf…

C++与Typescript的区别

目录 一、C类模板和函数模板 1.类模板 2.函数模板 二&#xff0c;Typescript 的泛型声明 1.泛型函数 2.泛型类 为什么C和Typescript语言中主张模板和泛型 一、C类模板和函数模板 在C中&#xff0c;类模板和函数模板允许你为多种数据类型编写通用的代码。这就像每个人都有…

山西电力市场日前价格预测【2024-01-14】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-14&#xff09;山西电力市场全天平均日前电价为415.13元/MWh。其中&#xff0c;最高日前电价为851.84元/MWh&#xff0c;预计出现在18:15。最低日前电价为198.87元/MWh&#xff0c;预计…