加载中

滚动更新 (Rollover)

允许的阶段:hot。

当现有索引满足指定的滚动更新条件时,将目标滚动更新为新索引。

注意

当索引发生滚动更新时,先前索引的年龄(age)会更新为滚动更新的时间。在索引生命周期管理(ILM)的 min_age 阶段计算中,将使用此日期,而不是索引的 creation_date(创建日期)。了解详情

重要提示

如果在跟随者索引上使用滚动更新操作,策略执行将一直等待,直到领导者索引滚动更新(或被标记为完成),然后通过 Unfollow 操作将跟随者索引转换为常规索引。

滚动更新目标可以是数据流索引别名。当目标为数据流时,新索引将成为该数据流的写入索引,并且其生成代次(generation)会递增。

要对索引别名进行滚动更新,别名及其写入索引必须满足以下条件

  • 索引名称必须匹配模式 ^.-\d+$*,例如 (my-index-000001)。
  • 必须将 index.lifecycle.rollover_alias 配置为要滚动更新的别名。
  • 该索引必须是该别名的写入索引

例如,如果 my-index-000001 拥有别名 my_data,则必须配置以下设置。

				PUT my-index-000001
					{
  "settings": {
    "index.lifecycle.name": "my_policy",
    "index.lifecycle.rollover_alias": "my_data"
  },
  "aliases": {
    "my_data": {
      "is_write_index": true
    }
  }
}
		

滚动更新操作必须指定至少一个 max_* 条件,且可以包含零个或多个 min_* 条件。空的滚动更新操作是无效的。

一旦满足任何 max_* 条件并且满足所有 min_* 条件,索引就会进行滚动更新。但请注意,默认情况下不会对空索引进行滚动更新。

max_age
(可选,时间单位)在达到自索引创建以来的最大经过时间后触发滚动更新。经过时间始终自索引创建时间开始计算,即使索引的起始日期配置为了自定义日期(例如在使用 index.lifecycle.parse_origination_dateindex.lifecycle.origination_date 设置时)也是如此。
max_docs
(可选,整数)在达到指定的文档最大数量后触发滚动更新。自上次刷新以来添加的文档不计入文档总数。文档数包含副本分片中的文档。
max_size

(可选,字节单位)当索引达到特定大小限制时触发滚动更新。这是索引中所有主分片的总大小。副本不计入最大索引大小。

已弃用

max_size 滚动更新属性将在未来版本中被移除。请改用 max_primary_shard_size

提示

要查看当前索引大小,请使用 _cat indices API。pri.store.size 值显示所有主分片的组合大小。

max_primary_shard_size

(可选,字节单位)当索引中最大的主分片达到特定大小时触发滚动更新。这是索引中主分片的最大大小。与 max_size 一样,副本将被忽略。

提示

要查看当前分片大小,请使用 _cat shards API。store 值显示每个分片的大小,prirep 指示分片是主分片 (p) 还是副本分片 (r)。

max_primary_shard_docs

(可选,整数)当索引中最大的主分片达到特定文档数量时触发滚动更新。这是索引中主分片的最多文档数。与 max_docs 一样,副本将被忽略。

提示

如果一个或多个分片包含 200,000,000 个或更多文档,滚动更新操作会隐式且始终对数据流或别名进行滚动更新。通常情况下,分片在达到 2 亿(200M)文档之前很久就会达到 50GB,但对于空间高效的数据集并非如此。如果分片包含超过 2 亿个文档,搜索性能可能会受到影响,这就是设置内置限制的原因。将 max_primary_shard_docs 设置为高于 200,000,000 将没有任何效果。有关推荐限制的更多信息,请参考分片大小指导原则

提示

要查看当前分片文档数,请使用 _cat shards API。docs 值显示每个分片的文档数量。

min_age
(可选,时间单位)阻止滚动更新,直到达到自索引创建以来的最小经过时间。请参阅关于 max_age 的说明。
min_docs
(可选,整数)阻止滚动更新,直到达到指定的最小文档数量。请参阅关于 max_docs 的说明。
min_size
(可选,字节单位)阻止滚动更新,直到索引达到特定大小。请参阅关于 max_size 的说明。
min_primary_shard_size
(可选,字节单位)阻止滚动更新,直到索引中最大的主分片达到特定大小。请参阅关于 max_primary_shard_size 的说明。
min_primary_shard_docs
(可选,整数)阻止滚动更新,直到索引中最大的主分片达到特定数量的文档。请参阅关于 max_primary_shard_docs 的说明。
重要提示

空索引不会进行滚动更新,即使它们具有关联的 max_age(通常该条件会导致滚动更新发生)。策略可以通过添加 "min_docs": 0 条件来覆盖此行为,并显式选择对空索引进行滚动更新。也可以通过将 indices.lifecycle.rollover.only_if_has_documents 设置为 false,在集群范围内禁用此限制。

重要提示

如果一个或多个分片包含 200000000 个或更多文档,滚动更新操作会隐式且始终对数据流或别名进行滚动更新。通常情况下,分片在达到 2 亿(200M)文档之前很久就会达到 50GB,但对于空间高效的数据集并非如此。如果分片包含超过 2 亿个文档,搜索性能将极有可能受到影响。这就是内置限制的原因。

此示例在索引的最大主分片至少达到 50 GB 时对索引进行滚动更新。

				PUT _ilm/policy/my_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_primary_shard_size": "50gb"
          }
        }
      }
    }
  }
}
		

此示例在索引大小至少达到 100 GB 时对其进行滚动更新。

				PUT _ilm/policy/my_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_size": "100gb"
          }
        }
      }
    }
  }
}
		

此示例在索引包含至少一亿个文档时对其进行滚动更新。

				PUT _ilm/policy/my_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_docs": 100000000
          }
        }
      }
    }
  }
}
		

此示例在最大主分片包含至少一千万个文档时对索引进行滚动更新。

				PUT _ilm/policy/my_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_primary_shard_docs": 10000000
          }
        }
      }
    }
  }
}
		

如果索引是在至少 7 天前创建的,此示例将对其进行滚动更新。

				PUT _ilm/policy/my_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_age": "7d"
          }
        }
      }
    }
  }
}
		

当指定多个滚动更新条件时,只要满足任何一个 max_* 条件并且满足所有 min_* 条件,索引就会进行滚动更新。此示例在索引年龄至少为 7 天或大小至少为 100 GB 时对索引进行滚动更新,但前提是索引包含至少 1000 个文档。

				PUT _ilm/policy/my_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_age": "7d",
            "max_size": "100gb",
            "min_docs": 1000
          }
        }
      }
    }
  }
}
		

此示例在主分片大小至少为 50gb,或者索引年龄至少为 30 天时对索引进行滚动更新,但前提是主分片至少为 1gb。对于低容量索引,这可以防止创建大量的小分片。

				PUT _ilm/policy/my_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover" : {
            "max_primary_shard_size": "50gb",
            "max_age": "30d",
            "min_primary_shard_size": "1gb"
          }
        }
      }
    }
  }
}
		

只有满足其条件之一时,滚动更新操作才会完成。这意味着在滚动更新成功之前,所有后续阶段都会被阻塞。

例如,以下策略在索引滚动更新一天后将其删除。它不会在索引创建一天后将其删除。

				PUT /_ilm/policy/rollover_policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50gb"
          }
        }
      },
      "delete": {
        "min_age": "1d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
		
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.