索引生命周期管理错误故障排除
编辑索引生命周期管理错误故障排除编辑
当 ILM 执行生命周期策略时,在为某个步骤执行必要的索引操作时可能会发生错误。发生这种情况时,ILM 会将索引移至 ERROR
步骤。如果 ILM 无法自动解决错误,则执行将暂停,直到您解决策略、索引或集群的根本问题。
例如,您可能有一个 shrink-index
策略,该策略在索引至少有五天历史记录时将其缩减为四个分片
response = client.ilm.put_lifecycle( policy: 'shrink-index', body: { policy: { phases: { warm: { min_age: '5d', actions: { shrink: { number_of_shards: 4 } } } } } } ) puts response
PUT _ilm/policy/shrink-index { "policy": { "phases": { "warm": { "min_age": "5d", "actions": { "shrink": { "number_of_shards": 4 } } } } } }
没有任何东西可以阻止您将 shrink-index
策略应用于只有两个分片的新索引
response = client.indices.create( index: 'my-index-000001', body: { settings: { 'index.number_of_shards' => 2, 'index.lifecycle.name' => 'shrink-index' } } ) puts response
PUT /my-index-000001 { "settings": { "index.number_of_shards": 2, "index.lifecycle.name": "shrink-index" } }
五天后,ILM 尝试将 my-index-000001
从两个分片缩减为四个分片。由于缩减操作不能_增加_分片数量,因此此操作失败,ILM 会将 my-index-000001
移至 ERROR
步骤。
您可以使用 ILM 解释 API 来获取有关出错原因的信息
response = client.ilm.explain_lifecycle( index: 'my-index-000001' ) puts response
GET /my-index-000001/_ilm/explain
这将返回以下信息
{ "indices" : { "my-index-000001" : { "index" : "my-index-000001", "managed" : true, "index_creation_date_millis" : 1541717265865, "time_since_index_creation": "5.1d", "policy" : "shrink-index", "lifecycle_date_millis" : 1541717265865, "age": "5.1d", "phase" : "warm", "phase_time_millis" : 1541717272601, "action" : "shrink", "action_time_millis" : 1541717272601, "step" : "ERROR", "step_time_millis" : 1541717272688, "failed_step" : "shrink", "step_info" : { "type" : "illegal_argument_exception", "reason" : "the number of target shards [4] must be less that the number of source shards [2]" }, "phase_execution" : { "policy" : "shrink-index", "phase_definition" : { "min_age" : "5d", "actions" : { "shrink" : { "number_of_shards" : 4 } } }, "version" : 1, "modified_date_in_millis" : 1541717264230 } } } }
用于管理索引的策略: |
|
索引年龄:5.1 天 |
|
索引当前所处的阶段: |
|
当前操作: |
|
索引当前所处的步骤: |
|
未能执行的步骤: |
|
错误类型和该错误的描述。 |
|
|
要解决此问题,您可以更新策略,以便在 5 天后将索引缩减为单个分片
response = client.ilm.put_lifecycle( policy: 'shrink-index', body: { policy: { phases: { warm: { min_age: '5d', actions: { shrink: { number_of_shards: 1 } } } } } } ) puts response
PUT _ilm/policy/shrink-index { "policy": { "phases": { "warm": { "min_age": "5d", "actions": { "shrink": { "number_of_shards": 1 } } } } } }
重试失败的生命周期策略步骤编辑
修复导致索引进入 ERROR
步骤的问题后,您可能需要显式告诉 ILM 重试该步骤
POST /my-index-000001/_ilm/retry
ILM 随后会尝试重新运行失败的步骤。您可以使用 ILM 解释 API 来监控进度。
常见的 ILM 设置问题编辑
如何计算 min_age
编辑
设置 ILM 策略 或 使用 ILM 自动滚动 时,请注意,min_age
可以相对于滚动时间或索引创建时间。
如果您使用 ILM 滚动,则 min_age
是相对于索引滚动的时间计算的。这是因为 滚动 API 会生成一个新索引,并更新先前索引的 age
以反映滚动时间。如果索引尚未滚动,则 age
与索引的 creation_date
相同。
您可以使用 index.lifecycle.origination_date
和 index.lifecycle.parse_origination_date
ILM 设置 覆盖 min_age
的计算方式。
常见的 ILM 错误编辑
以下是解决 ERROR
步骤中报告的最常见错误的方法。
滚动别名的问题是导致错误的常见原因。请考虑使用 数据流 而不是使用别名管理滚动。
滚动别名 [x] 可以指向多个索引,在索引模板 [z] 中找到重复的别名 [x]编辑
目标滚动别名在索引模板的 index.lifecycle.rollover_alias
设置中指定。您需要在 引导初始索引 时_一次性_显式配置此别名。然后,滚动操作会管理设置和更新别名,以便 滚动 到每个后续索引。
不要在索引模板的别名部分中显式配置相同的别名。
index.lifecycle.rollover_alias [x] 未指向索引 [y]编辑
索引使用的别名错误,或者该别名不存在。
检查 index.lifecycle.rollover_alias
索引设置。要查看配置了哪些别名,请使用 _cat/aliases。
索引 [y] 的设置 [index.lifecycle.rollover_alias] 为空或未定义编辑
必须为滚动操作配置 index.lifecycle.rollover_alias
设置。
更新索引设置以设置 index.lifecycle.rollover_alias
。
别名 [x] 具有多个写入索引 [y,z]编辑
只有一个索引可以指定为特定别名的写入索引。
使用 别名 API 为除一个索引之外的所有索引设置 is_write_index:false
。
索引名称 [x] 与模式 ^.*-\d+ 不匹配编辑
索引名称必须与正则表达式模式 ^.*-\d+
匹配,滚动操作才能正常工作。最常见的问题是索引名称不包含尾随数字。例如,my-index
与模式要求不匹配。
将数值追加到索引名称,例如 my-index-000001
。
CircuitBreakingException:[x] 数据过大,[y] 的数据编辑
这表示集群达到了资源限制。
在继续设置 ILM 之前,您需要采取措施来缓解资源问题。有关更多信息,请参阅 断路器错误。
[y] 上的高磁盘水印 [x] 超出编辑
这表示集群的磁盘空间不足。当您没有设置索引生命周期管理以从热节点滚动到温节点时,就会发生这种情况。
请考虑添加节点、升级硬件或删除不需要的索引。
security_exception:操作 [<操作名称>] 对具有角色 [<角色名称>] 的用户 [<用户名>] 未授权,此操作由索引权限 [manage_follow_index,manage,all] 授予编辑
这表示无法执行 ILM 操作,因为 ILM 用于执行操作的用户没有适当的权限。在更新 ILM 策略后,如果用户的权限被删除,则可能会发生这种情况。ILM 操作的运行方式就像它们是由最后修改策略的用户执行的一样。用于创建或修改策略的帐户应具有执行该策略中所有操作的权限。