关于ES多磁盘目录

挂载多磁盘目录

在配置Elasticsearch(ES)时,许多用户会为其设置多个数据存储目录(path.data),这主要是为了增加存储容量。如果服务器配备了RAID卡,使用RAID 0来创建一个大的单一目录是一种非常方便的做法,这样可以避免处理多个目录的复杂性。然而,在实际测试中,我们发现数据似乎只写入了一个磁盘,尽管监控显示磁盘读写速率还有很大的剩余空间。

这引发了一个问题:是否可以并发写入以提高性能?

首先,我们需要理解Elasticsearch的分片(shard)分配机制。一个分片只会被分配到一个物理目录上,它不会被进一步分割存储到多个目录盘上。这意味着,尽管你配置了多个数据目录,但单个分片并不会跨目录写入数据。然而,如果一个索引有足够的分片,且分片数大于数据节点数,那么数据确实可以写入多个磁盘。但在大多数情况下,多目录配置并没有并发写入的效果。对于多磁盘配置,推荐使用RAID 0,这样可以使得磁盘I/O均匀分布到所有磁盘上,从而提高性能。

分片分配相关知识

官方文档也提到,使用多个IO设备(通过指定多个path.data路径)来存储节点上的分片,对于增加总存储空间和提高IO性能是非常有用的,尤其是当IO性能成为Elasticsearch使用的瓶颈时。

在处理多个数据目录时,Elasticsearch会选择一个最佳目录(通常是最不常用的)来分配给分片存储数据文件。如果你遇到了数据只写入一个磁盘的问题,这可能是因为其他磁盘没有被选为最佳目录,或者磁盘的性能和配置存在问题。

此外,使用RAID 0虽然可以提高性能,但它也有其风险,尤其是当出现硬盘故障时,可能会导致整个节点上的所有分片丢失。因此,官方推荐使用多个目录来提高数据的安全性。

总的来说,如果你的目标是提高写入性能,并且对数据安全性的要求不是非常高,可以考虑使用RAID 0。但如果你更关心数据的安全性,那么使用多个数据目录,并确保每个分片至少有一个副本分片,将是更好的选择。这样可以保证即使某个磁盘发生故障,数据也不会丢失。在实际操作中,可以根据你的具体需求和风险承受能力来做出决策。

查证官网说明

将path.data配置成多个路径,也即使用多个IO设备,对于增大总存储空间很有用,也有提升IO性能的效果。

Using multiple IO devices (by specifying multiple `path.data` paths) to hold the shards
on your node is useful for increasing total storage space, 
and improving IO performance, if that's a bottleneck for your Elasticsearch usage.

shard分配的基本逻辑:
多目录情况下,一个shard被分配到一个node上之后,node会挑选一块最佳目录(多数是空的)分配给这个shard存储数据文件。

前面提到raid 0是另一条路,但是raid 0是条带化存储数据,出现坏盘的情况就会全军覆没(对ES来说存在该节点的所有shard都丢失),官方推荐使用多目录。

因此,你的shard需要至少一个副本分片来保证数据不会丢失。

如何确保Elasticsearch的分片在多个数据目录中均匀分布?

为了确保Elasticsearch的分片在多个数据目录中均匀分布,您可以采取以下措施:

  1. 合理规划分片数量:在创建索引时,合理规划分片的数量对于确保分片均匀分布至关重要。过多的分片会增加集群的管理开销,而过少的分片可能导致单个节点上的资源竞争。根据Elasticsearch官方文档,建议每个分片包含大约1亿到2亿个文档,或者分片大小在10GB到50GB之间。

  2. 使用数据流和ILM:对于时间序列数据,可以使用数据流和索引生命周期管理(ILM)来自动管理分片。数据流允许您跨多个基于时间的索引存储数据,而ILM可以自动管理这些索引。

  3. 监控和调整分片分布:使用Elasticsearch的监控工具来跟踪分片的分布情况。如果发现某个节点上的分片过多,可以调整index.routing.allocation.total_shards_per_node设置来限制单个节点上的分片数量。

  4. 磁盘水位标记:通过设置磁盘水位标记(low and high watermarks),可以控制节点上的磁盘使用情况,防止某些路径的磁盘使用率过高而影响整个节点的性能。Elasticsearch会尝试在磁盘使用率低于高水位标记时,将分片从该节点迁移出去。

  5. 分片分配感知:如果您的集群分布在多个物理位置(如不同的机架或数据中心),可以使用分片分配感知来确保分片在这些位置之间均匀分布。通过为节点设置自定义属性(如rack_idzone_id),Elasticsearch可以在分配分片时考虑到这些物理位置。

  6. 集群级分片分配过滤:如果您需要对特定节点或节点组进行维护或退役,可以使用集群级分片分配过滤来排除这些节点,从而控制分片的分配。

  7. 避免不必要的映射字段:默认情况下,Elasticsearch会自动为每个文档中的每个字段创建映射。这些映射字段会在磁盘上占用空间,并在内存中保留元数据。为了避免不必要的开销,可以使用显式映射来控制字段的创建,或者使用运行时字段来处理不常用的字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024点线面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值