当前位置:   article > 正文

Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期

Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期

警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新版本为 8.12。

在本教程中,我们将了解如何将现有数据流(data stream)从索引生命周期管理 (ILM) 迁移到数据流生命周期。 现有的 ILM 管理的支持指数将继续由 ILM 管理,直到它们过期并被 ILM 删除; 但是,新的支持索引将由数据流生命周期管理。 这样,数据流逐渐从由 ILM 管理迁移到由数据流生命周期管理。 正如我们将看到的,ILM 和数据流生命周期可以共同管理数据流; 但是,一个索引一次只能由一个系统管理

如果你对 ILM 还不是很清楚的话,请详细阅读文章 “Elasticsearch:Index 生命周期管理入门”。针对数据流生命周期,请详细阅读文章 "Data streams()()()"

长话短说

要将数据流从 ILM 迁移到数据流生命周期,我们必须执行两个步骤:

  • 更新支持数据流的索引模板,将 prefer_ilm 设置为 false,并配置数据流生命周期。
  • 使用生命周期 API 为现有数据流配置数据流生命周期。

设置 ILM 管理的数据流

首先,我们创建一个具有两个由 ILM 管理的支持索引的数据流。 我们首先创建 ILM 策略:

  1. PUT _ilm/policy/pre-dsl-ilm-policy
  2. {
  3. "policy": {
  4. "phases": {
  5. "hot": {
  6. "actions": {
  7. "rollover": {
  8. "max_primary_shard_size": "50gb"
  9. }
  10. }
  11. },
  12. "delete": {
  13. "min_age": "7d",
  14. "actions": {
  15. "delete": {}
  16. }
  17. }
  18. }
  19. }
  20. }

让我们创建一个索引模板来支持数据流并配置 ILM:

  1. PUT _index_template/dsl-data-stream-template
  2. {
  3. "index_patterns": ["dsl-data-stream*"],
  4. "data_stream": { },
  5. "priority": 500,
  6. "template": {
  7. "settings": {
  8. "index.lifecycle.name": "pre-dsl-ilm-policy"
  9. }
  10. }
  11. }

现在,我们将索引一个以 dsl-data-stream 为目标的文档来创建数据流,并且我们还将手动翻转 (rollover) 数据流以创建另一代索引:

  1. POST dsl-data-stream/_doc?
  2. {
  3. "@timestamp": "2023-10-18T16:21:15.000Z",
  4. "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
  5. }
POST dsl-data-stream/_rollover
  1. {
  2.   "acknowledged": true,
  3.   "shards_acknowledged": true,
  4.   "old_index": ".ds-dsl-data-stream-2024.03.21-000001",
  5.   "new_index": ".ds-dsl-data-stream-2024.03.21-000002",
  6.   "rolled_over": true,
  7.   "dry_run": false,
  8.   "conditions": {}
  9. }

我们将使用 GET _data_stream API 来检查数据流的状态:

GET _data_stream/dsl-data-stream

检查响应,我们将看到两个后备索引(backing indices)均由 ILM 管理,并且下一个索引也将由 ILM 管理:

  1. {
  2. "data_streams": [
  3. {
  4. "name": "dsl-data-stream",
  5. "timestamp_field": {
  6. "name": "@timestamp"
  7. },
  8. "indices": [
  9. {
  10. "index_name": ".ds-dsl-data-stream-2023.10.19-000001", (1)
  11. "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
  12. "prefer_ilm": true, (2)
  13. "ilm_policy": "pre-dsl-ilm-policy", (3)
  14. "managed_by": "Index Lifecycle Management" (4)
  15. },
  16. {
  17. "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
  18. "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
  19. "prefer_ilm": true,
  20. "ilm_policy": "pre-dsl-ilm-policy",
  21. "managed_by": "Index Lifecycle Management"
  22. }
  23. ],
  24. "generation": 2,
  25. "status": "GREEN",
  26. "template": "dsl-data-stream-template",
  27. "next_generation_managed_by": "Index Lifecycle Management", (5)
  28. "prefer_ilm": true, (6)
  29. "ilm_policy": "pre-dsl-ilm-policy", (7)
  30. "hidden": false,
  31. "system": false,
  32. "allow_custom_routing": false,
  33. "replicated": false
  34. }
  35. ]
  36. }
  1. 后备索引的名称。
  2. 对于每个后备索引,我们会显示 prefer_ilm 配置的值,该值将指示在两个系统都配置了索引的情况下,ILM 是否优先于数据流生命周期。
  3. 为此索引配置的 ILM 策略。
  4. 管理该索引的系统(可能的值为 “Index Lifecycle Management”、“Data stream lifecycle” 或 “Unmanaged”)
  5. 将管理下一个索引的系统(一旦数据流滚动,该数据流的新写入索引)。 可能的值为 “Index Lifecycle Management”、“Data stream lifecycle” 或 “Unmanaged”。
  6. 在支持数据流的索引模板中配置的 prefer_ilm 值。 该值将为所有新的后备索引配置。 如果未在索引模板中配置,则后备索引将接收 true 作为默认值(默认情况下,ILM 优先于数据流生命周期,因为它目前功能更丰富)。
  7. 在支持此数据流的索引模板中配置的 ILM 策略(将在所有新的后备索引上配置,只要它存在于索引模板中)。

