Link Search Menu Expand Document Documentation Menu

ISM 错误预防解决方案

每个验证规则操作的错误解决方案列在以下部分中。


目录

  1. 该索引不是写入索引
  2. 该索引没有别名
  3. 跳过翻转操作为 true
  4. 此索引已成功翻转
  5. 翻转策略缺少 rollover_alias 索引设置
  6. 数据过大并超出阈值
  7. 超出最大分片数
  8. 该索引是某些数据流的写入索引
  9. 索引被阻止

该索引不是写入索引

要确认索引是否为写入索引,请运行以下请求

GET <index>/_alias?pretty

如果响应不包含 "is_write_index" : true,则该索引不是写入索引。以下示例确认该索引是写入索引

{
  "<index>" : {
    "aliases" : {
      "<index_alias>" : { 
        "is_write_index" : true
      }
    }
  }
}

要将索引设置为写入索引,请运行以下请求

PUT <index>
{
  "aliases": {
    "<index_alias>" : {
        "is_write_index" : true
    }
  }
}

该索引没有别名

如果索引没有别名,您可以通过运行以下请求添加一个

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "<target_index>",
        "alias": "<index_alias>"
      }
    }
  ]
}

跳过翻转操作为 true

如果发生跳过翻转操作的情况,请运行以下请求

 GET <target_index>/_settings?pretty

如果您收到第一个示例中的响应,可以通过运行第二个示例中的请求来重置它

{
  "index": {
    "opendistro.index_state_management.rollover_skip": true
  }
}
PUT <target_index>/_settings
{
    "index": {
      "index_state_management.rollover_skip": false
  }
}

此索引已成功翻转

从索引中移除翻转策略,以防止此错误再次发生。

翻转策略缺少 rollover_alias 索引设置

向翻转策略添加 rollover_alias 索引设置以解决此问题。运行以下请求

PUT _index_template/ism_rollover
{
  "index_patterns": ["<index_patterns_in_rollover_policy>"],
  "template": {
   "settings": {
    "plugins.index_state_management.rollover_alias": "<rollover_alias>"
   }
 }
}

数据过大并超出阈值

检查 JVM 信息并增加堆内存。

超出最大分片数

每个节点或每个索引的分片限制导致此问题发生。通过运行以下请求检查是否存在 total_shards_per_node 限制

GET /_cluster/settings

如果响应包含 total_shards_per_node,请通过运行以下请求暂时增加其值

PUT _cluster/settings
{
   "transient":{
      "cluster.routing.allocation.total_shards_per_node":100
   }
}

要检查索引是否存在分片限制,请运行以下请求

GET <index>/_settings/index.routing-

如果响应包含第一个示例中的设置,请增加其值或将其设置为 -1 以获得无限分片,如第二个示例所示

"index" : {
        "routing" : {
          "allocation" : {
            "total_shards_per_node" : "10"
          }
        }
      }
PUT <index>/_settings
{"index.routing.allocation.total_shards_per_node":-1}

该索引是某些数据流的写入索引

如果您仍想删除索引,请检查您的数据流设置并更改写入索引。

索引被阻止

通常,索引被阻止是因为磁盘使用量已超过洪水阶段水位,并且索引具有 read-only-allow-delete 阻止。要解决此问题,您可以

  1. 移除 -index.blocks.read_only_allow_delete- 参数。
  2. 暂时提高磁盘水位线。
  3. 暂时禁用磁盘分配阈值。

为防止问题再次发生,最好通过增加磁盘空间、添加新节点或删除不再需要的数据或索引来减少磁盘使用量。

通过运行以下请求移除 -index.blocks.read_only_allow_delete-

PUT <index>/_settings
{
    "index.blocks.read_only_allow_delete": null
}

通过运行以下请求提高低磁盘水位线

PUT _cluster/settings
{
    "transient": {
        "cluster": {
            "routing": {
                "allocation": {
                    "disk": {
                        "watermark": {
                            "low": "25.0gb"
                        }
                    }
                }
            }
        }
    }
}

通过运行以下请求禁用磁盘分配阈值

PUT _cluster/settings
{
    "transient": {
        "cluster": {
            "routing": {
                "allocation": {
                    "disk": {
                        "threshold_enabled" : false
                    }
                }
            }
        }
    }
}