はじめに
とりとめなく書いてる、Elasticsearchネタです。
## 概要
6.6からIndex Lifecycle Management(ILM)という機能が追加されます。これまで、Curator等、外部からの実行に頼っていたIndexの管理をこの機能で行うことができるようになります(BASICライセンスで使える!)。
ILMでは、ライフサイクルのフェーズごとに何をするかを定義するポリシーを作成して、それをIndex、もしくは、Index Templateに指定します。
7.0.0-SNAPSHOTでは、watch_history-ilm-policy
という、.watch_historyを管理するポリシーがデフォルトで組み込まれるなど、システムでも活用されています。
また、KibanaにはUIが実装され、ポリシーの作成・適用、Index ManagementのUIから各Indexがどのフェーズにいるのかを見ることもできます。
スナップショット作成はできないので、Curatorにやってもらいましょう。
でも、スナップショットもとれるようにしよう!とかいうIssueもでてきました。どうするCurator!
IndexのLifecycleにフェーズがあって、そのフェーズごとにやれること(アクション)が決まっています。
## 使い方
- まずフェーズごとに何をするのかを決めたポリシーを作成
- そのポリシーをインデックステンプレートに適用(もしくは、インデックス作成時にポリシーを指定)
- ILMを起動
作成済みのIndexに対して、ポリシーを適用することも出来ます。
## ライフサイクルのフェーズ
フェーズには、以下の4つがあります。
- hot: このフェーズのインデックスには、ガンガン書き込まれています
- warm: このフェーズのインデックスには(ほとんど)書き込みはありませんが、ガンガン検索されます
- cold: このフェーズのインデックスは更新されず、めったに検索されません。でも、まだ(遅くてもいいので)検索可能である必要はあります
- delete: このフェーズのインデックスは必要ないので消しても大丈夫です
アクション
で、各フェーズでは、以下のアクションを実行することができます。
- hot: Rollover, Set Priority(6.7~), Unfollow(6.7~)
- warm: Allocate, Read-Only, Force Merge, Shrink, Set Priority(6.7~), Unfollow(6.7~)
- cold: Allocate, Set Priority(6.7~), Freeze(6.7~), Unfollow(6.7~)
- delete: Delete
- Rollover: Rolloverするタイミングを設定する
- Set Priority: Index回復の優先順位を設定する(値は0以上)。hot > warm > cold の順に値を指定しておくと良さそう
- Unfollow: CCRのFollower Indexとなっている場合に、通常のIndexに戻す。Unfollowは明示的に実行も出来るけど、Rollover ActionとShrink Actionの前に自動的に実行される。
ので、通常は指定する必要は無さそう。
と7.0では書いてある。6.xでは書いてない。 - Allocate: Indexを移動したり、レプリカ数を変えたりする
- Force Merge: SegmentをForce mergeする
- Read-Only: IndexをRead-Onlyにする
- Shrink: IndexをShrinkする
- Freeze: IndexをFreezeする
- Delete: Indexを削除する
一部は、まだKibana上から指定できません(今のところ、6.7ではSet PriorityとUnfollowが、7.0ではUnfollowが使えない)。
使用例
前提
- 前提として、
node.attr.XXX
(XXX
は任意)に有意な値を設定しておく- 例えば、
node.attr.box_type
にhot
/warm
/cold
などを設定 - Indexテンプレートでは、hot,warmのノードにIndexを作成するように指定
- policyには、warm phaseでは
require.box_type=hot, warm
を、cold phaseではrequire.box_type=cold
を指定して、フェーズごとにシャードの移動を行う
- 例えば、
ILM Policy設定の作成
Kibana上のUIから作ります。
hotからwarm、cold、deleteへの移行については、hotでRolloverをやる・やらないで、UI上での設定項目が変わります。
RolloverをUIで設定する場合は、必ずmax_ageを指定する必要があります(mac_docs, max_sizeはどちらか一方を指定)。
Rolloverする場合
Rollover後すぐにwarmに移行するか、もしくは、Rolloverしてから一定時間後に移行するかを選ぶことができます。
Rolloverしない場合
Indexが作成されてからの経過時間を設定します。
Indexテンプレートの作成
下記のように、最初にIndexが作成されるノードをhot
属性のついたノードに固定しておきます。
PUT _template/test_template
{
"index_patterns": ["test-*"],
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"lifecycle.name": "<ポリシー名>",
"lifecycle.rollover_alias": "test",
"routing.allocation.require.box_type": "hot"
}
}
以降、Phaseが移行する都度index.routing.allocation.require.box_type
の値が変わっていきます(通常は手動でやるところを、ILMが自動的に変えてくれる)。
Rollover設定
続いて、Rollover設定を行います。
PUT test-000001
{
"aliases": {
"test": {
"is_write_index": true
}
}
}
あとは、Aliasに対してデータを投入します。
各プロダクトでのILM対応
Beats
Kibana
Logstash
Curator
競合?
少なくともスナップショットはCuratorで。
おわりに
6.6では、スナップショットの作成とILMの実行がかぶるとおかしなことになるらしいですが、6.6では対処されず、6.7以降で解決します。
てな感じで、6.6で入るけどまだまだかなー。でも早く使いたい!