将数据流迁移到数据流生命周期

要将 dsl-data-stream 迁移到数据流生命周期,我们必须执行两个步骤:

  • 更新支持数据流的索引模板,将 prefer_ilm 设置为 false,并配置数据流生命周期。
  • 使用 lifecycle API 为现有 dsl-data-stream 配置数据流生命周期。

重要:添加到索引模板中的数据流生命周期配置作为数据流配置,仅适用于新的数据流。 我们的数据流已经存在,因此即使我们在索引模板中添加了数据流生命周期配置,它也不会应用于 dsl-data-stream。

让我们更新索引模板:

  1. PUT _index_template/dsl-data-stream-template
  2. {
  3. "index_patterns": ["dsl-data-stream*"],
  4. "data_stream": { },
  5. "priority": 500,
  6. "template": {
  7. "settings": {
  8. "index.lifecycle.name": "pre-dsl-ilm-policy",
  9. "index.lifecycle.prefer_ilm": false (1)
  10. },
  11. "lifecycle": {
  12. "data_retention": "7d" (2)
  13. }
  14. }
  15. }
  • 现在将在新的后备索引(通过滚动数据流创建)上配置 prefer_ilm 设置,以便 ILM 不会优先于数据流生命周期。
  • 我们正在配置数据流生命周期,以便新数据流将由数据流生命周期管理。

我们现在已经确保新的数据流将由数据流生命周期进行管理。让我们更新现有的 dsl-data-stream 并配置数据流生命周期:

  1. PUT _data_stream/dsl-data-stream/_lifecycle
  2. {
  3. "data_retention": "7d"
  4. }

我们可以检查数据流以检查下一代是否确实由数据流生命周期管理:

GET _data_stream/dsl-data-stream
  1. {
  2. "data_streams": [
  3. {
  4. "name": "dsl-data-stream",
  5. "timestamp_field": {
  6. "name": "@timestamp"
  7. },
  8. "indices": [
  9. {
  10. "index_name": ".ds-dsl-data-stream-2023.10.19-000001",
  11. "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
  12. "prefer_ilm": true,
  13. "ilm_policy": "pre-dsl-ilm-policy",
  14. "managed_by": "Index Lifecycle Management" (1)
  15. },
  16. {
  17. "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
  18. "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
  19. "prefer_ilm": true,
  20. "ilm_policy": "pre-dsl-ilm-policy",
  21. "managed_by": "Index Lifecycle Management" (2)
  22. }
  23. ],
  24. "generation": 2,
  25. "status": "GREEN",
  26. "template": "dsl-data-stream-template",
  27. "lifecycle": {
  28. "enabled": true,
  29. "data_retention": "7d"
  30. },
  31. "ilm_policy": "pre-dsl-ilm-policy",
  32. "next_generation_managed_by": "Data stream lifecycle", (3)
  33. "prefer_ilm": false,
  34. "hidden": false, (4)
  35. "system": false,
  36. "allow_custom_routing": false,
  37. "replicated": false
  38. }
  39. ]
  40. }
  1. 现有支持索引将继续由 ILM 管理
  2. 现有支持索引将继续由 ILM 管理
  3. 下一代索引将由 Data stream lifecycle 管理
  4. 我们在索引模板中配置的 prefer_ilm 设置值将被反映,并将针对新的支持索引进行相应配置。

现在,我们将滚动数据流以查看由数据流生命周期管理的新一代索引:

