您当前的位置: 首页 > 

顧棟

暂无认证

  • 0浏览

    0关注

    227博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【ES实战】Split Index使用说明

顧棟 发布时间:2021-12-20 15:14:16 ,浏览量:0

文章目录
  • 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/gudong20211220002?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的因数

关注
打赏
1663402667
查看更多评论
立即登录/注册

微信扫码登录

0.1495s