Elasticsearch集群最大分片数设置详解:从问题到解决方案

article/2025/6/15 6:34:23

目录

前言

1 问题背景:重启后设置失效

2 核心概念解析

2.1 什么是分片(Shard)?

2.2 cluster.max_shards_per_node的作用

2.3 默认值是多少?

3 参数设置的两种方式

3.2 持久性设置(persistent)

3.2 临时设置(transient)

4 问题解决方案

5 深入理解设置存储机制

6 生产环境最佳实践

7 常见问题解答

8 总结


前言

作为Elasticsearch运维人员,我们经常需要调整集群参数以适应业务需求。其中cluster.max_shards_per_node是一个关键配置,它控制着每个节点可以承载的最大分片数量。本文将深入探讨这个参数的设置方式、持久性问题以及最佳实践,特别是解决" 设置后集群重启恢复默认值"的问题。

1 问题背景:重启后设置失效

最近有用户反馈了一个典型问题:
"通过curl命令行方式成功设置了cluster.max_shards_per_node参数,但是当集群重启后,这个值又恢复成了默认值,这是为什么?"
# 用户使用的设置命令
curl -X PUT "192.168.10.33:9200/_cluster/settings" -H "Content-Type: application/json" -d'
{"transient": {"cluster.max_shards_per_node": 8000}
}
'
这个问题实际上涉及Elasticsearch集群设置的持久性机制,让我们先了解一些基础概念。

2 核心概念解析

2.1 什么是分片(Shard)?

分片是Elasticsearch中数据存储的基本单元,每个索引由一个或多个分片组成。分片分为:
  • 主分片(Primary Shard):负责数据写入和读取
  • 副本分片(Replica Shard):提供高可用和读取负载均衡

2.2 cluster.max_shards_per_node的作用

这个参数限制单个数据节点可以承载的分片总数(主分片+副本分片),主要作用包括:
  • 防止单个节点过载
  • 平衡集群资源使用
  • 避免分片过多导致的性能下降

2.3 默认值是多少?

不同版本默认值可能不同:
  • Elasticsearch 6.x及之前:无硬性限制
  • Elasticsearch 7.0+:默认1000
  • 可以通过API查询当前默认值:
curl -X GET "192.168.10.33:9200/_cluster/settings?include_defaults=true&pretty" | grep max_shards_per_node

3 参数设置的两种方式

  • Elasticsearch提供了两种设置集群参数的方式,它们的持久性完全不同:

3.2 持久性设置(persistent)

特点
  • 写入集群状态
  • 重启后仍然有效
  • 适合生产环境
  • 设置命令
curl -X PUT "192.168.10.33:9200/_cluster/settings" -H "Content-Type: application/json" -d'
{"persistent": {"cluster.max_shards_per_node": 8000}
}
'

3.2 临时设置(transient)

特点
  • 仅在内存中生效
  • 重启后恢复默认值
  • 适合临时测试
  • 设置命令
curl -X PUT "192.168.10.33:9200/_cluster/settings" -H "Content-Type: application/json" -d'
{"transient": {"cluster.max_shards_per_node": 8000}
}
'

4 问题解决方案

  • 针对开头提出的问题,解决方案很简单:使用persistent替代transient设置
  • 完整解决方案步骤:
  • 检查当前设置
curl -X GET "192.168.10.33:9200/_cluster/settings?pretty"
  • 使用persistent方式设置
curl -X PUT "192.168.10.33:9200/_cluster/settings" -H "Content-Type: application/json" -d'
{"persistent": {"cluster.max_shards_per_node": 8000}
}
'
  • 验证设置
curl -X GET "192.168.10.33:9200/_cluster/settings?pretty"
  • 重启测试:重启集群后再次检查设置是否保留

5 深入理解设置存储机制

  • 为了更深入理解为什么transient设置会丢失,我们需要了解Elasticsearch的配置存储架构:
  • 静态配置:通过elasticsearch.yml文件配置,需要重启生效
  • 动态配置:通过API实时修改
    • transient:仅保存在内存中的集群状态
    • persistent:持久化到磁盘的集群状态

6 生产环境最佳实践

  • 合理设置分片数
  • 不是越大越好,需考虑节点资源
  • 一般建议:总分片数 ≤ 节点数 × max_shards_per_node × 0.8
  • 监控分片数量
