Уменьшение использования дискового пространства узлами данных
Для уменьшения использования дискового пространства в вашем кластере без потери данных можно попробовать уменьшить количество реплик индексов.
Уменьшение количества реплик индекса может потенциально снизить производительность поиска и избыточность данных. Однако это быстро позволит кластеру "перевести дух" до внедрения более постоянного решения.
Используйте Kibana
- Войдите в консоль Elastic Cloud.
-
На панели Служба Elasticsearch нажмите имя вашего развертывания.
Если имя вашего развертывания отключено, ваши экземпляры Kibana могут быть неисправны. В этом случае обратитесь в службу поддержки Elastic Support. Если ваше развертывание не включает Kibana, вам необходимо сначала его включить.
- Откройте меню навигации справа от логотипа Elastic в левом верхнем углу и перейдите к Stack Management > Index Management.
-
В списке всех ваших индексов дважды щелкните столбец
Replicas, чтобы отсортировать индексы по количеству реплик, начиная с индекса с наибольшим количеством реплик. Просмотрите индексы и по одному выбирайте индекс с наименьшей важностью и большим количеством реплик.Уменьшение количества реплик индекса может потенциально снизить производительность поиска и избыточность данных.
-
Для каждого выбранного индекса нажмите на его имя, а затем на появившейся панели нажмите
Edit settings, уменьшите значениеindex.number_of_replicasдо желаемого значения и нажмитеSave. - Продолжайте этот процесс до тех пор, пока кластер снова не станет стабильным.
Чтобы оценить, сколько реплик необходимо удалить, сначала необходимо оценить количество дискового пространства, которое необходимо освободить.
-
Сначала извлеките соответствующие пороговые значения диска, которые укажут, сколько места следует освободить. Соответствующие пороговые значения — это верхний предел для всех уровней, кроме замороженного, и пороговое значение затопления для замороженного уровня. Следующий пример демонстрирует недостаток дискового пространства на уровне «hot», поэтому мы извлечем только верхний предел:
resp = client.cluster.get_settings( include_defaults=True, filter_path="*.cluster.routing.allocation.disk.watermark.high*", ) print(resp)response = client.cluster.get_settings( include_defaults: true, filter_path: '*.cluster.routing.allocation.disk.watermark.high*' ) puts response
const response = await client.cluster.getSettings({ include_defaults: "true", filter_path: "*.cluster.routing.allocation.disk.watermark.high*", }); console.log(response);GET _cluster/settings?include_defaults&filter_path=*.cluster.routing.allocation.disk.watermark.high*
Ответ будет выглядеть так:
{ "defaults": { "cluster": { "routing": { "allocation": { "disk": { "watermark": { "high": "90%", "high.max_headroom": "150GB" } } } } } } }Это означает, что для решения проблемы нехватки дискового пространства необходимо либо снизить использование дискового пространства ниже 90 %, либо иметь более 150 ГБ свободного пространства. Подробнее о работе этого порога см. здесь.
- Следующий шаг — определить текущее использование дискового пространства; это укажет, сколько места необходимо освободить. Для простоты в нашем примере один узел, но вы можете применить то же самое ко всем узлам, которые превышают соответствующий порог.
- Настройка верхнего предела использования дискового пространства указывает на то, что использование дискового пространства необходимо снизить ниже 90 %. Рассмотрите возможность добавления некоторого запаса, чтобы узел не превысил порог в ближайшем будущем. В этом примере освободим примерно 7 ГБ.
-
Следующим шагом является перечисление всех индексов и выбор, какие реплики уменьшать.
Следующая команда упорядочивает индексы по убыванию количества реплик и размера первичного хранилища. Мы делаем это, чтобы помочь вам выбрать, какие реплики уменьшать, исходя из предположения, что чем больше у вас реплик, тем меньше риск при удалении копии, и чем больше реплика, тем больше места будет освобождено. Это не учитывает какие-либо функциональные требования, поэтому, пожалуйста, рассматривайте это лишь как рекомендацию.
resp = client.cat.indices( v=True, s="rep:desc,pri.store.size:desc", h="health,index,pri,rep,store.size,pri.store.size", ) print(resp)response = client.cat.indices( v: true, s: 'rep:desc,pri.store.size:desc', h: 'health,index,pri,rep,store.size,pri.store.size' ) puts response
const response = await client.cat.indices({ v: "true", s: "rep:desc,pri.store.size:desc", h: "health,index,pri,rep,store.size,pri.store.size", }); console.log(response);GET _cat/indices?v&s=rep:desc,pri.store.size:desc&h=health,index,pri,rep,store.size,pri.store.size
Ответ будет выглядеть так:
health index pri rep store.size pri.store.size green my_index 2 3 9.9gb 3.3gb green my_other_index 2 3 1.8gb 470.3mb green search-products 2 3 278.5kb 69.6kb green logs-000001 1 0 7.7gb 7.7gb
-
В списке выше мы видим, что если мы уменьшим количество реплик до 1 для индексов
my_indexиmy_other_index, мы освободим необходимое дисковое пространство. Нет необходимости уменьшать репликиsearch-productsиlogs-000001, так как у них нет реплик. Уменьшите реплики одного или нескольких индексов с помощью API обновления настроек индекса:Уменьшение количества реплик индекса может потенциально снизить производительность поиска и избыточность данных.
resp = client.indices.put_settings( index="my_index,my_other_index", settings={ "index.number_of_replicas": 1 }, ) print(resp)response = client.indices.put_settings( index: 'my_index,my_other_index', body: { 'index.number_of_replicas' => 1 } ) puts responseconst response = await client.indices.putSettings({ index: "my_index,my_other_index", settings: { "index.number_of_replicas": 1, }, }); console.log(response);PUT my_index,my_other_index/_settings { "index.number_of_replicas": 1 }
resp = client.cat.allocation(
v=True,
s="disk.avail",
h="node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards",
)
print(resp) response = client.cat.allocation( v: true, s: 'disk.avail', h: 'node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards' ) puts response
const response = await client.cat.allocation({
v: "true",
s: "disk.avail",
h: "node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards",
});
console.log(response); GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards
Ответ будет выглядеть так:
node disk.percent disk.avail disk.total disk.used disk.indices shards instance-0000000000 91 4.6gb 35gb 31.1gb 29.9gb 111
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/decrease-disk-usage-data-node.html
|
|