Elasticsearch索引的数据存储路径是如何确定的
Elasticsearch中在node的配置中可以指定path.data用来作为节点数据的存储目录而且我们可以指定多个值来作为数据存储的路径那么Elasticsearch是如何判断应该存储到哪个路径下呢今天我就记录一下这个问题。Elasticsearch的索引创建过程集群master收到创建索引的请求后经过创建索引的一些步骤最终会将索引创建完成的请求提交到ClusterStatemaster将根据ClusterState分发给所有节点涉及创建shard的节点会读取本地可用的path.data然后依据一定的规则获取路径。创建基本shard路径保存基本的shard信息。如何确定在哪个目录下源码主要调用的是ShardPath的selectNewPathForShard方法for (NodeEnvironment.NodePath nodePath : env.nodePaths()) { totFreeSpace totFreeSpace.add(BigInteger.valueOf(nodePath.fileStore.getUsableSpace())); } // TODO: this is a hack!! We should instead keep track of incoming (relocated) shards since we know // how large they will be once theyre done copying, instead of a silly guess for such cases: // Very rough heuristic of how much disk space we expect the shard will use over its lifetime, the max of current average // shard size across the cluster and 5% of the total available free space on this node: BigInteger estShardSizeInBytes BigInteger.valueOf(avgShardSizeInBytes).max(totFreeSpace.divide(BigInteger.valueOf(20))); // TODO - do we need something more extensible? Yet, this does the job for now... final NodeEnvironment.NodePath[] paths env.nodePaths(); // If no better path is chosen, use the one with the most space by default NodeEnvironment.NodePath bestPath getPathWithMostFreeSpace(env); if (paths.length ! 1) { MapNodeEnvironment.NodePath, Long pathToShardCount env.shardCountPerPath(shardId.getIndex()); // Compute how much space there is on each path final MapNodeEnvironment.NodePath, BigInteger pathsToSpace new HashMap(paths.length); for (NodeEnvironment.NodePath nodePath : paths) { FileStore fileStore nodePath.fileStore; BigInteger usableBytes BigInteger.valueOf(fileStore.getUsableSpace()); pathsToSpace.put(nodePath, usableBytes); } bestPath Arrays.stream(paths) // Filter out paths that have enough space .filter((path) - pathsToSpace.get(path).subtract(estShardSizeInBytes).compareTo(BigInteger.ZERO) 0) // Sort by the number of shards for this index .sorted((p1, p2) - { int cmp Long.compare(pathToShardCount.getOrDefault(p1, 0L), pathToShardCount.getOrDefault(p2, 0L)); if (cmp 0) { // if the number of shards is equal, tie-break with the number of total shards cmp Integer.compare(dataPathToShardCount.getOrDefault(p1.path, 0), dataPathToShardCount.getOrDefault(p2.path, 0)); if (cmp 0) { // if the number of shards is equal, tie-break with the usable bytes cmp pathsToSpace.get(p2).compareTo(pathsToSpace.get(p1)); } } return cmp; }) // Return the first result .findFirst() // Or the existing best path if there arent any that fit the criteria .orElse(bestPath); } statePath bestPath.resolve(shardId); dataPath statePath; }过程分析首先判断是否自定义了path.data没有自定义就在默认路径下创建自定义的情况下确保节点下最少有5%的空间可以使用获取所有的paths然后设置默认最佳的path是当前拥有最多空间的path遍历所有的paths首先过滤掉没有空间的path如果最终没有符合的就返回4步骤的path否则继续6步骤按照规则对paths排序首先判断每个path下该索引的shard数优先返回含有本索引的shard数最少的path当条件结果相同对比每个path中包含有的shard总数所有索引的返回包含shard数最少的path当2条件结果相同对比可用空间返回可用空间最大的path生成相应的路径创建目录等信息。

相关新闻

Adobe-GenP 3.0:打破Adobe订阅壁垒的专业级激活方案

Adobe-GenP 3.0:打破Adobe订阅壁垒的专业级激活方案

Adobe-GenP 3.0:打破Adobe订阅壁垒的专业级激活方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 当创意工作者面临Adobe Creative Cloud高昂的订阅费…

2026/7/10 12:27:11阅读更多 →
别再乱放文件了,Python项目结构这么搭最省心

别再乱放文件了,Python项目结构这么搭最省心

