ロールオーバー
許可されるフェーズ: ホット。
指定されたロールオーバー条件を満たすと、既存のインデックスが新しいインデックスにロールオーバーされます。
インデックスがロールオーバーされると、前のインデックスの年齢がロールオーバー時間を反映するように更新されます。この日付は、インデックスの creation_date
ではなく、インデックスライフサイクル管理 min_age
フェーズの計算に使用されます。詳細はこちら。
ロールオーバーアクションが フォロワーインデックス に使用される場合、ポリシーの実行はリーダーインデックスがロールオーバーされるまで待機します(または 他の方法で完了としてマークされる)、その後、フォロワーインデックスを フォロー解除アクション で通常のインデックスに変換します。
ロールオーバーのターゲットは データストリーム または インデックスエイリアス である可能性があります。データストリームをターゲットにする場合、新しいインデックスはデータストリームの書き込みインデックスとなり、その世代が増加します。
インデックスエイリアスをロールオーバーするには、エイリアスとその書き込みインデックスが以下の条件を満たす必要があります:
- インデックス名はパターン ^.*-\d+$ に一致する必要があります。例えば、(
my-index-000001
)。 index.lifecycle.rollover_alias
はロールオーバーするエイリアスとして構成されている必要があります。- インデックスはエイリアスの 書き込みインデックス でなければなりません。
例えば、my-index-000001
がエイリアス my_data
を持っている場合、次の設定が構成されている必要があります。
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "my_data"
},
aliases={
"my_data": {
"is_write_index": True
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
'index.lifecycle.name' => 'my_policy',
'index.lifecycle.rollover_alias' => 'my_data'
},
aliases: {
my_data: {
is_write_index: true
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "my_data",
},
aliases: {
my_data: {
is_write_index: true,
},
},
});
console.log(response);
コンソール
PUT my-index-000001
{
"settings": {
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "my_data"
},
"aliases": {
"my_data": {
"is_write_index": true
}
}
}
オプション
ロールオーバーアクションは少なくとも1つの max_*
条件を指定する必要があり、0個以上の min_*
条件を含むことができます。空のロールオーバーアクションは無効です。
インデックスは、任意の max_*
条件が満たされ、すべての min_*
条件が満たされるとロールオーバーされます。ただし、空のインデックスはデフォルトではロールオーバーされません。
max_age
- (オプション、時間単位)インデックス作成からの最大経過時間に達した後にロールオーバーをトリガーします。経過時間は常にインデックス作成時間から計算され、インデックスの発生日がカスタム日付に設定されている場合でも、例えば index.lifecycle.parse_origination_date や index.lifecycle.origination_date 設定を使用する場合などです。
max_docs
- (オプション、整数)指定された最大ドキュメント数に達した後にロールオーバーをトリガーします。最後のリフレッシュ以降に追加されたドキュメントはドキュメント数に含まれません。ドキュメント数にはレプリカシャードのドキュメントは含まれません。
max_size
- (オプション、バイト単位)インデックスが特定のサイズに達したときにロールオーバーをトリガーします。これはインデックス内のすべてのプライマリシャードの合計サイズです。レプリカは最大インデックスサイズにカウントされません。
現在のインデックスサイズを確認するには、_cat indices APIを使用します。pri.store.size
値はすべてのプライマリシャードの合計サイズを示します。 max_primary_shard_size
- (オプション、バイト単位)インデックス内の最大プライマリシャードが特定のサイズに達したときにロールオーバーをトリガーします。これはインデックス内のプライマリシャードの最大サイズです。
max_size
と同様に、レプリカは無視されます。
現在のシャードサイズを確認するには、_cat shards APIを使用します。store
値は各シャードのサイズを示し、prirep
はシャードがプライマリ(p
)かレプリカ(r
)かを示します。 max_primary_shard_docs
- (オプション、整数)インデックス内の最大プライマリシャードが特定のドキュメント数に達したときにロールオーバーをトリガーします。これはインデックス内のプライマリシャードの最大ドキュメント数です。
max_docs
と同様に、レプリカは無視されます。
現在のシャードドキュメントを確認するには、_cat shards APIを使用します。docs
値は各シャードのドキュメント数を示します。 min_age
- (オプション、時間単位)インデックス作成からの最小経過時間に達するまでロールオーバーを防ぎます。
max_age
に関する注意を参照してください。 min_docs
- (オプション、整数)指定された最小ドキュメント数に達するまでロールオーバーを防ぎます。
max_docs
に関する注意を参照してください。 min_size
- (オプション、バイト単位)インデックスが特定のサイズに達するまでロールオーバーを防ぎます。
max_size
に関する注意を参照してください。 min_primary_shard_size
- (オプション、バイト単位)インデックス内の最大プライマリシャードが特定のサイズに達するまでロールオーバーを防ぎます。
max_primary_shard_size
に関する注意を参照してください。 min_primary_shard_docs
- (オプション、整数)インデックス内の最大プライマリシャードが特定のドキュメント数に達するまでロールオーバーを防ぎます。
max_primary_shard_docs
に関する注意を参照してください。
空のインデックスは、関連する max_age
があってもロールオーバーされません。ポリシーはこの動作をオーバーライドし、空のインデックスのロールオーバーを明示的に選択することができます。"min_docs": 0
条件を追加することで、これをクラスター全体で無効にすることもできます。indices.lifecycle.rollover.only_if_has_documents
を false
に設定します。
ロールオーバーアクションは、1つ以上のシャードが200000000以上のドキュメントを含む場合、データストリームまたはエイリアスを常にロールオーバーします。通常、シャードは200Mドキュメントに達する前に50GBに達しますが、これはスペース効率の良いデータセットには当てはまりません。シャードが200Mドキュメントを超えると、検索パフォーマンスが著しく低下する可能性があります。これが組み込み制限の理由です。
例
最大プライマリシャードサイズに基づくロールオーバー
この例では、最大プライマリシャードが少なくとも50ギガバイトのときにインデックスがロールオーバーされます。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "50gb"
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_size: '50gb'
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_size: "50gb",
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover" : {
"max_primary_shard_size": "50gb"
}
}
}
}
}
}
インデックスサイズに基づくロールオーバー
この例では、インデックスが少なくとも100ギガバイトのときにロールオーバーされます。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "100gb"
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_size: '100gb'
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_size: "100gb",
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover" : {
"max_size": "100gb"
}
}
}
}
}
}
ドキュメント数に基づくロールオーバー
この例では、インデックスが少なくとも1億ドキュメントを含むときにロールオーバーされます。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_docs": 100000000
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_docs: 100_000_000
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_docs: 100000000,
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover" : {
"max_docs": 100000000
}
}
}
}
}
}
最大プライマリシャードのドキュメント数に基づくロールオーバー
この例では、最大プライマリシャードが少なくとも1000万ドキュメントを含むときにインデックスがロールオーバーされます。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_docs": 10000000
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_docs: 10_000_000
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_docs: 10000000,
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover" : {
"max_primary_shard_docs": 10000000
}
}
}
}
}
}
インデックス年齢に基づくロールオーバー
この例では、インデックスが少なくとも7日前に作成された場合にロールオーバーされます。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "7d"
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_age: '7d'
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_age: "7d",
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover" : {
"max_age": "7d"
}
}
}
}
}
}
複数条件を使用したロールオーバー
複数のロールオーバー条件を指定すると、インデックスは いずれか の max_*
および すべて の min_*
条件が満たされたときにロールオーバーされます。この例では、インデックスが少なくとも7日以上古いか、少なくとも100ギガバイトである場合にロールオーバーされますが、インデックスが少なくとも1000ドキュメントを含む限りです。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "7d",
"max_size": "100gb",
"min_docs": 1000
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_age: '7d',
max_size: '100gb',
min_docs: 1000
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_age: "7d",
max_size: "100gb",
min_docs: 1000,
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover" : {
"max_age": "7d",
"max_size": "100gb",
"min_docs": 1000
}
}
}
}
}
}
シャードサイズを維持しながらロールオーバー
この例では、プライマリシャードサイズが少なくとも50GBのとき、またはインデックスが少なくとも30日以上古いときにロールオーバーされますが、プライマリシャードが少なくとも1GBである限りです。低ボリュームのインデックスの場合、これにより多くの小さなシャードの作成が防止されます。
Python
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "50gb",
"max_age": "30d",
"min_primary_shard_size": "1gb"
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_size: '50gb',
max_age: '30d',
min_primary_shard_size: '1gb'
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_size: "50gb",
max_age: "30d",
min_primary_shard_size: "1gb",
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover" : {
"max_primary_shard_size": "50gb",
"max_age": "30d",
"min_primary_shard_size": "1gb"
}
}
}
}
}
}
ロールオーバー条件がフェーズ遷移をブロック
ロールオーバーアクションは、その条件の1つが満たされた場合にのみ完了します。これは、ロールオーバーが成功するまで、以降のフェーズがブロックされることを意味します。
例えば、次のポリシーは、ロールオーバーの1日後にインデックスを削除します。インデックスが作成されてから1日後には削除しません。
Python
resp = client.ilm.put_lifecycle(
name="rollover_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "50gb"
}
}
},
"delete": {
"min_age": "1d",
"actions": {
"delete": {}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'rollover_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_size: '50gb'
}
}
},
delete: {
min_age: '1d',
actions: {
delete: {}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "rollover_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_size: "50gb",
},
},
},
delete: {
min_age: "1d",
actions: {
delete: {},
},
},
},
},
});
console.log(response);
コンソール
PUT /_ilm/policy/rollover_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "50gb"
}
}
},
"delete": {
"min_age": "1d",
"actions": {
"delete": {}
}
}
}
}
}