如果你的使用場景是對時序型數據進行分析,可能你會更重視最新的數據,并且可能會定期對老舊的數據進行一些處理,比如減少副本數、forcemerge、 刪除等。Easysearch 的索引生命周期管理功能,可以自動完成此類索引的管理任務。
創建策略
為了演示,我們定義一個簡單的索引策略:
- 索引創建后進入 hot 階段,此階段的索引有 2 個副本(在索引模板中定義)
- 創建索引 3 分鐘后,進入 warm 階段,此階段的索引有 1 個副本
- 創建索引 10 分鐘后,進入 cold 階段,此階段的索引沒有副本
PUT _ilm/policy/ilm_test
{"policy": {"phases": {"hot": {"min_age": "0m"},"warm": {"min_age": "3m","actions": {"replica_count":{"number_of_replicas": 1}}},"cold": {"min_age": "10m","actions": {"replica_count":{"number_of_replicas": 0 }}}}
}
}
當然每個階段還支持更多的操作,比如 rollover、forcemerge、readonly、snapshot 等。更多的信息請查看官方文檔。
生命周期策略后臺是定期觸發的任務,為了更快的觀測到效果,可以修改任務觸發周期為每分鐘 1 次。
PUT _cluster/settings
{"transient": {"index_lifecycle_management.job_interval":"1"}
}
創建索引模板
創建完索引生命周期策略,還需要索引模板把索引和生命周期策略關聯起來,這樣只要創建相關索引就自動會被生命周期策略管理。我們創建一個模板把所有 ilm_test 開頭的索引與 ilm_test 生命周期策略關聯,并指定索引創建時就有 2 個副本。
PUT _template/ilm_test
{"order" : 100000,"index_patterns" : ["ilm_test*"],"settings" : {"index" : {"lifecycle" : {"name" : "ilm_test","rollover_alias" : "ilm_test"},"number_of_replicas" : "2"}}}
創建初始索引
創建一個 ilm_test 開頭的索引,應用上一步創建的索引模板。
PUT ilm_test-00001
{"aliases":{"ilm_test":{"is_write_index":true}}
}
17 點 50 分 44 秒創建初始索引,索引分片情況是 1 個主分片和 2 個副本分片,每個節點一個分片。
3 分鐘后,17 點 53 分 55 秒,索引進入 warm 階段,副本數變成 1,剩下一個 主分片和 1 個副本分片。
又 7 分鐘后(距索引創建 10 分鐘),18 點 00 分 46 秒,索引進入 cold 階段,副本數變成 0,只剩下一個主分片。
至此索引的生命周期完成。
更新策略
更新 ILM 策略需要在請求url里指定 seq_no 和 primary_term 。修改前先查看當前策略的 seq_no 和 primary_term。
修改策略 ilm_test,使 cold 階段保持 2 個副本。
PUT _ilm/policy/ilm_test?if_seq_no=74698&if_primary_term=22
{"policy": {"phases": {"hot": {"min_age": "0m"},"warm": {"min_age": "3m","actions": {"replica_count":{"number_of_replicas": 1}}},"cold": {"min_age": "6m","actions": {"replica_count":{"number_of_replicas": 2 }}}}
}
}
更新成功。
??注意:更新索引生命周期策略不會對當前正在管理的索引造成影響(包括刪除策略重建),只會影響新生成的索引。
刪除策略
通過指定策略命刪除策略
DELETE _ilm/policy/ilm_test