割り当て
許可されるフェーズ: ウォーム、コールド。
インデックス設定を更新して、インデックスシャードをホストできるノードを変更し、レプリカの数を変更します。
割り当てアクションはホットフェーズでは許可されていません。インデックスの初期割り当ては手動またはindex templatesを介して行う必要があります。
このアクションを構成して、割り当てルールとレプリカの数の両方、または割り当てルールのみ、またはレプリカの数のみを変更できます。Elasticsearchがスケーリングのためにレプリカをどのように使用するかについての詳細は、Plan for productionを参照してください。特定のインデックスのシャードをElasticsearchがどこに割り当てるかを制御する方法については、Index-level shard allocation filteringを参照してください。
オプション
レプリカの数を指定するか、少なくとも1つのinclude
、exclude
、またはrequire
オプションを指定する必要があります。空の割り当てアクションは無効です。
シャード割り当てにカスタム属性を使用する方法についての詳細は、Index-level shard allocation filteringを参照してください。
number_of_replicas
- (オプション、整数) インデックスに割り当てるレプリカの数。
total_shards_per_node
- (オプション、整数) 単一のElasticsearchノード上のインデックスの最大シャード数。
-1
の値は無制限と解釈されます。total shardsを参照してください。 include
- (オプション、オブジェクト) 指定されたカスタム属性のいずれかを持つノードにインデックスを割り当てます。
exclude
- (オプション、オブジェクト) 指定されたカスタム属性を持たないノードにインデックスを割り当てます。
require
- (オプション、オブジェクト) 指定されたカスタム属性のすべてを持つノードにインデックスを割り当てます。
例
以下のポリシーの割り当てアクションは、インデックスのレプリカ数を2
に変更します。インデックスの200シャードを単一のノードに配置することはできません。それ以外の場合、インデックスの割り当てルールは変更されません。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"warm": {
"actions": {
"allocate": {
"number_of_replicas": 2,
"total_shards_per_node": 200
}
}
}
}
},
)
print(resp)
Ruby
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
Js
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
}
}
}
}
}
}
カスタム属性を使用してノードにインデックスを割り当てる
以下のポリシーの割り当てアクションは、インデックスをhotまたはwarmのbox_type
を持つノードに割り当てます。
ノードのbox_type
を指定するには、ノード設定にカスタム属性を設定します。たとえば、elasticsearch.yml
でnode.attr.box_type: hot
を設定します。詳細については、Enabling index-level shard allocation filteringを参照してください。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"warm": {
"actions": {
"allocate": {
"include": {
"box_type": "hot,warm"
}
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
warm: {
actions: {
allocate: {
include: {
box_type: 'hot,warm'
}
}
}
}
}
}
}
)
puts response
Js
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
ノード属性に基づいてインデックスを割り当てます。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"cold": {
"actions": {
"allocate": {
"require": {
"box_type": "cold",
"storage": "high"
}
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
cold: {
actions: {
allocate: {
require: {
box_type: 'cold',
storage: 'high'
}
}
}
}
}
}
}
)
puts response
Js
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"
}
}
}
}
}
}
}
特定のノードにインデックスを割り当て、レプリカ設定を更新する
以下のポリシーの割り当てアクションは、インデックスをシャードごとに1つのレプリカを持つように更新し、coldのbox_type
を持つノードに割り当てます。
ノードのbox_type
を指定するには、ノード設定にカスタム属性を設定します。たとえば、elasticsearch.yml
でnode.attr.box_type: cold
を設定します。詳細については、Enabling index-level shard allocation filteringを参照してください。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"warm": {
"actions": {
"allocate": {
"number_of_replicas": 1,
"require": {
"box_type": "cold"
}
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
warm: {
actions: {
allocate: {
number_of_replicas: 1,
require: {
box_type: 'cold'
}
}
}
}
}
}
}
)
puts response
Js
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"
}
}
}
}
}
}
}