1、企业级实战问题
Elasticsearch 配置文件里面的 path.data: 可以配置多个数据目录的路径的吗?
——来自死磕Elasticsearch知识星球微信群
2、7.13.0 之前版本可以配置多路径
多数据路径的支持在7.13.0 + 版本中已被弃用。
https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
如果需要,>=7.13.0 的版本仍然可以在 path.data 中指定多个路径。
Elasticsearch 将在提供的所有路径上存储节点的数据,但每个分片的数据将保留在相同的路径上。
3、但,官方不推荐使用多路径
即便咱们配置了多路径,Elasticsearch 不会在节点的数据路径之间平衡分片。
单个路径的高磁盘使用量可以触发整个节点的高磁盘使用警戒水位线。
如果触发,即使节点的其他路径有可用磁盘空间,Elasticsearch 也不会向节点添加分片。
如果需要额外的磁盘空间,官方建议添加新节点而不是额外的数据路径。
4、为什么不推荐呢?官方 Github 定性结论解读
https://github.com/elastic/elasticsearch/issues/71205
Elasticsearch 的多数据路径(MDP)功能允许在path.data设置中指定多个路径(通常指向不同的磁盘),这类似于软件级的 RAID-0。
虽然在过去,多数据路径作为一种简单运行多磁盘设置的方法被使用,但它长期以来一直是用户投诉的源头。
原因之一:在于它可能导致混淆或不直观的行为。
原因之二:多数据路径的实现复杂,并且没有得到良好的测试和维护,实际上与跨多个驱动器扩展数据路径文件系统和为每个数据路径运行一个节点相比,没有带来任何好处。
5、多路径问题的替代方案
有没有替代方案?使用什么样的替代方案这才是咱们关注的点!
在面对多数据路径(MDP)被弃用的问题时,以下是一些替代方案和相关的实施原理以及注意事项,这些可以帮助我们转移到新的配置,同时保持数据的完整性和可用性。
5.1 替换方案一:每个数据路径运行一个独立节点
原理
- 如果我们希望在单一机器上使用多数据路径,可以为每一个数据路径运行一个独立的节点。
- 这样每个节点都管理自己的一个数据路径,从而简化了数据管理,并可能提高系统的稳健性。
注意事项
5.2 替换方案二:迁移到单路径配置并进行滚动重启
原理
- 通过类似滚动重启的过程,逐个关闭节点并将其替换为配置了单一数据路径的节点,可以在不停机的情况下迁移到使用单一路径的设置。
具体步骤
- 步骤 1、数据备份:首先,进行快照备份,以防在迁移过程中发生数据丢失。
- 步骤 2、使用分配过滤器迁移数据(可选):
1. PUT _cluster/settings 2. { 3. "persistent": { 4. "cluster.routing.allocation.exclude._name": "target-node-name" 5. } 6. }
当上述命令执行后,Elasticsearch集群的配置会更新,以后所有新的数据分配都不会考虑名为"target-node-name"的节点。
这意味着如果集群中有新的分片需要分配或现有分片因为其他原因需要重新分配,系统将不会把它们分配到这个指定的节点“target-node-name”上。
- 步骤3:追踪数据迁移进度,必要时借助集群分配解释 API 确定迁移失败的原因。
在Elasticsearch中,管理和监控数据迁移进度以及分析任何可能的迁移问题时,可以使用两个有用的API:
GET _cat/allocation
和
GET _cluster/allocation/explain
API。
GET _cat/allocation 执行结果参考:
GET _cluster/allocation/explain 执行结果参考:
这两个API的结合使用提供了一个强大的工具,以确保数据迁移的透明度和问题的可解决性,帮助管理员有效管理和优化Elasticsearch集群的操作。
- 步骤4:节点关闭与数据清理:按照滚动重启的步骤,关闭目标节点,并清理其数据路径中的数据。
这里的关闭的目标节点就是咱们步骤1的“target-node-name”节点,关闭节点是为了停止所有在该节点上的数据处理和服务,以便进行数据清理。
- 步骤5:存储和节点配置:重配置存储设备,确保有足够空间,并调整节点的path.data设置。
- 步骤6:重新启动节点:启动新配置的节点,继续执行滚动重启的其他步骤。
注意事项:
- 1、确保在迁移和重启过程中,集群的健康状态为黄色或绿色,这表明每个分片至少被分配到了一个节点。
- 2、迁移完成后,可能需要删除之前应用的分配过滤器,以允许数据正常分配。
1. PUT _cluster/settings 2. { 3. "persistent": { 4. "cluster.routing.allocation.exclude._name": null 5. } 6. }
通过上述策略,可以有效地从使用多数据路径的配置过渡到更稳定和可维护的单数据路径配置,同时最小化迁移过程中的风险和中断。
5.3 替换方案三:使用硬件或软件虚拟化层实现单一文件系统
原理:
- 利用如RAID的硬件虚拟化层或Linux上的逻辑卷管理器(LVM)、Windows上的存储空间等软件虚拟化层,可以创建一个横跨多个磁盘的文件系统。
- 这样做可以整合多个物理硬盘资源,而不是在应用层面分散路径。
注意事项:
- 确保虚拟化存储配置正确,具有足够的数据容量和备份,以防单点故障。
- 在进行硬件或软件配置更改前,最好进行充分的测试,以确保新配置的稳定性和性能。
- 建议专业的运维同事做一下技术支持。
6、参考
https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
https://github.com/elastic/elasticsearch/issues/71205
更短时间更快习得更多干货!
和全球 近2000+ Elastic 爱好者一起精进!
elastic6.cn——ElasticStack进阶助手
比同事抢先一步学习进阶干货!