滚动
编辑滚动编辑
允许的阶段:热。
当现有索引满足指定的滚动条件时,将目标滚动到新的索引。
当索引滚动时,先前索引的年龄将更新以反映滚动时间。此日期(而不是索引的 creation_date
)用于索引生命周期管理 min_age
阶段计算。 了解更多.
如果滚动操作用于 跟随者索引,策略执行将等待直到领导者索引滚动(或 以其他方式标记为完成),然后使用 取消跟随操作 将跟随者索引转换为常规索引。
滚动目标可以是 数据流 或 索引别名。当目标是数据流时,新索引将成为数据流的写入索引,其生成将递增。
要滚动索引别名,别名及其写入索引必须满足以下条件
- 索引名称必须与模式 ^.*-\d+$ 匹配,例如 (
my-index-000001
)。 - 必须将
index.lifecycle.rollover_alias
配置为要滚动的别名。 - 索引必须是别名的 写入索引。
例如,如果 my-index-000001
具有别名 my_data
,则必须配置以下设置。
response = client.indices.create( index: 'my-index-000001', body: { settings: { 'index.lifecycle.name' => 'my_policy', 'index.lifecycle.rollover_alias' => 'my_data' }, aliases: { my_data: { is_write_index: true } } } ) puts response
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_date 或 index.lifecycle.origination_date 设置。
-
max_docs
- (可选,整数) 在达到指定的文档最大数量后触发滚动。自上次刷新以来添加的文档不包含在文档计数中。文档计数 不 包含副本分片中的文档。
-
max_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
一样,副本被忽略。要查看当前分片文档,请使用 _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 个或更多文档。通常,分片在达到 200M 文档之前很久就会达到 50GB,但对于空间效率高的数据集来说并非如此。如果分片包含超过 200M 个文档,搜索性能很可能会受到影响。这是内置限制的原因。
示例编辑
基于最大主分片大小滚动编辑
此示例在索引的最大主分片至少为 50 吉字节时滚动索引。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_primary_shard_size: '50gb' } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover" : { "max_primary_shard_size": "50gb" } } } } } }
基于索引大小滚动编辑
此示例在索引至少为 100 吉字节时滚动索引。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_size: '100gb' } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover" : { "max_size": "100gb" } } } } } }
基于文档计数滚动编辑
此示例在索引包含至少一亿个文档时滚动索引。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_docs: 100_000_000 } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover" : { "max_docs": 100000000 } } } } } }
基于最大主分片的文档计数滚动编辑
此示例在索引包含最大主分片至少一千万个文档时滚动索引。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_primary_shard_docs: 10_000_000 } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover" : { "max_primary_shard_docs": 10000000 } } } } } }
基于索引年龄滚动编辑
此示例在索引创建至少 7 天后滚动索引。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_age: '7d' } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover" : { "max_age": "7d" } } } } } }
使用多个条件滚动编辑
当您指定多个滚动条件时,索引将在满足任何 max_*
条件和所有 min_*
条件时滚动。此示例在索引至少 7 天旧或至少 100 吉字节时滚动索引,但前提是索引包含至少 1000 个文档。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_age: '7d', max_size: '100gb', min_docs: 1000 } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover" : { "max_age": "7d", "max_size": "100gb", "min_docs": 1000 } } } } } }
在保持分片大小的同时滚动编辑
此示例在主分片大小至少为 50gb 或索引至少为 30 天旧时滚动索引,但前提是主分片至少为 1gb。对于低容量索引,这可以防止创建许多小型分片。
response = client.ilm.put_lifecycle( policy: 'my_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_primary_shard_size: '50gb', max_age: '30d', min_primary_shard_size: '1gb' } } } } } } ) puts response
PUT _ilm/policy/my_policy { "policy": { "phases": { "hot": { "actions": { "rollover" : { "max_primary_shard_size": "50gb", "max_age": "30d", "min_primary_shard_size": "1gb" } } } } } }
滚动条件阻止阶段转换编辑
滚动操作仅在满足其条件之一时才完成。这意味着任何后续阶段都将被阻止,直到滚动成功。
例如,以下策略在索引滚动后一天删除索引。它不会在索引创建后一天删除索引。
response = client.ilm.put_lifecycle( policy: 'rollover_policy', body: { policy: { phases: { hot: { actions: { rollover: { max_size: '50gb' } } }, delete: { min_age: '1d', actions: { delete: {} } } } } } ) puts response
PUT /_ilm/policy/rollover_policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "50gb" } } }, "delete": { "min_age": "1d", "actions": { "delete": {} } } } } }