Распределение
Разрешенные фазы: warm, cold.
Обновляет настройки индекса, чтобы изменить узлы, на которых разрешено размещать фрагменты индекса, и изменить количество реплик.
Действие распределения недоступно в фазе hot. Первоначальное распределение для индекса должно быть выполнено вручную или через шаблоны индексов.
Вы можете настроить это действие для изменения как правил распределения, так и количества реплик, только правил распределения или только количества реплик. Дополнительную информацию о том, как Elasticsearch использует реплики для масштабирования, см. в Подготовьтесь к работе в режиме производства. См. Фильтрация распределения фрагментов на уровне индекса для получения дополнительной информации о контроле места распределения Elasticsearch фрагментов конкретного индекса.
Параметры
Вы должны указать количество реплик или хотя бы один параметр include, exclude или require. Пустое действие распределения недействительно.
Дополнительную информацию об использовании пользовательских атрибутов для распределения фрагментов см. в Фильтрация распределения фрагментов на уровне индекса.
-
number_of_replicas - (Необязательно, целое число) Количество реплик, которые нужно назначить индексу.
-
total_shards_per_node - (Необязательно, целое число) Максимальное количество фрагментов для индекса на одном узле Elasticsearch. Значение
-1интерпретируется как неограниченное. См. общее количество фрагментов. -
include - (Необязательно, объект) Назначает индекс узлам, которые имеют как минимум один из указанных пользовательских атрибутов.
-
exclude - (Необязательно, объект) Назначает индекс узлам, которые не имеют ни одного из указанных пользовательских атрибутов.
-
require - (Необязательно, объект) Назначает индекс узлам, которые имеют все указанные пользовательские атрибуты.
Пример
Действие распределения в следующей политике изменяет количество реплик индекса на 2. Не более 200 фрагментов индекса будут размещены на любом одном узле. В противном случае правила распределения индекса не изменятся.
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"warm": {
"actions": {
"allocate": {
"number_of_replicas": 2,
"total_shards_per_node": 200
}
}
}
}
},
)
print(resp) response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
warm: {
actions: {
allocate: {
number_of_replicas: 2,
total_shards_per_node: 200
}
}
}
}
}
}
)
puts response const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
warm: {
actions: {
allocate: {
number_of_replicas: 2,
total_shards_per_node: 200,
},
},
},
},
},
});
console.log(response); PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"allocate" : {
"number_of_replicas" : 2,
"total_shards_per_node" : 200
}
}
}
}
}
} Назначение индекса узлам с использованием пользовательского атрибута
Действие распределения в следующей политике назначает индекс узлам, у которых есть box_type hot или warm.
Чтобы назначить box_type узла, установите пользовательский атрибут в конфигурации узла. Например, установите node.attr.box_type: hot в elasticsearch.yml. Дополнительную информацию см. в Включение фильтрации распределения фрагментов на уровне индекса.
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"warm": {
"actions": {
"allocate": {
"include": {
"box_type": "hot,warm"
}
}
}
}
}
},
)
print(resp) response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
warm: {
actions: {
allocate: {
include: {
box_type: 'hot,warm'
}
}
}
}
}
}
}
)
puts response const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
warm: {
actions: {
allocate: {
include: {
box_type: "hot,warm",
},
},
},
},
},
},
});
console.log(response); PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"allocate" : {
"include" : {
"box_type": "hot,warm"
}
}
}
}
}
}
} Назначение индекса узлам на основе нескольких атрибутов
Действие распределения также может назначать индексы узлам на основе нескольких атрибутов узла. Следующее действие назначает индексы на основе атрибутов узла box_type и storage.
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"cold": {
"actions": {
"allocate": {
"require": {
"box_type": "cold",
"storage": "high"
}
}
}
}
}
},
)
print(resp) response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
cold: {
actions: {
allocate: {
require: {
box_type: 'cold',
storage: 'high'
}
}
}
}
}
}
}
)
puts response const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
cold: {
actions: {
allocate: {
require: {
box_type: "cold",
storage: "high",
},
},
},
},
},
},
});
console.log(response); PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"cold": {
"actions": {
"allocate" : {
"require" : {
"box_type": "cold",
"storage": "high"
}
}
}
}
}
}
} Назначение индекса конкретному узлу и обновление настроек реплик
Действие распределения в следующей политике обновляет индекс, чтобы он имел одну реплику на фрагмент и был распределен по узлам, у которых есть box_type cold.
Чтобы назначить box_type узла, установите пользовательский атрибут в конфигурации узла. Например, установите node.attr.box_type: cold в elasticsearch.yml. Дополнительную информацию см. в Включение фильтрации распределения фрагментов на уровне индекса.
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"warm": {
"actions": {
"allocate": {
"number_of_replicas": 1,
"require": {
"box_type": "cold"
}
}
}
}
}
},
)
print(resp) response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
warm: {
actions: {
allocate: {
number_of_replicas: 1,
require: {
box_type: 'cold'
}
}
}
}
}
}
}
)
puts response const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
warm: {
actions: {
allocate: {
number_of_replicas: 1,
require: {
box_type: "cold",
},
},
},
},
},
},
});
console.log(response); PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"allocate" : {
"number_of_replicas": 1,
"require" : {
"box_type": "cold"
}
}
}
}
}
}
}
© 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/ilm-allocate.html