Сжатие индекса со слишком большим числом шардов (shrink)
ElasticsearchЖизненный цикл индексаКоманда
# 1) Block writes on the source and gather all shard copies on one node:
PUT log-2026.09/_settings
{
"index.number_of_replicas": 0,
"index.routing.allocation.require._name": "node-1",
"index.blocks.write": true
}
GET _cluster/health/log-2026.09?wait_for_no_relocating_shards=true&timeout=30m
# 2) Create a new index with fewer shards (the target must be a factor of the source):
POST log-2026.09/_shrink/log-2026.09-shrunk
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 1,
"index.routing.allocation.require._name": null,
"index.blocks.write": null,
"index.codec": "best_compression"
}
}Что делает
Уменьшает число первичных шардов индекса, в который больше не пишут, создавая жёсткие ссылки на его сегменты в новом индексе; снижает накладные расходы heap и числа шардов.
Когда использовать
Когда ежедневные индексы созданы с большим числом шардов, чем нужно, лимит числа шардов близок или перед переносом старых индексов на warm-уровень.
Внимание
Во время shrink исходный индекс закрыт для записи; применяйте только к индексам, в которые больше не пишут. Целевое число шардов должно быть делителем исходного (8 -> 4, 2 или 1). Узлу, где собираются все копии, нужно столько же свободного диска, сколько занимает исходный индекс. При replicas 0 у исходного шарда одна копия; не удаляйте источник, пока операция не завершится и новый индекс не станет green.