ES 实战Split Index使用说明

Posted 顧棟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES 实战Split Index使用说明相关的知识,希望对你有一定的参考价值。

Split Index使用说明

将源索引按照特定的规则分裂成一个比源索引拥有更多主分片的新索引。

使用前提

  • 配置index.number_of_routing_shards。这个参数的值,应该要比主分片的个数多,且考虑集群数据节点个数这个因素,在合理范围之内。
  • 源索引禁止写入。
  • 目标索引(新索引)不存在
  • 集群的存储必须可以满足源索引数据的两倍。

主要功能实现

引用官网的说明

  1. 根据源索引的配置创建一个目标索引,目标索引的主分片数据是index.number_of_routing_shards的因子。这个因子需要大于源索引主分片数。
  2. 然后它将源索引中的segments硬链接到目标索引中。 (如果文件系统不支持硬链接,那么所有segments都被复制到新索引中,这是一个更耗时的过程。)
  3. 一旦创建了低级文件,所有文档将再次被散列,以删除属于不同分片的文档。
  4. 最后,恢复目标索引,就好像它是一个刚刚重新打开的关闭索引。

硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块

软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

举例说明

  1. 创建一个源索引,它的主分片个数是2,number_of_routing_shards值为4。代表由这个索引可以分裂出主分片为4个的新索引。
PUT gudong20211220001

    "settings": 
        "index.number_of_shards" : 2,
        "index.number_of_routing_shards" : 4 
    

  1. 使用index.blocks.write禁止源索引的写,这样索引元数据还是可以正常写的。
PUT /gudong20211220001/_settings

  "settings": 
    "index.blocks.write": true 
  

  1. 将源索引分裂出新索引
POST gudong20211220001/_split/gudong20211220001?copy_settings=true

  "settings": 
    "index.number_of_shards": 4
  

默认情况下,除 index.analysisindex.similarityindex.sort 配置外,在拆分操作期间不会复制源索引上的索引设置。除了不可复制的设置之外,源索引中的设置可以通过向请求添加 URL 参数 copy_settings=true 来复制到目标索引。请注意,不能将copy_settings设置为false。参数 copy_settings将在 8.0.0 中移除。

  1. 查看索引
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使用说明的主要内容,如果未能解决你的问题,请参考以下文章

ES 实战Shrink Index使用说明

vue2.0 代码功能片段

ES 实战索引模板

ES7-Es8 js代码片段

ES 实战磁盘存储优化

ES 实战磁盘存储优化