ES 实战Split Index使用说明
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES 实战Split Index使用说明相关的知识,希望对你有一定的参考价值。
Split Index使用说明
将源索引按照特定的规则分裂成一个比源索引拥有更多主分片的新索引。
使用前提
- 配置
index.number_of_routing_shards
。这个参数的值,应该要比主分片的个数多,且考虑集群数据节点个数这个因素,在合理范围之内。 - 源索引禁止写入。
- 目标索引(新索引)不存在
- 集群的存储必须可以满足源索引数据的两倍。
主要功能实现
引用官网的说明
- 根据源索引的配置创建一个目标索引,目标索引的主分片数据是
index.number_of_routing_shards
的因子。这个因子需要大于源索引主分片数。 - 然后它将源索引中的segments硬链接到目标索引中。 (如果文件系统不支持硬链接,那么所有segments都被复制到新索引中,这是一个更耗时的过程。)
- 一旦创建了低级文件,所有文档将再次被散列,以删除属于不同分片的文档。
- 最后,恢复目标索引,就好像它是一个刚刚重新打开的关闭索引。
硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。
举例说明
- 创建一个源索引,它的主分片个数是2,
number_of_routing_shards
值为4。代表由这个索引可以分裂出主分片为4个的新索引。
PUT gudong20211220001
"settings":
"index.number_of_shards" : 2,
"index.number_of_routing_shards" : 4
- 使用
index.blocks.write
禁止源索引的写,这样索引元数据还是可以正常写的。
PUT /gudong20211220001/_settings
"settings":
"index.blocks.write": true
- 将源索引分裂出新索引
POST gudong20211220001/_split/gudong20211220001?copy_settings=true
"settings":
"index.number_of_shards": 4
默认情况下,除 index.analysis
、index.similarity
和 index.sort
配置外,在拆分操作期间不会复制源索引上的索引设置。除了不可复制的设置之外,源索引中的设置可以通过向请求添加 URL 参数 copy_settings=true
来复制到目标索引。请注意,不能将copy_settings
设置为false
。参数 copy_settings
将在 8.0.0 中移除。
- 查看索引
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open gudong20211220001 p8UzafXnQ8uWGUPbLul1tQ 2 1 0 0 920b 460b
green open gudong20211220002 4bofg6c_S-muSt2w7GvNig 4 1 0 0 1.7kb 920b
分裂过程监控
GET _cat/recovery/gudong20211220002?v
问题总结
问题:“reason”:“the number of source shards [2] must be less that the number of target shards [1]”
说明目标索引的主分片个数需要大于源索引的主分片个数
问题:“reason”:“can’t select recover from shards if both indices have the same number of shards”
说明目标索引的主分片个数需要大于源索引的主分片个数
问题:“reason”:“the number of routing shards [4] must be a multiple of the target shards [8]”
说明目标索引的主分片个数必须是index.number_of_routing_shards
的因数
以上是关于ES 实战Split Index使用说明的主要内容,如果未能解决你的问题,请参考以下文章