项目中建新文件的时候,我经常想一个问题:这个文件放哪?工具类放 utils?还是 helpers?还是 common?还是 lib?每个项目都有自己的叫法。换了项目又要重新猜。去年重构了一个老项目,把这…

2026/7/10 12:27:11阅读更多 →
Bloome多AI智能体协作平台:从原理到实战的完整指南

Bloome多AI智能体协作平台:从原理到实战的完整指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在AI技术快速发展的今天,每个领域都涌现出专业的AI专家,但真正的挑战在于如何让这些专家协同工作。Bloome作为…

2026/7/10 12:22:11阅读更多 →
【Cursor AI实战指南】:5个React组件生成技巧,让开发效率提升300%(2024最新版)

【Cursor AI实战指南】:5个React组件生成技巧,让开发效率提升300%(2024最新版)

更多请点击: https://codechina.net 第一章:Cursor AI 与 React 开发的融合演进 Cursor AI 正在重塑前端开发的工作流,尤其在 React 生态中展现出深度协同潜力。它不再仅作为代码补全工具,而是通过语义理解、上下文感知和项目级推…

2026/7/10 13:22:19阅读更多 →
Rocky、Centos linux常用操作

Rocky、Centos linux常用操作

修改Rocky服务器ip地址: cd /etc/NetworkManager/system-connections/ 修改文件中的ip systemctl restart NetworkManager 查看本机公网ip地址: curl http://cip.cc curl http://ipinfo.io 查看防火墙白名单: firewall-cmd --li…

2026/7/10 13:22:19阅读更多 →
马斯克600亿收购Cursor、Claude突遭封禁,2026年AI编程工具格局一夜变天

马斯克600亿收购Cursor、Claude突遭封禁,2026年AI编程工具格局一夜变天

马斯克600亿收购Cursor、Claude突遭封禁,2026年AI编程工具格局一夜变天> 2026年7月,AI编程赛道连续投下两颗核弹——美国以"国家安全"为由叫停Claude最新模型向外国用户开放,紧接着马斯克旗下SpaceX以600亿美元天价收购Cursor。…

2026/7/10 13:22:19阅读更多 →
【RocketMQ】消息中间件基础知识

【RocketMQ】消息中间件基础知识

【RocketMQ】消息中间件基础知识【一】RocketMQ概述【1】MQ简介【2】MQ永用途(1)限流削峰(2)异步解耦(3)数据收集【3】RocketMQ 介绍(1)RocketMQ 特点(2)Rock…

2026/7/10 13:22:19阅读更多 →
使用git bash上传本地文件夹至github

使用git bash上传本地文件夹至github

一、上传步骤可看这条链接 上传本地文件(夹)代码到GitHub 超详细讲解最全命令集合(配图 适用全部)_github上传文件夹-CSDN博客 二、针对上传失败解决的办法 在按照上面这条链接进行传输的过程中,可能在git push -u o…

2026/7/10 13:22:19阅读更多 →
ChatGPT API并发瓶颈突破指南:从50→5000 RPS的4步熔断+异步批处理架构落地实录

ChatGPT API并发瓶颈突破指南:从50→5000 RPS的4步熔断+异步批处理架构落地实录

更多请点击: https://codechina.net 第一章:ChatGPT API并发调用优化的演进背景与挑战全景 随着大语言模型应用从单点实验快速走向生产级服务,ChatGPT API 的调用模式正经历从串行试探到高并发调度的根本性转变。早期开发者常以简单循环逐条…

2026/7/10 13:17:18阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/10 12:29:21阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/10 4:59:05阅读更多 →
浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比当你在浏览器地址栏敲入一个网址时,背后可能隐藏着一场关于"要不要重新下载资源"的精密博弈。这场博弈的裁判是HTTP缓存机制,而304状态码则是这场博弈…

2026/7/10 0:00:01阅读更多 →
RoboWits:面向创造性问题求解的双臂机器人认知推理基准

RoboWits:面向创造性问题求解的双臂机器人认知推理基准

1. 项目概述:这不是又一个机器人抓取数据集,而是一次对“思考力”的压力测试 RoboWits——这个名字里藏着两个关键信号:“Robo”直指物理世界中的具身智能体,“Wits”则毫不掩饰地指向人类最核心的认知能力:机敏、判断…

2026/7/10 0:00:01阅读更多 →
5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Windows…

2026/7/10 0:00:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/9 9:45:20阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/9 15:50:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/9 14:14:17阅读更多 →