# 查看当前分片分布
curl -X GET "192.168.10.33:9200/_cat/shards?v"
# 查看节点分片负载
curl -X GET "192.168.10.33:9200/_cat/nodes?v&h=name,shards"
  • 结合ILM管理索引生命周期
  • 自动滚动创建新索引
  • 自动删除过期索引
  • 控制历史数据保留时间
  • 设置恢复建议
# 推荐设置公式
建议值 = min(5000, 节点内存GB * 20)# 示例:64GB内存节点
curl -X PUT "192.168.10.33:9200/_cluster/settings" -H "Content-Type: application/json" -d'
{"persistent": {"cluster.max_shards_per_node": 2000}
}
'

7 常见问题解答

Q1:为什么需要限制最大分片数?
A:每个分片都会消耗内存、CPU和文件描述符资源。过多的分片会导致:
  • 性能下降
  • 集群不稳定
  • 恢复时间变长
Q2:如何判断当前分片数是否合理?
# 计算当前分片使用率
总分数=$(curl -s -X GET "192.168.10.33:9200/_cat/shards?h=index,shard,prirep" | wc -l)
节点数=$(curl -s -X GET "192.168.10.33:9200/_cat/nodes?h=ip" | wc -l)
max_shards=$(curl -s -X GET "192.168.10.33:9200/_cluster/settings?include_defaults=true" | jq '.defaults.cluster.max_shards_per_node')
使用率=$((总分数 * 100 / (节点数 * max_shards)))
echo "当前分片使用率: ${使用率}%"
Q3:设置过大有什么风险?
  • 可能导致节点OOM
  • 影响查询性能
  • 延长故障恢复时间

8 总结

通过本文,我们深入理解了:
  • cluster.max_shards_per_node参数的重要性
  • persistent和transient设置的区别
  • 解决重启后设置恢复默认值的问题
  • 生产环境的最佳实践
希望这篇文章能帮助您更好地管理Elasticsearch集群分片数量,避免因设置不当导致的性能问题

http://www.hkcw.cn/article/oXuSBBIkgV.shtml

相关文章

机器学习:集成学习概念、分类、随机森林

本文目录: 一、集成学习概念**核心思想:** 二、集成学习分类(一)Bagging集成(二)Boosting集成(三)两种集成方法对比 三、随机森林 一、集成学习概念 集成学习是一种通过结合多个基学习器&#…

Python基于SVM技术的手写数字识别问题项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在当今数字化转型加速的时代,手写数字识别作为图像处理与机器学习领域的一个经典问题,具有广…

MySQL 全量、增量备份与恢复

一.MySQL 数据库备份概述 备份的主要目的是灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审计等。之前已经学习过如何安装 MySQL,本小节将从生产运维的角度了解备份恢复的分类与方法。 1 数据备份的重要性 在企业中数据的价值至关…

Python Pytest

1.Pytest用例发现规则 1.1 模块名(python文件)名必须以 test_ 开头或 _test 结尾,如 test_case,case_test,下划线都不能少 1.2 模块不能放在 . 开头的隐藏目录或者叫 venv的目录下,virtual environment,叫venv1都可以…

[Linux] MySQL源码编译安装

目录 环境包安装 创建程序用户 解压源码包 配置cmake ​编辑编译 安装 配置修改属性 属主和属组替换成mysql用户管理 系统环境变量配置 初始化数据库 服务管理 启动 环境包安装 yum -y install ncurses ncurses-devel bison cmake gcc gcc-c 重点强调:采…

RK3568-移植codesys-runtime

PC下载安装CODESYS Development System V3.5.17.0 https://store.codesys.com/en/codesys.html#product.attributes.wrapperPC下载安装 CODESYS Control for Linux ARM64 SL 4.1.0.0.package https://store.codesys.com/en/codesys-control-for-linux-arm-sl-1.html 注意&…

安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6

前言 昨天更新了四篇博客,我们顺利的 安装了 ubuntu server 服务器,并且配置好了 ssh 免密登录服务器,安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装好Nodejs,还有PNPM包管理工具 。 作为服务器的运行…

nav2笔记-250603

合作背景: AMD与Open Navigation在过去几个月里进行了合作,旨在向ROS 2社区展示AMD强大的Ryzen AI、Embedded和Kria能力。 演示内容: 帖子提到,他们已经开始展示如何使用Ryzen AI为自主机器人产品提供动力,在各种现实世…

