Elasticsearch -- Shrink Index

shrink index API 是把一个源索引,收缩到另一个主分片更少的目标索引中。但是目标索引的分片数,必须是源索引分片数的因子。比如,源索引的分片数是:8,那么目标索引的分片数可以是:4, 2, 1;如果源索引的分片数是一个素数,那么目标索引的分片数只能是:1。在收缩之前,源索引中每个分片都要有一个副本在这个节点上。 收缩索引的步骤如下:

  1. 以源索引的定义(设置)创建一个目标索引。但是目标索引的分片数量要小于源索引的分片数量。
  2. 把源索引的段,硬链接到目标索引,如果文件系统不支持硬链接,那么只能复制到目标索引,这将是一个耗时操作。
  3. 最后目标索引恢复使用,就像刚刚重新打开的一样。
准备收缩索引

为了收缩索引,必须将索引标记为只读,并且索引中每个分片的(主要副本或副本)副本必须重定位到同一节点并且健康值为绿色。用下面的请求可以实现上面的要求:

PUT /my_source_index/_settings
{
  "settings": {
    "index.routing.allocation.require._name": "shrink_node_name", (1)
    "index.blocks.write": true (2)
  }
}

(1):强制将每个分片的副本重定位到名为shrink_node_name的节点。详见
(2):阻止对此索引的写入操作,同时仍允许更改元数据,例如删除索引。
重新定位源索引可能需要一段时间。可以使用_cat recovery API去跟踪进度,也可以使用cluster health API以及wait_for_no_relocating_shards参数,等待所有的分片完成重定位。 ####收缩索引 收缩 my_source_indexmy_target_index;用一下请求:

POST my_source_index/_shrink/my_target_index?copy_settings=true
{
  "settings": {
    "index.routing.allocation.require._name": null, (1)
    "index.blocks.write": null (2)
  }
}

(1):清除目标索引从源索引中复制的,索引分配要求。
(2):清除目标索引从源索引中复制的,阻止索引写操作的设置。
目标索引添加到集群状态后,请求就会返回,不会等待收缩开始。 索引要满足一下要求,才能执行收缩:

  • 目标索引不得存在
  • 源索引必须具有比目标索引更多的主分片。
  • 目标索引中的主分片数必须是源索引中主分片数的一个因子。源索引必须具有比目标索引更多的主分片。
  • 源索引的所有分片中的文档总数不得超过2,147,483,519个,这些分片将收缩到目标索引上的单个分片中,这是可以放入单个分片的最大文档数。
  • 处理收缩过程的节点必须具有足够的可用磁盘空间,以容纳现有索引的第二个副本。(感觉还是事前把副本去掉,不要副本了,之后再设置副本)
    _shrinkAPI和 create index API一样,可以有setting和aliases参数,所以可以为目标索引添加一些配置:
POST my_source_index/_shrink/my_target_index?copy_settings=true
{
  "settings": {
    "index.number_of_replicas": 1,
    "index.number_of_shards": 1, (1)
    "index.codec": "best_compression"  (2)
  },
  "aliases": {
    "my_search_indices": {}
  }
}

(1):目标索引中的分片数。这必须是源索引中分片数量的一个因数。 (2):最佳压缩仅在对索引进行新写入时生效,例如强制合并分片到单个段时。
可能未在_shrink请求中指定映射。默认情况下,除index.analysis,index.similarity和index.sort设置外,源索引上的索引设置不会在收缩操作期间复制。除了不可复制的设置之外,可以通过URL参数copy_settings = true,将源索引中的设置复制到目标索引。请注意,copy_settings不能设置为false。参数copy_settings将在8.0.0中删除。

监控搜索过程

可以使用_cat recovery API,监视收缩过程;或者通过给cluster health API设置wait_for_status=yellow等到所有主分片都被分配。
在分配任何分片之前,只要目标索引已添加到群集状态,_shrink API就会返回。此时,所有分片都处于unassigned状态。如果由于任何原因无法在收缩节点上分配目标索引,则其主分片将保持未分配状态,直到可以在该节点上分配为止。分配主分片后,它将进入initializing状态,并开始收缩过程。收缩操作完成后,分片将变为active状态。此时,Elasticsearch将尝试分配副本,并可能决定将主分片重定位到另一个节点。

Wait For Active Shards

由于收缩操作会创建一个新的索引来缩小分片,因此在创建索引时等待活动分片的设置,也适用于收缩索引操作。

转载于:https://my.oschina.net/5icode/blog/2872151

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值