排查索引生命周期管理错误

edit

排查索引生命周期管理错误

edit

ILM执行生命周期策略时,在执行步骤所需的索引操作时可能会发生错误。 当这种情况发生时,ILM会将索引移动到错误步骤。 如果ILM无法自动解决错误,执行将停止,直到您解决策略、索引或集群中的根本问题。

请参阅此ILM健康视频 以获取示例故障排除演练。

例如,您可能有一个 shrink-index 策略,该策略在索引至少五天后将其缩减为四个分片:

PUT _ilm/policy/shrink-index
{
  "policy": {
    "phases": {
      "warm": {
        "min_age": "5d",
        "actions": {
          "shrink": {
            "number_of_shards": 4
          }
        }
      }
    }
  }
}

没有任何东西阻止你将 shrink-index 策略应用于一个只有两个分片的新索引:

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 Explain API来获取有关出错信息:

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
      }
    }
  }
}

用于管理索引的策略:shrink-index

索引年龄:5.1天

索引当前所处的阶段:warm

当前操作:shrink

索引当前所处的步骤:错误

未能执行的步骤:shrink

错误的类型以及对该错误的描述。

当前阶段从shrink-index策略中的定义

要解决这个问题,您可以将策略更新为在5天后将索引缩减为一个分片:

PUT _ilm/policy/shrink-index
{
  "policy": {
    "phases": {
      "warm": {
        "min_age": "5d",
        "actions": {
          "shrink": {
            "number_of_shards": 1
          }
        }
      }
    }
  }
}

重试失败的生命周期策略步骤

edit

一旦你解决了导致在ERROR步骤中放置索引的问题, 你可能需要明确地告诉ILM重试该步骤:

POST /my-index-000001/_ilm/retry

ILM随后尝试重新运行失败的步骤。 您可以使用ILM Explain API来监控进度。

常见的ILM设置问题

edit

如何计算min_age

edit

在设置 ILM 策略使用 ILM 自动滚动 时,请注意 min_age 可以是相对于滚动时间或索引创建时间的。

如果你使用ILM滚动更新min_age是相对于索引滚动更新时间计算的。这是因为滚动更新API会生成一个新的索引,并将前一个索引的age更新为反映滚动更新时间。如果索引尚未滚动更新,则age与索引的creation_date相同。

您可以使用 index.lifecycle.origination_dateindex.lifecycle.parse_origination_date ILM 设置 来覆盖如何计算 min_age

常见的ILM错误

edit

以下是如何解决在错误步骤中报告的最常见错误的方法。

滚动别名的问题是错误的常见原因。 考虑使用数据流而不是通过别名管理滚动。

Rollover 别名 [x] 可以指向多个索引,在索引模板 [z] 中发现重复的别名 [x]

edit

目标滚动别名在索引模板中的 index.lifecycle.rollover_alias 设置中指定。 您需要在 引导初始索引 时明确配置此别名 一次。 然后,滚动操作将管理设置和更新别名以 滚动 到每个后续索引。

不要在索引模板的别名部分显式配置相同的别名。

请参阅此解决重复别名视频以获取示例故障排除演练。

index.lifecycle.rollover_alias [x] 未指向索引 [y]

edit

索引使用了错误的别名或该别名不存在。

检查 index.lifecycle.rollover_alias 索引设置。 要查看配置了哪些别名,请使用 _cat/aliases

请参阅此解决未指向索引视频以获取示例故障排除演练。

设置索引 [y] 的 [index.lifecycle.rollover_alias] 为空或未定义

edit

必须为翻转操作配置index.lifecycle.rollover_alias设置。

更新索引设置以设置index.lifecycle.rollover_alias

查看此解决空或未定义问题的视频以获取示例故障排除演练。

别名 [x] 有多个写入索引 [y,z]

edit

只能为一个特定的别名指定一个索引作为写入索引。

使用aliases API 将除一个索引外的所有索引的 is_write_index:false 设置为 false。

请参阅此解决多个写入索引视频以获取示例故障排除演练。

索引名称 [x] 不符合模式 ^.*-\d+

edit

索引名称必须与正则表达式模式 ^.*-\d+ 匹配,滚动操作才能生效。 最常见的问题是索引名称不包含尾随数字。 例如,my-index 不符合模式要求。

在索引名称后附加一个数值,例如 my-index-000001

请参阅此解决不符合模式视频以获取示例故障排除演练。

CircuitBreakingException: [x] 数据太大,[y] 的数据

edit

这表明集群正在达到资源限制。

在继续设置ILM之前,您需要采取措施来缓解资源问题。 有关更多信息,请参阅Circuit breaker错误

高磁盘水位线 [x] 在 [y] 上超出

edit

这表明集群的磁盘空间不足。 当你没有设置索引生命周期管理来从热节点滚动到温节点时,可能会发生这种情况。 更多信息,请参阅修复水印错误

安全异常:操作 [] 对用户 [] 及其角色 [] 未授权,此操作由索引权限 [manage_follow_index,manage,all] 授予

edit

这表示ILM操作无法执行,因为ILM用于执行操作的用户没有适当的权限。这可能发生在更新ILM策略后用户的权限被撤销的情况下。 ILM操作是按照最后修改策略的用户来执行的。用于创建或修改策略的账户应具有执行该策略中所有操作的权限。