インデックスライフサイクル管理 (ILM) を使用すると、ホットウォームアーキテクチャのクラスター内でインデックスをホット、ウォーム、コールド、削除の各フェーズに自動的に移行させ、ストレージコストを削減できます。Elasticsearch 6.6.0 以降で利用可能です。
|
フェーズ |
説明 |
|
ホット |
時系列データのリアルタイム書き込みを処理します。rollover API は、現在のインデックスが指定されたドキュメント数、サイズ、または期間に達したときに新しいインデックスを作成します。 |
|
ウォーム |
インデックスは読み取り専用になり、クエリのみを処理します。 |
|
コールド |
インデックスは更新されなくなり、クエリの頻度も低くなります。クエリ速度が低下する可能性があります。 |
|
削除 |
インデックスは完全に削除されます。 |
ILM ポリシーをインデックスに適用するには、次の 2 つの方法があります:
-
インデックス テンプレートにポリシーを定義します。このポリシーは、テンプレートのパターンに一致する新しいインデックスに適用されます。このトピックでは、この方法を使用します。
-
単一のインデックスにポリシーを適用します。このポリシーは、現在のインデックスにのみ影響します。rollover によって作成された新しいインデックスは影響を受けません。
このトピックでは、以下のライフサイクルを持つホットウォームシナリオについて説明します:
-
データをリアルタイムで書き込みます。インデックスがしきい値に達すると、rollover によって新しいインデックスが作成されます。
-
rollover 後、古いインデックスはホットフェーズに 30 分間留まり、その後ウォームフェーズに入ります。
-
マージと shrink が完了した後、インデックスは rollover から 1 時間後にコールドフェーズに入ります。
-
データはウォームノードに移動します。インデックスは rollover から 2 時間後に削除されます。
操作手順
-
クラスター作成時にホットノードとウォームノードの属性を設定します。
-
ILM ポリシーを定義し、インデックス テンプレートを介して適用します。
-
コールドフェーズのインデックスシャードがウォームノードにあることを確認します。
-
既存のポリシーを更新します。
-
rollover のために異なるポリシーを切り替えます。
ステップ 1: ホットウォームクラスターの作成と属性の確認
ホットウォームクラスターには、リアルタイム書き込み用のホットノードと履歴データ用のウォームノードが含まれます。
|
ノードタイプ |
データ要件 |
読み書き性能 |
仕様 |
ストレージ要件 |
|
ホットノード (hot) |
直近 2 日間のログなどの最新データ。 |
高 |
高 (例:32 コア、64 GB)。 |
SSD クラウドディスクを推奨します。 |
|
ウォームノード (warm) |
2 日以上前のログなどの履歴データ。 |
低 |
低 (例:8 コア、32 GB)。 |
Ultra ディスクを推奨します。大規模なコールドデータセットのサーバーレスストレージには OpenStore を使用します。 |
Alibaba Cloud Elasticsearch では、ウォームノードのbox_typeの値はwarm(cold ではない) であり、これはネイティブ Elasticsearch のウォーム層に相当します。
-
Alibaba Cloud Elasticsearch クラスターを作成する際に、ウォームノードを有効にしてホットウォームクラスターを作成します。
-
ウォームノードを有効にすると、システムはノードの起動引数に
-Enode.attr.box_typeパラメーターを追加します:-
ホットノード:
-Enode.attr.box_type=hot -
ウォームノード:
-Enode.attr.box_type=warm
データノードは、ウォームノードを有効にした後にのみホットノードとして指定されます。
-
-
クラスターの Kibana コンソールにログインします。詳細については、「Kibana を使用した Elasticsearch クラスターへの接続」をご参照ください。
-
左側のナビゲーションペインで、 [開発ツール] をクリックします。
-
[コンソール] で、次のコマンドを実行してノードの属性を確認します。
GET _cat/nodeattrs?v&h=host,attr,valueレスポンスにホットノードとウォームノードの両方が含まれている場合、クラスターはホットウォームアーキテクチャをサポートしています。
ステップ 2: ILM ポリシーの設定
-
Kibana コンソールで、次のコマンドを実行して ILM ポリシーを定義します。
PUT /_ilm/policy/game-policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "1GB", "max_age": "1d", "max_docs": 1000 } } }, "warm": { "min_age": "30m", "actions": { "forcemerge": { "max_num_segments":1 }, "shrink": { "number_of_shards":1 } } }, "cold": { "min_age": "1h", "actions": { "allocate": { "require": { "box_type": "warm" } } } }, "delete": { "min_age": "2h", "actions": { "delete": {} } } } } }パラメーター
説明
ホット
いずれかの条件が満たされると rollover がトリガーされます:インデックスが 1 GB (
max_size) に達する、1 日を超える (max_age)、または 1,000 ドキュメントを含む (max_docs)。古いインデックスは 30 分間待機した後、ウォームフェーズに入ります。ウォーム
インデックスは 1 つのシャードに shrink され、1 つのセグメントに forcemerge されます。rollover から 1 時間後にコールドフェーズに入ります。
コールド
インデックスはウォームノードに移動します。rollover から 2 時間後に削除フェーズに入ります。
削除
インデックスは削除されます。
ポリシー名は作成後に変更できません。Kibana コンソールでもポリシーを作成できますが、UI では時間単位として「時」しか選択できません。秒などのより細かい単位を使用するには、API を使用する必要があります。
-
新しいインデックスをホットノードにルーティングするインデックス テンプレートを作成します。
PUT _template/gamestabes_template { "index_patterns" : ["gamestabes-*"], "settings": { "index.number_of_shards": 5, "index.number_of_replicas": 1, "index.routing.allocation.require.box_type":"hot", "index.lifecycle.name": "game-policy", "index.lifecycle.rollover_alias": "gamestabes" } }パラメーター
説明
index.routing.allocation.require.box_type
インデックスを割り当てるためのノードタイプ。
index.lifecycle.name
適用する ILM ポリシーの名前。
index.lifecycle.rollover_alias
rollover に使用されるエイリアス。
-
シーケンス番号を付けて最初のインデックスを作成します。
PUT gamestabes-000001 { "aliases": { "gamestabes":{ "is_write_index": true } } }日付計算式を使用して、時間ベースのインデックスを作成することもできます。
-
エイリアス経由でデータを書き込みます。インデックスは、ポリシーの条件を満たし、次の ILM チェックが実行されたときに rollover します。
PUT gamestabes/_doc/1 { "EU_Sales" : 3.58, "Genre" : "Platform", "Global_Sales" : 40.24, "JP_Sales" : 6.81, "Name" : "Super Mario Bros.", "Other_Sales" : 0.77, "Platform" : "NES", "Publisher" : "Nintendo", "Year_of_Release" : "1985", "na_Sales" : 29.08 }デフォルトでは、ILM はポリシー基準に一致するインデックスを 10 分ごとにチェックします。チェック間隔 は、
indices.lifecycle.poll_intervalパラメーターを使用して変更できます。 -
(オプション) Kibana でインデックスのライフサイクルステータスを表示します。
-
左側のナビゲーションペインで、 [管理] をクリックします。
-
Elasticsearch セクションで、 [インデックス管理] をクリックします。
-
[Lifecycle phase] ドロップダウンリストをクリックし、ライフサイクルフェーズを選択してインデックスをフィルターします。
-
フィルターされたインデックスの名前をクリックして、その詳細設定を表示します。
-
ステップ 3: データ分散の確認
インデックスがコールドフェーズに入った後、そのシャードがウォームノードにあることを確認します。
-
Kibana コンソールで、コールドフェーズに入ったインデックスを見つけます。
-
次のコマンドを実行して、シャードの分散状況を確認します。
shrink-gamestabes-000012をお使いのインデックス名に置き換えてください。GET _cat/shards/shrink-gamestabes-000012シャードのノードの
box_typeがwarmに設定されている場合、インデックスはウォームノードにあります。
ステップ 4: ILM ポリシーの更新
-
次のコマンドを実行して、
game-policyを更新します。この例では、削除フェーズの期間を変更します:PUT /_ilm/policy/game-policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "1GB", "max_age": "1d", "max_docs": 1000 } } }, "warm": { "min_age": "30m", "actions": { "forcemerge": { "max_num_segments":1 }, "shrink": { "number_of_shards":1 } } }, "cold": { "min_age": "1h", "actions": { "allocate": { "require": { "box_type": "warm" } } } }, "delete": { "min_age": "3h", "actions": { "delete": {} } } } } } -
更新されたポリシーのバージョンを表示します。
-
左側のナビゲーションペインで、 [管理] をクリックします。
-
Elasticsearch セクションで、 [インデックスライフサイクルポリシー] をクリックします。
-
ポリシーのバージョン番号を確認します。バージョン番号は更新ごとにインクリメントされます。インデックスは、次のフェーズに移行する際に、更新されたポリシーバージョンを適用します。
-
ステップ 5: ILM ポリシーの切り替え
-
新しいポリシーを作成します。
PUT /_ilm/policy/game-new { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "3GB", "max_age": "1d", "max_docs": 1000 } } }, "warm": { "min_age": "30m", "actions": { "forcemerge": { "max_num_segments":1 }, "shrink": { "number_of_shards":1 } } }, "cold": { "min_age": "1h", "actions": { "allocate": { "require": { "box_type": "warm" } } } }, "delete": { "min_age": "2h", "actions": { "delete": {} } } } } } -
新しいポリシーをテンプレートに適用します。
PUT _template/gamestabes_template { "index_patterns" : ["gamestabes-*"], "settings": { "index.number_of_shards": 5, "index.number_of_replicas": 1, "index.routing.allocation.require.box_type":"hot", "index.lifecycle.name": "game-new", "index.lifecycle.rollover_alias": "gamestabes" } }
FAQ
ILM のチェック間隔を調整するにはどうすればよいですか?
デフォルトでは、ILM は 10 分ごとにポリシーに対してインデックスをチェックします。チェックの合間にデータがしきい値を超えることがあります。たとえば、max_docs が 1,000 であっても、rollover がトリガーされる前にインデックスに 1,000 を超えるドキュメントが含まれる場合があります。
チェックの頻度は、indices.lifecycle.poll_interval パラメーターで調整します:
間隔を短くすると、ノードの負荷が増加します。ワークロードに基づいてこの値を設定してください。
PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"1m"
}
}