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?v

health 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
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI RAG应用的多种文档分块代码

在开发 RAG 应用程序时,重要的是要有一个完善的文档分块模式来攫取内容。虽然有很多库可以实现这一目标,但重要的是要了解这一过程的基本机制,因为它是 AI RAG 应用程序的基石。 欢迎关注公众号(NLP Research) 测试文档 在测试文档中,我们将使用亚马逊文档中的大型 PDF…

C#使用CryptoStream类加密和解密字符串

目录 一、CrytoStream的加密方法 二、CrytoStream的解密方法 三、实例 1.源码Form1.cs 2.类库Encrypt.cs 3.生成效果 在使用CryptoStream前要先引用命名空间using System.Security.Cryptography。 一、CrytoStream的加密方法 记住,不能再使用DESCryptoServi…

谷粒学院项目redirect_uri 参数错误微信二维码登录

谷粒学院项目redirect_uri 参数错误_redirect_uri": "http%3a%2f%2fguli.shop%2fapi%2fuce-CSDN博客 修改本地配置 # ����˿� server.port8160 # ����&#x…

我的隐私计算学习——联邦学习(3)

本篇笔记主要是根据这位老师的知识分享整理而成【公众号:秃顶的码农】,我从他的资料里学到了很多,期间还私信询问了一些困惑,都得到了老师详细的答复,相当nice! (五)纵向联邦学习 —…

网络多线程开发小项目--QQ登陆聊天功能(发文件)

9.1.5、QQ登陆聊天功能(发文件) 1、需求分析 2、思路分析 3、代码实现 Common: 1) cn.com.agree.qqcommon.MessageType String MESSAGE_FILE_MESSAGE"8";//文件消息2) cn.com.agree.qqcommon.Message private byte[] fileBytes ;private i…

八、Stm32学习-USART-中断与接收数据包

1.通信接口 全双工就是数据的收和发可以同时进行;半双工就是数据的收和发不能同时进行。 异步时钟是设备双方需要约定对应的波特率;同步时钟是设备双方有一根时钟线,发送或接收数据是根据这根时钟线来的。 单端电平是需要共GND;…

2023 年最值得推荐的11个视频转换器(免费和付费)

拥有一个视频转换器供您使用意味着您可以轻松地在任何设备上播放所有视频。我们展示了适用于 Windows 的最佳视频转换器,这样您就不必浪费时间使用不合格的工具。 录制、编辑和分享视频是人生最大的消遣之一。有如此多的设备能够捕捉视频——而且共享它们的途径也很…

【Git】查看凭据管理器的账号信息,并删除账号,解决首次认证登录失败后无法重新登录的问题

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是是《代码管理工具》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的…

Python编程作业一:程序基本流程

目录 一、多分支语句 二、判断闰年 三、猴子吃桃问题 四、上/下三角形乘法表 五、猜数字游戏 一、多分支语句 某商店出售某品牌的服装,每件定价132元,1件不打折,2件(含)到3件(含)打9折&…

可拖拽表单比传统表单好在哪里?

随着行业的进步和发展,可拖拽表单的应用价值越来越高,在推动企业实现流程化办公和数字化转型的过程中发挥了重要价值和作用,是提质增效的办公利器,也是众多行业客户朋友理想的合作伙伴。那么,可拖拽表单的优势特点表单…

【时光记:2023的心灵旅程】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ARM Cortex-Mx 权威指南笔记—SysTick定时器

前言 通过本次学习你可以学到: 1、什么是SysTick定时器? 2、Systick定时器的操作。 3、如何使用Systick定时器。 正文内容参考 ARM Cortex-Mx 权威指南笔记 9.5小节。 什么是Systick定时器 SysTick定时器是Cortex-M处理器内部集成的名为系统节拍定时…

【python,机器学习,nlp】RNN循环神经网络

RNN(Recurrent Neural Network),中文称作循环神经网络,它一般以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。 因为RNN结构能够很好利用序列之间的关系,因此针对自…

电位器

一、电位器简介 电位器是一种可调的电子元件。它是由一个电阻体和一个转动或滑动系统组成。当电阻体的两个固定触电之间外加一个电压时,通过转动或滑动系统改变触点在电阻体上的位置,在动触点与固定触点之间便可得到一个与动触点位置成一定关系的电压。…

C++系列-第1章顺序结构-6-加法、减法和乘法

在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 总结 本文是C系列博客,主要讲述加法减法乘法的用法 加法 减法 乘法 当然可以。下面我将分别为初一的同学提供C中加法、减法、乘法的简单教程和案例,最后再提供一个综合性的…

【Linux驱动】Linux的中断系统 | 中断的重要数据结构

🐱作者:一只大喵咪1201 🐱专栏:《Linux驱动》 🔥格言:你只管努力,剩下的交给时间! 目录 🏀Linux系统的中断⚽中断分类软中断和硬中断中断的上半部和下半部 ⚽tasklet⚽工…

Android studio调试

Android Studio连接手机详细教程(包含遇到的问题集)_android studio 连接手机-CSDN博客 可以创建虚拟机或直连真机或直连模拟器。 无法打开本地终端 Android studio Failed to start [powershell.exe] 利用Android studio的adb命令删除app应用 - 简书 利用ADB工具免root停用A…

如何下载 DEM数字高程数据(SRTM和COPERNICUS)

数字高程模型(Digital Elevation Model,DEM)是地球表面的数字表示,以地形高程信息的形式存在。DEM通常以栅格或点云的形式存在,其中每个单元(栅格或点)都具有对应的高程数值。DEM可以使用各种技…

第88讲:XtraBackup实现增量数据备份以及故障恢复的应用实践

文章目录 1.XtraBackup增量备份恢复的概念2.XBK增量备份语法3.使用XBK实现数据库的增量备份3.1.周日全量备份数据库3.2.周一产生增量数据并进行增量备份3.3.周二产生增量数据并进行增量备份3.4.查看两次增量以及全量的备份文件3.5.核对全量和增量备份的准确性 4.使用XBK通过增量…

销售团队如何实现业绩增长?CRM系统的线索管理功能有什么用?

随着“以客户为中心”观念的逐渐普及,销售团队的客户比过去更复杂,交易周期更久,竞争也更激烈。假如没有明确的销售计划,团队可能陷入混乱,最后导致客户&公司之间的负面结果。在这种情况下,人工智能驱动…