1.将索引的分片数拆分成多个。
_split API要求必须使用特定的number_of_routing_shards创建源索引,以便将来进行分割。在Elasticsearch 7.0中已经删除了这一要求。
索引可以拆分多次,但拆分的最大分片数是由创建索引是的number_of_routing_shards决定的。拆分后的分片数量需是number_of_routing_shards的因子,即number_of_routing_shards是拆分后分片数的倍数。
例如,原有主分片为5,number_of_routing_shards=30的索引,可以按如下几种情况拆分:
5
→10
→30
(split by 2, then by 3)5
→15
→30
(split by 3, then by 2)5
→30
(split by 6)
2.例子:
创建用于拆分的索引
PUT my_source_index{ "settings": { "index.number_of_shards" : 1, "index.number_of_routing_shards" : 6 }}
设置为只读
PUT /my_source_index/_settings{ "settings": { "index.blocks.write": true }}
拆分索引分片
POST my_source_index/_split/my_target_index{ "settings": { "index.number_of_shards": 3 }}
3.拆分必须满足的条件:
- 目标索引必须不存在
- 索引的主碎片必须少于目标索引。
- 目标索引中的主碎片数量必须是源索引中的主碎片数量的一个因子。
- 处理拆分进程的节点必须有足够的空闲磁盘空间来容纳现有索引的第二个副本。
4._split同样支持settings和aliases参数
POST my_source_index/_split/my_target_index{ "settings": { "index.number_of_shards": 5 }, "aliases": { "my_search_indices": {} }}
5.监控
参考
参考资料: