目的:把源索引收缩到另一个主分片更少的目标索引中

官方
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/indices-shrink-index.html
翻译
https://blog.csdn.net/wuxiao5570/article/details/56677484

shrink index API 是把一个源索引,收缩到另一个主分片更少的目标索引中。

但是目标索引的分片数,必须是源索引分片数的因子。比如,

  • 源索引的分片数是:8,那么目标索引的分片数可以是:4, 2, 1;
  • 如果源索引的分片数是一个素数,那么目标索引的分片数只能是:1。

在收缩之前,源索引中每个分片都要有一个副本在这个节点上。

收缩索引的步骤如下:

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

操作过程

设置索引只读

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

  1. PUT /used_car_r_20190107/_settings
  2. {
  3. "settings": {
  4. "index.routing.allocation.require._name": "mvp-hadoop48",
  5. "index.blocks.write": true
  6. }
  7. }
  • index.routing.allocation.require._name
    强制将每个分片的副本重定位到名为shrink_node_name的节点。详见
  • index.blocks.write
    阻止对此索引的写入操作,同时仍允许更改元数据,例如删除索引。

重新定位源索引可能需要一段时间。可以使用_cat recovery API去跟踪进度,也可以使用cluster health API以及wait_for_no_relocating_shards参数,等待所有的分片完成重定位

开始收缩索引

  1. POST used_car_r_20190107/_shrink/m_used_car_r_20190107
  2. {
  3. "settings": {
  4. "index.number_of_replicas": 1,
  5. "index.number_of_shards": 1,
  6. "index.codec": "best_compression"
  7. }
  8. }
  1. POST my_source_index/_shrink/my_target_index
  2. {
  3. "settings": {
  4. "index.number_of_replicas": 1,
  5. "index.number_of_shards": 1,
  6. "index.codec": "best_compression"
  7. },
  8. "aliases": {
  9. "my_search_indices": {}
  10. }
  11. }

索引别名

删除原有索引,并对新索引建别名。别名使得可以用used_car_r_20190107的方式读写,而实际读写的是m_used_car_r_20190107

  1. PUT /m_used_car_r_20190107/_alias/used_car_r_20190107
文档更新时间: 2019-06-12 15:27