目前ES的索引存储路径就一个path.data: /index/data
现在准备挂载到多个盘上面,看索引性能会不会提升明显。
path.data参数后面写了3个路径,每个路径代表一个磁盘。
path.data: /index/data,/data2/index/data,/data3/index/data
测试了单shard和多shard,
单个shard的情况肯定是会往一个磁盘上面写的,这个是没有疑问的;
然后在测试多个shard的时候,发现有时候只往其中两个盘上面写数据,另外一个磁盘不写索引。这里就有点疑惑了,想请教下,官方文档是否有这方面的介绍,关于索引多磁盘写的。请告知,谢谢了
现在准备挂载到多个盘上面,看索引性能会不会提升明显。
path.data参数后面写了3个路径,每个路径代表一个磁盘。
path.data: /index/data,/data2/index/data,/data3/index/data
测试了单shard和多shard,
单个shard的情况肯定是会往一个磁盘上面写的,这个是没有疑问的;
然后在测试多个shard的时候,发现有时候只往其中两个盘上面写数据,另外一个磁盘不写索引。这里就有点疑惑了,想请教下,官方文档是否有这方面的介绍,关于索引多磁盘写的。请告知,谢谢了
2 个回复
rojay - 杭州的一枚90后初入职场的IT男
赞同来自:
ES多盘shard分配原理
假设现在单机环境中有两块磁盘,es的配置文件elasticsearch.yml中的path.data:/index/data,/data2/index/data
配置了两块盘,对应了两个路径。那么我现在要创建hrecord1索引的2个主shard分配原理如下:
首先会创建shard1(我估计ES会优先创建shard编号大的shard,但是影响不大),创建shard1的时候会找出两个路径对应的磁盘空间大的那个盘,然后将shard1放到那个路径下。
创建shard0的时候,会将/index和/data2磁盘的剩余可用空间相加,然后将这个总和乘以百分之五
将前面创建shard1的磁盘空间减去这个百分之五的值,然后再将这个差值与/data2磁盘剩余空间进行比较,找出磁盘空间大的,然后把shard0放到那个大的磁盘空间上。
说白了,这个百分之五的空间是ES为那个创建的shard1设置的预留空间吧。
有错误的地方也欢迎大家指出,一起交流哈!
主要代码在ShardPath.java里面
joycer
赞同来自: