收缩(Shrink) 索引
- shrink 索引API 将现有索引缩小为具有较少主分片的新索引。目标索引的主分片数必须是源索引分片数的一个因子。缩小前,索引中每个分片副本必须存在同一个节点上。例:8个主分片的索引可以缩小为4个、2个或1个主分片,15个主分片可缩为5、3、1个主分片。
- 收缩的工作流程
a. 创建一个新的目标索引,其定义与源索引相同,但主分片数少
b. 硬链接 源索引的段到目标索引
c. 恢复目标索引,类似于关闭的索引重新被打开 - 收缩索引的准备工作
a. 索引必须标记为只读
b. 索引中的每个分片的拷贝必须重定位到同一个节点,并且状态为green
ps:上图实现了以上两条件
- 图中第一个键值对参数:强制将每个分片的拷贝重定位到shrink_node_name的节点
- 图中第二个键值对参数:阻止对该索引的写入操作,允许改元数据,如删除索引
- 重定位索引较耗时,可使用_cat recovery API跟踪进度,也可使用cluster health API的wait_for_no_relocating_shards参数,等待所有分片都被分配
-
收缩索引
(1)第一个参数: 清除从源索引拷贝的分配请求
(2)第二个参数:清除从源索引拷贝的写阻塞
-
收缩索引条件
(1)目标索引不存在
(2)源索引主分片数比目标索引多
(3)目标索引的主分片数是源索引主分片数的因子
(4)处理收缩过程的节点必须具有足够的磁盘空间,可容纳现有索引的第二个副本
- _shrink的API可为目标索引接受settings和aliases参数
- 默认情况,源索引上的索引设置不会在收缩操作期间复制,除了index.analysis,index.similarity,index.sort设置外
-
监控收缩进程
(1)可通过_cat recovery API监控,或设置cluster health API的wait_for_status参数为yellow(等待所有主分片被分配)
(2)分配分片前,只要目标索引已添加到集群状态,_shrink API就会返回。若因为某原因,无法在收缩节点上分配目标索引,则其主分片保持未分配状态,直到可在该节点上分配为止
(3)一旦主分片分配后,将进入状态初始化,并开始收缩过程。收缩完成后,分片变为活动状态。此时,es尝试分配所有副本,并可能决定将主分片重定位到另一个节点。 -
Wait For Active Shards
收缩过程会创建一个新的索引来缩小分片,在创建索引时,活跃分片等待的设置可适用于收缩索引的操作