Elasticsearch 分片策略

文章目录

  • 分片
  • 索引设置分片
    • 获取索引分片信息
      • 示例
  • 分片分配
    • 集群级分片分配
    • 索引级分片分配
      • 索引级分片筛选
      • 每个节点的分片总数
      • 索引恢复优先级
      • 节点掉线时延时分配

分片

和数据库中的表空间类似,不过分片是为每个索引设置,一个索引可以有多个分片,分片分为主分片和副本分片,主分片和副本分片类似于数据库中的主库和备库。

  • 主分片(shards):可以有一个或多个,但至少会有一个,默认为1。多个主分片类似于分表,可以提高大量数据情况下的性能和吞吐量压力。
  • 副本分片(replicas):是针对主分片的副本,默认为1,也可以有多个。在主分片节点掉线或故障时,会升级为主分片来提供服务。副本分片可以提供查询等服务,提高查询效率和可用性。

注:主分片并不等于主节点,主分片可能存在于 ES 集群的非主节点上。这是由分片分配功能决定的。这个我们下面会说。

索引设置分片

在创建索引的时候,通过 settings 参数设置索引的分片数量,比如:我们创建一个 索引 students

PUT /students{"settings":{"index":{"number_of_shards": 2, // 设置主分片数量(数量限制为1024每个索引,建议不要太多)"number_of_replicas": 1 // 每个主分片对应一个副本分片}},   "mappings": {"properties": {"age": { "type": "integer"},  "birthday":  { "type": "date","format":"yyyy-MM-dd HH:mm:ss" }, "name":   { "type": "keyword"  },"height": {"type": "float"},"id": {"type": "long"},"sex":{"type": "byte"},"remark":{"type":"text"}}}
}

分片的数量信息,在创建索引时设置,请不要修改。修改可能造成问题。虽然 number_of_replicas 是动态索引设置,但我还是建议不要去修改它。如确实需要修改,请重建索引。更多的索引设置请查看官网 索引设置

获取索引分片信息

GET /<target>/_shard_storesGET /_shard_stores

路径参数 target:一个或多个索引的名称,多个用英文逗号隔开即可

查询参数 status
status
(可选,字符串)以逗号分隔的分片健康状态列表,用于限制请求。
有效值包括:

  • green 分配了主分片和所有副本分片。
  • yellow 一个或多个副本分片未分配。
  • red 主分片未分配
  • all 返回所有分片,无论运行状况如何。
    默认为yellow,red ,这意味着如果我们的集群正常,不使用status参数查询不出结果

示例

比如我们目前集群只有两个节点 192.168.1.10 和 192.168.1.11

GET /students/_shard_stores?status=green
{"indices": {"students": {"shards": { // 分片信息对象"0": { // 第 0 个分片"stores": [{"oj5FEiVMRpuWV386zdwy3w": {"name": "myNode1","ephemeral_id": "Au6ZYmTZQFOlGqIelj4ceQ","transport_address": "192.168.1.10:9300","external_id": "myNode1","attributes": {"ml.allocated_processors_double": "4.0","xpack.installed": "true","ml.machine_memory": "6087233536","ml.allocated_processors": "4","ml.max_jvm_size": "3045064704"},"roles": ["data","data_cold","data_content","data_frozen","data_hot","data_warm","ingest","master","ml","remote_cluster_client","transform"]},"allocation_id": "fhR4UEA6SS2OnBnlQ2f-Lw","allocation": "primary" // 表示其为主分片},{"AST-4rnFRdagsd0juerSaw": {"name": "myNode2","ephemeral_id": "1VlBaXYYRAeveu6BX_BpYw","transport_address": "192.168.1.11:9300","external_id": "myNode2","attributes": {"ml.allocated_processors_double": "4.0","xpack.installed": "true","ml.machine_memory": "6087098368","ml.allocated_processors": "4","ml.max_jvm_size": "3045064704"},"roles": ["data","data_cold","data_content","data_frozen","data_hot","data_warm","ingest","master","ml","remote_cluster_client","transform"]},"allocation_id": "LqDP66XYQkuBh204S9HNIQ","allocation": "replica" // 表示其为副本分片}]},"1": { // 第 1 个分片"stores": [{"AST-4rnFRdagsd0juerSaw": {"name": "myNode2","ephemeral_id": "1VlBaXYYRAeveu6BX_BpYw","transport_address": "192.168.1.11:9300","external_id": "myNode2","attributes": {"ml.allocated_processors_double": "4.0","xpack.installed": "true","ml.machine_memory": "6087098368","ml.allocated_processors": "4","ml.max_jvm_size": "3045064704"},"roles": ["data","data_cold","data_content","data_frozen","data_hot","data_warm","ingest","master","ml","remote_cluster_client","transform"]},"allocation_id": "x9N8h80WQ5aJ0aLkXicGRQ","allocation": "primary"},{"oj5FEiVMRpuWV386zdwy3w": {"name": "myNode1","ephemeral_id": "Au6ZYmTZQFOlGqIelj4ceQ","transport_address": "192.168.1.10:9300","external_id": "myNode1","attributes": {"ml.allocated_processors_double": "4.0","xpack.installed": "true","ml.machine_memory": "6087233536","ml.allocated_processors": "4","ml.max_jvm_size": "3045064704"},"roles": ["data","data_cold","data_content","data_frozen","data_hot","data_warm","ingest","master","ml","remote_cluster_client","transform"]},"allocation_id": "NcS8BiuYQs2qip5DIhGEKA","allocation": "replica"}]}}}}
}

可以看到结果我们有两个两两对应的主副分片,分别在集群的两个节点上,且均匀分布的。

查询结果中可能会出现 “store_exception”: … 信息,其表示打开分片索引或早期引擎故障时遇到的任何异常信息

分片分配

我们上面提到,分片是均匀分布在 ES 集群的,但这个不是绝对的。比如受节点所在服务器的内存、磁盘等各种情况的限制,各个节点之间可能存在性能差异等, ES 集群会通过一些策略对分片进行合理的分配。这些策略默认是理想情况下的均匀分配策略,在实际情况中,我们可以进行相应的策略配置使 ES 尽可能的按照我们提供的策略进行分片分配。

分片分配是将分片分配给节点的过程。在初始恢复、副本分配、重新平衡或添加或删除节点时发生。主节点的主要角色之一就是决定将哪些分片分配给哪个节点,以及何时在节点之间移动分片以重新平衡集群。

集群级分片分配

确定分片被分配到哪个节点,以及分片在集群之间的移动策略等的配置。我们这里不做扩展讲解,可以在官网 集群级分片分配 中进行详细查看。

索引级分片分配

索引级分片筛选

通过索引级分片筛选可以将索引按你设置的策略进行分片的分配(如 _name 按节点名称进分配、_host_ip 按主机 IP 分配节点)。

该配置通过 index.routing.allocation 来配置

属性说明
_name按节点名称匹配节点
_host_ip按主机IP地址匹配节点(与主机名关联的IP)
_publish_ip按发布IP地址匹配节点
_ip匹配其中之一_host_ip或_publish_ip
_host按主机名匹配节点
_id按节点id匹配节点
_tier按节点匹配节点数据层角色。data_content、data_hot、data_warm、data_cold、data_frozen

例如:

PUT person/_settings
{"index.routing.allocation.include._ip": "192.168.2.*"
}

将 tset 索引分片分配到 包含 192.168.2.* ip的地址。

  • require:表示必须满足所有条件
  • exclude:条件之外
  • include:必须至少满足其中一个条件

每个节点的分片总数

集群级分片分配器尝试将单个索引的分片分散到尽可能多的节点上。

  • index.routing.allocation.total_shards_per_node
    将分配给单个索引的最大分片数(副本和主分片)。默认为无边界。

  • cluster.routing.allocation.total_shards_per_node
    (动态)分配给每个节点的最大主分片和副本分片数。默认为-1(无限制)

例如:
当前有三个节点,设置的最大分片数都为 100
节点A:当前100个分片
节点B:当前59个分片
节点C:当前20个分片
当节点 C 故障时, ES 集群会将分片分配给节点 B,因为节点 A 已经达到了分片数量的限制。

索引恢复优先级

ES 会尽可能的按优先级顺序恢复未分配到分片,默认情况下,ES 按如下优先级顺序:

  • index.priority设置(值大优先)
  • 索引创建日期(日期越大越优先)
  • 索引名称(先高后低)

我们可以,动态的通过 index.priority 设置优先级,UPDATE 修改索引设置

PUT person/_settings
{"index.priority": 1
}

节点掉线时延时分配

当某个节点丢失(离开集群)时,主节点

  • 将副本分片替换该节点的主分片
  • 重新分配丢失的副本分片
  • 在其余的节点上重新平衡分片

这个过程会给集群增加负载,当节点丢失的时间很短,几分钟内就恢复了,那么此过程其实是可以避免的,我们可以通过 index.unassigned.node_left.delayed_timeout 来设置分配延迟时间,该配置默认为 1m (1分钟),可以在索引(或所有索引)上更新此设置:

PUT _all/_settings
{"settings": {"index.unassigned.node_left.delayed_timeout": "5m"}
}

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

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

相关文章

TCP三次握手/四次挥手

三次握手 三次握手过程 TCP服务器进程先创建传输控制块TCB&#xff0c;时刻准备接受客户进程的连接请求&#xff0c;此时服务器就进入了LISTEN&#xff08;监听&#xff09;状态&#xff1b;TCP客户进程也是先创建传输控制块TCB&#xff0c;然后向服务器发出连接请求报文&…

【QT 网络云盘客户端】——登录界面功能的实现

目录 1.注册账号 2.服务器ip地址和端口号设置 3. 登录功能 4.读取配置文件 5.显示主界面 1.注册账号 1.点击注册页面&#xff0c;将数据 输入 到 用户名&#xff0c;昵称&#xff0c;密码&#xff0c;确认密码&#xff0c;手机&#xff0c;邮箱 的输入框中&#xff0c; 点…

【C语言学习——————动态内存管理】

文章目录 一、什么是动态内存管理二、动态内存函数的介绍 1.malloc函数的介绍2.calloc函数的介绍3.realloc函数的介绍三、free函数的介绍 一.什么是动态内存管理 我们知道数据都是在内存中进行储存的&#xff0c;但是如果我们需要调用内存&#xff0c;我们可以通过定义一个变量…

HTML <p> 标签

实例 以下代码标记了一个段落&#xff1a; <p>This is some text in a very short paragraph</p> &#xff08;在页面下部&#xff0c;您可以找到更多实例。&#xff09; 浏览器支持 元素ChromeIEFirefoxSafariOpera<p>YesYesYesYesYes 所有主流浏览器都…

网络安全系统中的守护者:如何借助威胁情报 (TI) 提高安全性

在这篇哈巴尔网站上的推文中&#xff0c;我们将解释 TI 缩写背后的含义、为什么需要它、Positive Technologies 收集哪些网络威胁数据以及如何帮助企业预防网络威胁。我们将以四种情况为例&#xff0c;说明公司如何使用 PT Threat Intelligence Feeds 来发现恶意活动并预防攻击…

TCP四次握手为什么客户端等待的时间是2MSL

目录 什么是MSL从第三次握手开始分析总结 什么是MSL MSL是Maximum Segment Lifetime英文的缩写&#xff0c;中文可以译为“报文最大生存时间”&#xff0c;他是任何报文在网络上存在的最长时间&#xff0c;超过这个时间报文将被丢弃。 从第三次握手开始分析 第三次握手服务端…

uniapp跳转到外部链接

// 一、先配置页面 {"path": "pages/webview/webview","style": {"navigationBarTitleText": ""} } // 二、编写页面 <template><web-view :src"src" /> </template><script> export def…

vue3+ts+elementui-plus二次封装树形表格

复制粘贴即可&#xff1a; 一、定义table组件 <template><div classmain><div><el-table ref"multipleTableRef" :height"height" :default-expand-all"isExpend" :data"treeTableData"style"width: 100%…

七、用 ChatGPT 修改简历

目录 一、实验介绍 二、背景 三、小张的简历 四、修改简历的技能 五、修改项目经验 5.1 项目经验

从官网认识 JDK,JRE,JVM 三者的关系

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM 是一些大厂面试必问点&#xff0c;要想解决 OOM、性能调优方面的问题&#xff0c;掌握 JVM 知识必不可少&#xff0c;从今天开始&#xff0c;将为大家介绍 JVM 的常用知…

[sqoop]将hive查询后的数据导入到MySQL

一、知识点 export:将Hive的表导入到mysql叫导出 搜了很多&#xff0c;发现sqoop在hive导出到mysql时 1&#xff09;不支持where参数对数据进行过滤。 2&#xff09;不支持指定hive表的方式导出&#xff0c;只能指定Hive目录进行导出。 二、操作 1、在MySQL中建表 creat…

【Docker】Docker应用部署之Docekr容器安装Nginx

目录 一、搜索镜像 二、拉取镜像 三、创建容器 四、测试使用 一、搜索镜像 docker search nginx 二、拉取镜像 docker pull nginx # 不加冒号版本号 默认拉取最新版 三、创建容器 首先我们需要在宿主机创建数据卷目录 mkdir nginx # 创建目录 cd nginx # 进入目录 mkd…

Verilog语法学习——LV9_使用子模块实现三输入数的大小比较

LV9_使用子模块实现三输入数的大小比较 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 在数字芯片设计中&#xff0c;通常把完成特定功能且相对独立的…

Yolov8目标检测

Yolov8目标检测 目录 Yolov8目标检测一、准备数据集二、源码下载配置2.1 下载库2.2 修改配置2.3 训练2.4 验证2.5 测试2.6 模型导出2.7 本地测试 一、准备数据集 Yolov8只支持yolo格式的数据&#xff0c;所以&#xff0c;需要将数据集格式调整为 datasets|images|train|00000…

LeetCode刷题总结 - 面试经典 150 题 -持续更新

LeetCode刷题总结 - 面试经典 150 题 - 持续更新 其他系列数组 / 字符串88. 合并两个有序数组27. 移除元素26. 删除有序数组中的重复项80. 删除有序数组中的重复项 II169. 多数元素189. 轮转数组121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II55. 跳跃游戏274. H 指数380.…

word里的页码问题

一份文档写完&#xff0c;如果需要页码&#xff0c;第一页是封面&#xff0c;封面不需要页码怎么办&#xff1f; 解决&#xff1a;打开页眉页脚&#xff0c;然后把首页不同勾选上&#xff0c;这一页就没有页码了。 目录页&#xff0c;往往要使用罗马数字&#xff0c;其他正文又…

网络传输层协议:UDP和TCP

背景知识 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序&#xff1b; 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -…

【用Vscode实现简单的python爬虫】从安装到配置环境变量到简单爬虫以及python中pip和request,bs4安装

第一步&#xff1a;安装python包 可以默认&#xff0c;也可以选择自己想要安装的路径 第二步&#xff1a;配置python环境变量&#xff0c;找到我的电脑->属性->高级 然后将刚刚安装的路径配置到path路径下&#xff1a; 然后cmd 运行 输入python命令&#xff0c;如果出现…

AVFoundation - 音频录制

文章目录 需要调用到麦克风方法,别忘记添加 Privacy - Microphone Usage Description @interface AudioRecorder ()<AVAudioRecorderDelegate>@property (strong, nonatomic) AVAudioRecorder *recorder;@end@implementation AudioRecorder- (void

FFmpeg aresample_swr_opts的解析

ffmpeg option的解析 aresample_swr_opts是AVFilterGraph中的option。 static const AVOption filtergraph_options[] {{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,{ .i64 AVFILTER_THREAD_SLICE }, 0, INT_MA…