ISM 错误预防解决方案
以下部分列出了每个验证规则操作的错误解决方案。
索引不是写入索引
要确认索引是不是写入索引,请运行以下请求:
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
}
}
如果返回中包含"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}
索引是某个数据流的写入索引
如果您仍想删除该索引,请检查您的数据流设置并更改写入索引。
索引被阻塞
通常,索引被阻塞是因为磁盘使用量已超过 flood-stage 水位线,并且索引具有 read-only-allow-delete 块。要解决此问题,您可以:
移除
-index.blocks.read_only_allow_delete-参数。临时提高磁盘水位线。
临时禁用磁盘分配阈值。
为防止问题再次发生,最好通过增加磁盘空间、添加新节点或删除不再需要的数据或索引来减少磁盘使用量。
通过运行以下请求移除 -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
}
}
}
}
}
}