elasticsearch - Elasticsearch:跨数据路径传播文件
问题描述
有很多文档讨论了集群中跨节点的分片分布,但很少讨论节点内多个数据路径的实际使用情况。很明显,一个分片不能在不同的路径上分割,但是Elasticsearch(比如 7.6)何时以及如何决定创建或将一个分片从一个数据路径移动到另一个数据路径(跨节点,或在同一节点内)?
据记载,当磁盘达到给定的水印(例如 90%)时,系统决定重新分配分片。但这是否包括在同一节点内重新分配它们的可能性,例如,将其移动到新的空磁盘?
例如,是否可以告诉 Elastic 在创建新索引时使用给定的数据路径?
是否有任何明确的文件详细解释这些行为?
谢谢。
解决方案
答案因版本而异,将来可能会发生变化。此答案适用于撰写本文时所有已发布和受支持的版本,即版本 6.5 至 7.6。这些版本都不会在节点内的磁盘之间移动分片。他们都在第一次将每个分片分配给节点时为每个分片选择一条路径,这就是它所在的位置。如果磁盘达到高水位线,则 Elasticsearch 会将最完整数据路径上的一个或多个分片重新定位到不同的节点上,这些节点将为分片选择具有足够空间的数据路径,并且通常会更喜欢空路径。
虽然这听起来不太理想,但在实践中这并不是什么大问题。您可以将多个磁盘组合在一起(例如,使用 RAID 0 或 LVM)到单个逻辑卷中,从而避免节点内数据路径之间的平衡问题。或者,如果您真的想更好地控制分片到单个磁盘的分配,您可以在每个主机上运行多个较小的节点,每个节点只使用一个磁盘。您甚至可以结合使用这些方法。
推荐阅读
- arm64 - PRFM 预取指令中的目标缓存级别似乎没有任何影响
- python - 消息标签的Django顺序
- javascript - 如何在 ajax 调用中做相当于 Flask Safe
- python - 如何从单独的机密配置文件访问由 wfastcgi 设置的环境变量
- python - Django CMS:创建页面时设置默认占位符值
- android - react-native:运行expo弹出后项目未构建
- shell - 使用 shell 脚本的 O365 收件箱中的邮件计数
- r - R:当一个值出现超过 75% 的时间时,将组中的每个值设置为 NA
- javascript - 查找并禁用
- c - 反向 Jenkins 的一次一个哈希