上次更新时间:2020 年 12 月 23 日
我的 Amazon Elasticsearch Service (Amazon ES) 集群的存储空间不足。如何使用 Index State Management (ISM) 来管理 Amazon ES 存储空间不足问题?
简短描述Index State Management (ISM) 允许您自动执行例行任务,然后将其应用于 Amazon ES 中的索引和索引模式。借助 ISM,您可以定义自定义管理策略,帮助您维护诸如磁盘空间不足等问题。例如,您可以使用 rollover 操作和 ISM 策略根据索引大小等条件自动删除旧索引。当现有索引满足定义的条件时,rollover 操作会将目标滚动更新到新索引。
要使用 rollover 操作为索引模式创建 ISM 策略,请执行以下步骤:
1.设置 rollover 索引。
2.创建 ISM 策略。
3.将策略附加到索引。
4.添加模板。
将策略附加到索引后,索引开始初始化,然后转换为不同的状态,直到 rollover 操作完成。有关 rollover 操作的更多信息,请参阅 OpenDistro to Elasticsearch 网站上的 Rollover。
解决方法 设置 rollover 索引创建索引格式与索引模式匹配的索引和别名:
^.*-\d+$.
重要提示:确保正确配置 rollover 别名。否则,您会收到错误信息。
在以下示例中,创建了“test-index-000001”,并填充了多个文档。因为此示例使用 rollover 索引,因此索引格式必须与模式匹配。
PUT test-index-000001/_doc/1
{
"user" : "testuser",
"post_date" : "2020-05-08T14:12:12",
"message" : "ISM testing"
}
rollover 索引需要一个指向最新索引的别名。这意味着您必须使用以下查询创建别名 ("test-index"):
POST /_aliases
{
"actions" :
}
创建 ISM 策略
在 Kibana 服务的 Index Management(索引管理)选项卡中,为 rollover 操作创建一个 ISM 策略,如下所示:
{
"policy": {
"policy_id": "Roll_over_policy",
"description": "A test policy. DO NOT USE FOR PRODUCTION!",
"schema_version": 1,
"error_notification": null,
"default_state": "hot",
"states": ,
"transitions":
},
{
"name": "warm",
"actions": ,
"transitions": []
}
]
}
}
在此 ISM 策略中,有两种已定义的状态:"hot" 和 "warm"。 默认情况下,您的索引处于 "hot" 状态。索引一旦达到 10MB,就会立即进入 "warm" 状态,并创建一个新的 rollover 索引。在 "warm" 状态下,您可以对索引执行各种操作,例如将副本计数更改为 2 或执行 force_merge 操作。
将策略附加到索引要将 ISM 策略附加到索引,请执行以下步骤:
1.从 Amazon ES 控制台打开 Kibana。
2.选择 Index Management(索引管理)选项卡。
3.选择要将 ISM 策略附加到的索引(例如:"test-index-000001")。
4.选择 Apply policy(应用策略)。
5.(可选)如果您的策略指定了需要别名的任何操作,请提供别名,然后选择 Apply(应用)。您的索引在 Managed Indices(管理索引)列表下显示。
添加模板将策略附加到特定索引(例如 "test-index-000002"),该索引作为 ISM 策略的结果而创建。此附加可确保在满足所需条件(例如索引大小)时,索引也将滚动更新。
您可以按如下方式索引模板:
PUT _template/template_1
{
"index_patterns": ,
"settings": {
"index": {
"opendistro": {
"index_state_management": {
"policy_id": "Roll_over_policy",
"rollover_alias": "test-index"
}
}
}
}
}
在此示例中,JSON 策略 ID 是 "Roll_over_policy"。此 JSON 模板可确保在创建 "test-index-000002" 索引时,附加了 rollover 策略:
GET test-index-000002/_settings
{
"test-index-000002" : {
"settings" : {
"index" : {
"opendistro" : {
"index_state_management" : {
"policy_id" : "Roll_over_policy",
"rollover_alias" : "test-index"
}
},
"number_of_shards" : "1",
"provided_name" : "test-index-000002",
"creation_date" : "1589031424388",
"number_of_replicas" : "2",
"uuid" : "DUHeUdTnSveeYsH9aIkt-Q",
"version" : {
"created" : "7010199"
}
}
}
}
}
注意:此索引也可以通过 Kibana 的 Index Management(索引管理)选项卡中的 Managed Indices(管理索引)进行填充。
ISM 策略规定当将 ISM 策略附加到索引时,索引进入“Initializing”(初始化)状态。在“Initializing”(初始化)状态下,索引会进入策略中定义的“Default”(默认)状态。此“Initializing”(初始化)操作以及每个后续操作可能需要 30 到 48 分钟。ISM 利用这段时间执行策略操作,然后检查所有条件并将索引转换为不同的状态。此外,还添加了 0-60% 的随机抖动,以确保所有索引不会同时出现大量活动。
注意:对于 rollover 操作,索引滚动更新后,索引变为 "complete",转换为“warm”状态,并且更新副本数量。