POST dsl-data-stream/_rollover
GET _data_stream/dsl-data-stream
  1. {
  2. "data_streams": [
  3. {
  4. "name": "dsl-data-stream",
  5. "timestamp_field": {
  6. "name": "@timestamp"
  7. },
  8. "indices": [
  9. {
  10. "index_name": ".ds-dsl-data-stream-2023.10.19-000001",
  11. "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
  12. "prefer_ilm": true,
  13. "ilm_policy": "pre-dsl-ilm-policy",
  14. "managed_by": "Index Lifecycle Management" (1)
  15. },
  16. {
  17. "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
  18. "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
  19. "prefer_ilm": true,
  20. "ilm_policy": "pre-dsl-ilm-policy",
  21. "managed_by": "Index Lifecycle Management" (2)
  22. },
  23. {
  24. "index_name": ".ds-dsl-data-stream-2023.10.19-000003",
  25. "index_uuid": "PA_JquKGSiKcAKBA8abcd1",
  26. "prefer_ilm": false, (3)
  27. "ilm_policy": "pre-dsl-ilm-policy",
  28. "managed_by": "Data stream lifecycle" (4)
  29. }
  30. ],
  31. "generation": 3,
  32. "status": "GREEN",
  33. "template": "dsl-data-stream-template",
  34. "lifecycle": {
  35. "enabled": true,
  36. "data_retention": "7d"
  37. },
  38. "ilm_policy": "pre-dsl-ilm-policy",
  39. "next_generation_managed_by": "Data stream lifecycle",
  40. "prefer_ilm": false,
  41. "hidden": false,
  42. "system": false,
  43. "allow_custom_routing": false,
  44. "replicated": false
  45. }
  46. ]
  47. }
  1. 翻转(rollover)前存在的后备索引将继续由 ILM 管理
  2. 翻转前存在的后备索引将继续由 ILM 管理
  3. 正如我们在索引模板中配置的那样,新的写入索引收到的 prefer_ilm 设置为 false
  4. 新的写入索引由 Data stream lifecycle 管理

将数据流迁移回 ILM

我们可以轻松地将此数据流更改为由 ILM 管理,因为我们在上面更新索引模板时没有删除 ILM 策略。

我们可以通过两种方式实现这一目标:

  1. 从数据流中删除生命周期
  2. 通过将 enabled 标志配置为 false 来禁用数据流生命周期

让我们实现选项 2 并禁用数据流生命周期:

  1. PUT _data_stream/dsl-data-stream/_lifecycle
  2. {
  3. "data_retention": "7d",
  4. "enabled": false (1)
  5. }

enabled 标志可以省略,默认为 true,但是这里我们显式地将其配置为 false 让我们检查数据流的状态:

GET _data_stream/dsl-data-stream
  1. {
  2. "data_streams": [
  3. {
  4. "name": "dsl-data-stream",
  5. "timestamp_field": {
  6. "name": "@timestamp"
  7. },
  8. "indices": [
  9. {
  10. "index_name": ".ds-dsl-data-stream-2023.10.19-000001",
  11. "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
  12. "prefer_ilm": true,
  13. "ilm_policy": "pre-dsl-ilm-policy",
  14. "managed_by": "Index Lifecycle Management"
  15. },
  16. {
  17. "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
  18. "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
  19. "prefer_ilm": true,
  20. "ilm_policy": "pre-dsl-ilm-policy",
  21. "managed_by": "Index Lifecycle Management"
  22. },
  23. {
  24. "index_name": ".ds-dsl-data-stream-2023.10.19-000003",
  25. "index_uuid": "PA_JquKGSiKcAKBA8abcd1",
  26. "prefer_ilm": false,
  27. "ilm_policy": "pre-dsl-ilm-policy",
  28. "managed_by": "Index Lifecycle Management"
  29. }
  30. ],
  31. "generation": 3,
  32. "status": "GREEN",
  33. "template": "dsl-data-stream-template",
  34. "lifecycle": {
  35. "enabled": false,
  36. "data_retention": "7d"
  37. },
  38. "ilm_policy": "pre-dsl-ilm-policy",
  39. "next_generation_managed_by": "Index Lifecycle Management",
  40. "prefer_ilm": false,
  41. "hidden": false,
  42. "system": false,
  43. "allow_custom_routing": false,
  44. "replicated": false
  45. }
  46. ]
  47. }
  1. 写入索引现在由 ILM 管理
  2. 在数据流上配置的 lifecycle 现已禁用。
  3. 下一次写入索引将由 ILM 管理

如果我们在更新索引模板时从索引模板中删除了 ILM 策略,则数据流的写入索引现在将处于 Unmanged 状态,因为该索引不会将 ILM 策略配置为回退到之前的状态。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/346511
推荐阅读
相关标签
  

闽ICP备14008679号