黑马Java面试笔记之 消息中间件篇(RabbitMQ)

一. 消息丢失问题 RabbitMQ如何保证消息不丢失? 使用场景有: 异步发送(验证码、短信、邮件... )MYSQL和Redis,ES之间的数据同步分布式事务削峰填谷...... 消息丢失原因会有三种情况,分别分析一下 1.1 生…

如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)

您是否曾经想更改网站外观的某些方面,但不知道怎么做?有一个解决方案——您可以将自定义 CSS(层叠样式表)添加到您的WordPress网站! 在本文中,我们将讨论您需要了解的有关CSS的所有知识以及如何使用它来修…

NLP学习路线图(二十):FastText

在自然语言处理(NLP)领域,词向量(Word Embedding)是基石般的存在。它将离散的符号——词语——转化为连续的、富含语义信息的向量表示,使得计算机能够“理解”语言。而在众多词向量模型中,FastT…

小巧实用,Windows文件夹着色软件推荐

软件介绍 本文介绍一款能实现Windows系统文件夹颜色分类的软件。 软件特点 这款软件免费且开源,体积仅1.35MB,小巧轻便,适合喜欢小工具的用户。 软件安装 安装过程十分便捷,打开软件后点击“install”即可完成安装。 基本操作…

解决Vditor加载Markdown网页很慢的问题(Vite+JS+Vditor)

1. 引言 在上一篇文章《使用Vditor将Markdown文档渲染成网页(ViteJSVditor)》中,详细介绍了通过Vditor将Markdown格式文档渲染成Web网页的过程,并且实现了图片格式居中以及图片源更换的功能。不过,笔者发现在加载这个渲染Markdown网页的时候…

leetcode hot100刷题日记——36.最长连续序列

解答&#xff1a; 实际上在哈希表中存储不重复的数字。 然后遍历哈希表&#xff0c;找间隔&#xff0c;更新最大间隔。 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int>hash;for(int num:nums){hash.insert(num);}in…

Unity Mac 笔记本操作入门

在 macOS 笔记本电脑上使用 Unity Editor 的场景视图 (Scene View) 旋转视角&#xff0c;主要依赖于触摸板手势和键盘修饰键的组合。由于没有物理中键&#xff0c;操作方式会与 Windows 鼠标略有不同。 以下是具体的旋转视角操作&#xff1a; 1. 基本旋转视角 (Orbit) 这是最…

【笔记】使用Media Creation Tool给新主机装win10魔改iso

前提&#xff1a; win10的iso是魔改的 已经下载好在旧电脑 在这里随便挑一个符合你要求的Win10系统下载_Win10专业版_windows10正式版下载 - 系统之家 下载好win10版本的媒体创建工具https://www.microsoft.com/zh-cn/software-download/windows10 制作装机U盘 插入U盘 管理…

深圳南柯电子|储能EMC整改:如何节省70%整改费用的实战方法

在新能源产业蓬勃发展的当下&#xff0c;储能系统作为电网调峰、可再生能源消纳的核心载体&#xff0c;其电磁兼容性&#xff08;EMC&#xff09;问题日益成为制约行业发展的技术瓶颈。EMC&#xff08;Electromagnetic Compatibility&#xff09;即电磁兼容性&#xff0c;指设备…

R1-Searcher++新突破!强化学习如何赋能大模型动态知识获取?

R1-Searcher新突破&#xff01;强化学习如何赋能大模型动态知识获取&#xff1f; 大语言模型&#xff08;LLM&#xff09;虽强大却易因静态知识产生幻觉&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术成破局关键。本文将解读R1-Searcher框架&#xff0c;看其如何通…

用 Vue 做一个轻量离线的“待办清单 + 情绪打卡”小工具

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

6-2 MySQL 数据结构选择的合理性

6-2 MySQL 数据结构选择的合理性 文章目录 6-2 MySQL 数据结构选择的合理性1. 全表查询2. Hash 查询3. 二叉搜索树4. AVL 树5. B-Tree6.B Tree7. R树8. 小结附录&#xff1a;算法的时间复杂度9. 最后&#xff1a; 这篇文章是我蹲在《尚硅谷》-康师傅博主家的 WiFi 上(不是)&am…