索引生命周期管理
操作场景
用户基于时间管理索引,可以定期对旧索引执行某些操作(例如减少副本或者删除索引),来保持集群中有充足的资源。索引生命周期管理插件允许用户根据索引的存在时间、大小、文档量来定期触发管理操作,从而实现自动化管理。
基本概念 |
描述 |
---|---|
policy |
索引生命周期中定义的策略 |
states |
描述索引当前所处的状态,例如热状态、冷状态 |
actions |
指策略进入某个状态时依次执行的动作 |
conditions |
指状态之间转移需要满足的条件 |
策略常用命令
常用操作 |
命令 |
---|---|
查看policy_1策略的内容 |
GET _opendistro/_ism/policies/policy_1 |
删除index_1索引的策略 |
POST _opendistro/_ism/remove/index_1 |
修改index_1索引的策略 |
POST _opendistro/_ism/change_policy/index_1 |
重试index_1中的close状态 |
POST _opendistro/_ism/retry/index_1 { "state": "close" } |
查看index_1索引中的策略的执行情况 |
GET _opendistro/_ism/explain/index_1 |
删除policy_1策略 |
DELETE _opendistro/_ism/policies/policy_1 |
支持的Action列表
action |
作用 |
注意 |
---|---|---|
rollover |
索引按照预设的文档条数、索引年龄、索引大小来滚动生成新的索引 |
设置rollover的索引的名字需要满足^.*-\d+$的正则,例如logs-000001,需要为该索引设置别名,将别名的is_write_index属性设置为true,并且需要将opendistro.index_state_management.rollover_alias参数的值设置为该别名 |
open |
打开索引 |
- |
close |
关闭索引 |
- |
read_only |
将索引设置为只读状态 |
- |
read_write |
将索引恢复为可写状态 |
- |
replica_count |
缩减副本的数量 |
- |
index_priority |
设置索引的恢复优先级,数值越高,优先级越高 |
- |
freeze_index |
将索引设置为冻结状态 |
- |
unfreeze_index |
去掉索引的冻结状态 |
- |
allocation |
将冷索引迁至冷实例,实现冷热分离 |
|
shrink |
减少索引的主分片个数 |
shrink操作会将所有的主分片迁移至同一实例,请确保该索引的分片所在的实例磁盘上有充足的空间 主分片缩减的个数必须是源索引分片总数的一个因数,例如一个8个主分片的索引可以缩减至4个或者2个或者1个主分片,如果是主分片数为质数,则只能shrink至1个主分片 在shrink操作执行成功后,索引名字将会变更为shrink-原索引名的形式,原索引的名字作为shrink后索引的别名 不推荐使用 |
snapshot |
给索引创建快照 |
快照操作需要预先创建好仓库,不推荐使用 |
force_merge |
对索引执行段合并 |
在较大数据量下段合并耗时较长,不推荐使用 |
delete |
删除索引 |
删除操作,若配置不当,可能会导致数据误删,请谨慎配置 |
开源open distro插件的ISM功能介绍,请参考https://opendistro.github.io/for-elasticsearch-docs/docs/ism/。
conditions常用参数介绍
参数 |
描述 |
类型 |
---|---|---|
min_index_age |
索引至少创建多长时间后,可以触发转换。可选参数。 |
string |
min_doc_count |
索引中至少包含多少文档数,可以触发转换。可选参数。 |
number |
min_size |
索引中主分片存储总量(不包括副本)至少为多少,可以触发转换。可选参数。 例如,如果将“min_size”参数设置为100GB,并且索引有5个主分片和5个副本分片,每个分片20GB,则所有主分片的总大小为100GB,因此索引将转换到下一个state。 |
string |
min_step_age |
上个state结束后等待多长时间转换进入下一个state。可选参数。 |
string |
使用样例
- 创建策略。
PUT _opendistro/_ism/policies/default_policy { "policy":{ "description":"this policy is for all action.", "default_state":"hot", "states":[ { "name":"hot", "actions":[ { "index_priority":{ "priority":10 } }, { "rollover":{ "min_size":"1tb", "min_doc_count":"1000000000", "min_index_age":"1d" } } ], "transitions":[ { "state_name":"warm", "conditions":{ "min_index_age":"15d" } } ] }, { "name":"warm", "actions":[ { "index_priority":{ "priority":5 } }, { "read_only":{ } }, { "allocation":{ "require":{ "temperature":"warm" } } }, { "force_merge":{ "max_num_segments":1 } } ], "transitions":[ { "state_name":"cold", "conditions":{ "min_index_age":"60d" } } ] }, { "name":"cold", "actions":[ { "index_priority":{ "priority":1 } }, { "freeze_index":{ } }, { "shrink":{ "number_of_shards":10 } } ], "transitions":[ { "state_name":"close", "conditions":{ "min_index_age":"90d" } } ] }, { "name":"close", "actions":[ { "close":{ } } ] } ], "ism_template":{ "index_patterns":[ "indextest*" ], "priority":100 } } }
绑定策略到索引。
在完成策略创建后,需要将策略应用到一个或者一组索引上。也可以将策略设置到索引模板中,来使新建的索引应用该策略。
创建第一个索引时指定策略和别名:
PUT indextest-000001 { "settings": { "opendistro.index_state_management.policy_id": "policy_id", "opendistro.index_state_management.rollover_alias": "indextest" }, "aliases": { "indextest": { "is_write_index": true } } }
- 若policy中配置了shrink,需要提前将“cluster.routing.allocation.same_shard.host”设置为“false”。这是因为shrink操作需要将所有分片迁移到一个实例上,但是“cluster.routing.allocation.same_shard.host”为“true”时,不允许所有实例迁移到统一实例上,使得shrink无法执行。
修改“cluster.routing.allocation.same_shard.host”的命令如下:
PUT _cluster/settings{ "persistent": { "cluster.routing.allocation.same_shard.host":"false" }}
- 如果需要使用滚动索引,索引名必须满足^.*-\d+$的正则。
- 需要自行创建第一个符合命名规范的索引,后续写入、查询时均使用索别名即可。
将策略添加至索引模板:
PUT _template/<template_name> { "index_patterns": ["indextest*"], "settings": { "index.opendistro.index_state_management.policy_id": "policy_id", "index.opendistro.index_state_management.rollover_alias":"indextest" } }
- 请针对不同的业务场景设置合理的index_patterns,请勿将index_patterns配置为*。
- policy_id中不能包含#等特殊字符。
将策略添加至集群中已存在的索引:
PUT /indextest-000001/_settings?pretty { "opendistro.index_state_management.policy_id": "policy_id", "opendistro.index_state_management.rollover_alias": "indextest" } POST /_aliases { "actions": [ { "add": { "index": "indextest-000001", "alias": "indextest", "is_write_index": true } } ] }
- 新增的策略只有在集群yellow或者green的状态下才会调度,若集群处于red状态,请先修复状态为red的索引。
- 如果需要使用滚动索引,索引名必须满足^.*-\d+$的正则。
- 若policy中配置了shrink,需要提前将“cluster.routing.allocation.same_shard.host”设置为“false”。这是因为shrink操作需要将所有分片迁移到一个实例上,但是“cluster.routing.allocation.same_shard.host”为“true”时,不允许所有实例迁移到统一实例上,使得shrink无法执行。
冷热分离配置样例
- 新建warm实例组。
登录“Manager”页面,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 实例组”,分别在EsNodeX下面单击,“组名称”为warm,单击“确定”,创建一个warm实例组。
- 为实例组添加实例。
在EsNodeX“基本”页面选择要设置为warm的实例,单击“移动”,“目标实例组”选择“warm”,单击“确定”,将实例移动至新建的warm实例组中。
- 为warm实例打上warm标签。
在新建的warm实例组中选择“配置 > 全部配置 > 冷热模式”,将“node.attr.temperature”参数的值设置为“warm”。
- 重启warm实例
重启warm组的实例后,warm配置生效。