加载中

在 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 中添加或移除数据层

在 Elastic Cloud Hosted 和 Elastic Cloud Enterprise 中,您可以从部署编辑器中添加暖(warm)冷(cold)冻结(frozen)容量,并且只有在数据可以安全迁移走之后才能移除层。默认配置包含用于热数据和内容数据的共享层;该层是必需的,无法移除。

查看 Elasticsearch 数据层以选择适合您工作负载的层。

  1. 创建部署(Create deployment)页面上,点击高级设置(Advanced Settings)
  2. 为要添加的任何数据层点击 + 添加容量(+ Add capacity)
  3. 点击页面底部的创建部署(Create deployment)以保存更改。
Elastic Cloud's deployment Advanced configuration page
  1. 登录到 Elastic Cloud 控制台 或 ECE Cloud UI

  2. 在主页上找到您的部署。

    提示

    如果您有多个部署,也可以转到 Hosted deployments(托管部署,Elastic Cloud Hosted)或 Deployments(部署,Elastic Cloud Enterprise)页面。在该页面上,您可以按名称、ID 缩小部署范围,或者选择其他几种筛选条件。

  3. 选择 Manage(管理)。

  1. 从导航菜单中,选择编辑(Edit)
  2. 为要添加的任何数据层点击 + 添加容量(+ Add capacity)
  3. 点击页面底部的保存(Save)以保存更改。

当需要从 Elastic Cloud Hosted 或 Elastic Cloud Enterprise 部署中移除数据层时,请遵循本节内容。根据该层保存的是常规 indices 还是可搜索快照索引(在使用索引生命周期管理 (ILM) 时,冷层或冻结层通常如此),步骤有所不同。

重要提示

禁用数据层、尝试缩减节点规模、减少可用区或还原自动扩展更改,都可能导致集群不稳定、集群无法访问,极端情况下甚至会导致数据损坏或丢失。

为避免这种情况(特别是对于生产环境),除了按照本指南所述对索引和 ILM 进行配置更改之外

  • 在尝试执行缩减操作之前,请检查部署的磁盘大小、CPU、JVM 内存压力和其他性能指标
  • 确保您有足够的资源和可用区来处理缩减规模后的工作负载。
  • 检查您的部署硬件配置文件(针对 Elastic Cloud Hosted)或部署模板(针对 Elastic Cloud Enterprise)是否适合您的业务用例。例如,如果您由于 CPU 压力增大而需要扩展,且正在使用存储优化(Storage Optimized)硬件配置文件,请考虑切换到CPU 优化(CPU Optimized)配置。

请阅读 https://esdocs.cn/cloud/shared-responsibility 以了解更多详情。如有疑问,请联系支持团队。

  • 明确您要禁用的是存储常规索引还是可搜索快照的层。冻结层仅保存部分挂载的可搜索快照。冷层可以保存常规索引或完全挂载的可搜索快照。热层通常保存常规索引,但 ILM 策略可以在热层上挂载完全挂载的可搜索快照(例如,当 searchable_snapshot 操作在 hot 阶段运行时)。使用这些请求来检查您要移除的层上是否存在可搜索快照索引

    # cold data tier: {{search-snap}} indices
    GET /_cat/indices/restored-*
    
    # frozen data tier: {{search-snap}} indices
    GET /_cat/indices/partial-*
    		
  • 要详细了解 ILM 或分片分配过滤,请参阅创建您的索引生命周期策略管理索引生命周期以及分片分配过滤器

冻结层仅存储部分挂载的可搜索快照。完全挂载的可搜索快照可以根据 ILM 阶段分配到热层或冷层,而冷层也可以保存常规索引。如果您不确定层上有什么,请使用在移除数据层之前中的检查方法。

当您更新部署时,Elastic Cloud Hosted 和 Elastic Cloud Enterprise 会尝试将所有数据从被移除的节点中移出。要禁用仅保存常规索引的层,请确保通过重新配置相关的分片分配过滤器,该层上的所有数据都可以被重新分配。您还需要暂时停止 ILM 策略,以防止新索引被移动到您要禁用的数据层。

为确保所有数据都能从您要禁用的数据层迁移出去,请按照以下步骤操作

  1. 确定哪些节点将从集群中移除。

    1. 登录 Elastic Cloud 控制台

    2. 托管部署(Hosted deployments)页面上,选择您的部署。

      托管部署页面上,您可以按名称、ID 缩小部署范围,或者从其他几个筛选器中进行选择。要自定义视图,请组合使用筛选器,或者将格式从网格更改为列表。

    3. 按要禁用的数据层过滤实例列表。

    记下列出的实例 ID。在此示例中,它们是 Instance 2 和 Instance 3。

    1. 登录 Cloud UI.

    2. Deployments(部署)页面,选择你的部署。

      按名称、ID 缩小列表范围,或从其他几个筛选器中进行选择。要进一步精简列表,请使用筛选器的组合。

    3. 按要禁用的数据层过滤实例列表。

    记下列出的实例 ID。在此示例中,它们是 Instance 2 和 Instance 3。

  2. 停止 ILM。

    POST /_ilm/stop
    		
  3. 确定需要移动哪些分片。

    GET /_cat/shards
    		

    解析输出,寻找分配给要从集群中移除的节点的分片。输出中 Instance #2 显示为 instance-0000000002

    A screenshot showing a filtered shard list
  4. 将分片移出要从集群中移除的节点。

    您必须从要移除的节点上的索引中移除任何索引级分片分配过滤器。ILM 根据策略和 Elasticsearch 版本使用不同的规则。检查索引设置以确定要使用哪个规则

    GET /my-index/_settings
    		
    1. 更新基于数据层的分配包含规则。

      基于数据层的 ILM 策略使用 index.routing.allocation.include 将分片分配到适当的层。使用此方法的索引具有类似于以下示例的索引路由设置

      {
      ...
          "routing": {
              "allocation": {
                  "include": {
                      "_tier_preference": "data_warm,data_hot"
                  }
              }
          }
      ...
      }
      		

      您必须从包含规则中移除相关的层。例如,要禁用暖层,请移除 data_warm 参数,并将 _tier_preference 设置为您要保留的层。首选通过生命周期提升数据(例如从暖到冷,而不是退回热),除非集群没有更冷的层来接受数据

      PUT /my-index/_settings
      {
          "routing": {
            "allocation": {
              "include": {
                  "_tier_preference": "data_cold,data_warm,data_hot"
              }
            }
          }
      }
      		
      1. 如果集群没有冷层,请按首选顺序使用剩余的最低层,例如在没有 data_cold 节点时使用 data_hot. 冻结层仅用于部分挂载的可搜索快照,在此流程中不是常规索引的目的地。

      更新分配包含规则将触发分片重新分配,将分片从要移除的节点中移出。

    2. 更新节点属性分配需求规则。

      基于节点属性的 ILM 策略使用 index.routing.allocation.require 将分片分配到适当的节点。使用此方法的索引具有类似于以下示例的索引路由设置

      {
      ...
          "routing": {
              "allocation": {
                  "require": {
                      "data": "warm"
                  }
              }
          }
      ...
      }
      		

      您必须移除或重新定义路由需求。要移除属性需求,请使用以下代码

      PUT /my-index/_settings
      {
          "routing": {
            "allocation": {
              "require": {
                  "data": null
              }
            }
          }
      }
      		

      移除必需属性不会触发分片重新分配。这些分片在应用禁用数据层的计划时移动。或者,您可以在移除节点之前使用 集群重新路由 API 手动重新分配分片,或设置 require 将分片迁移到所需的层。例如,要强制将索引移至具有 colddata 属性的节点,请使用以下请求

      PUT /my-index/_settings
      {
          "routing": {
            "allocation": {
              "require": {
                  "data": "cold"
              }
            }
          }
      }
      		

      调整 data 值以匹配您的索引已使用的自定义节点属性索引级分片分配过滤器。您无法将常规索引发送到冻结层。

    3. 移除自定义分配规则。

      如果要移除的节点上的索引具有其他形式的分片分配规则,则必须按照以下示例所示将其移除

      PUT /my-index/_settings
      {
          "routing": {
            "allocation": {
              "require": null,
              "include": null,
              "exclude": null
            }
          }
      }
      		
    重要提示

    确认分配完成后没有分片残留在要移除的节点上:GET /_cat/shards(根据需要按 node 过滤)应显示该层为空。更新设置会启动重定位过程,但您必须等待分片分配和恢复完成。如果分片停留在原始层上,请使用集群分配解释 API 来确定原因。常见原因可能是目标节点上的磁盘水印index.routing.allocation.total_shards_per_node

  5. 编辑部署,禁用数据层。

    如果启用了自动扩展,请将数据层的最大大小设置为 0,以确保自动扩展不会重新启用该数据层。

    在应用禁用数据层的计划时,被禁用层上的任何剩余分片都会被重新分配到其余的集群节点上。在数据迁移阶段监控分片分配,以确保所有分配规则都已正确更新。如果计划未能将数据从数据层迁移出去,请重新检查该数据层上剩余索引的分配规则。

  6. 计划更改完成后,确认没有与已禁用层关联的剩余节点,并且 GET _cluster/health 报告 green。如果是这种情况,请重新启用 ILM。

    POST _ilm/start
    		
提示

热层或冷层上完全挂载的可搜索快照通常可以通过仅更新 index.routing.allocation.include._tier_preference 设置和相关的分配规则来移动到另一个剩余的层,而无需调用 POST _snapshot/.../_restore。当 Elasticsearch 使用 searchable_snapshot ILM 操作创建它们时,索引名称通常带有 restored-* 前缀。如果您自己挂载快照,则索引名称不限于该模式。当您进行重新水合或者当您在冻结层上有部分挂载的索引并且需要在另一个层上有常规索引时,请使用完全恢复到新常规索引。在 frozen 层中,ILM 操作通常使用 partial-* 名称前缀;自主管理的局部挂载不必遵循此规则。

ILM 策略的 searchable_snapshot 操作hotcoldfrozen 阶段运行时,它可以将托管索引转换为可搜索快照(在非冻结阶段为 restored-*,或在 frozen 阶段为 partial-*)。如果不再需要该数据,同一策略的 delete 阶段可以将其移除。如果您在移除层的同时必须保留数据,请按照以下步骤操作

  1. 停止 ILM 并检查 ILM 状态是否为 STOPPED,以防止在您进行后续步骤时数据迁移到您打算禁用的阶段。

    # stop {{ilm-init}}
    POST _ilm/stop
    
    # check status
    GET _ilm/status
    		
  2. 获取索引和可搜索快照名称的完整列表,以及每个快照所在的快照存储库。

    1. 可搜索快照的索引名称可能会根据数据层而有所不同。如果您打算禁用冷层,请使用 restored-* 前缀。如果要禁用的是冻结层,请使用 partial-* 前缀。如果您要移除在早期阶段(例如在 hot 阶段)具有 searchable_snapshot 操作的层,也请在该层上针对 restored-* 运行相同的查询。

      GET <searchable-snapshot-index-prefix>/_settings?filter_path=**.index.store.snapshot.snapshot_name&expand_wildcards=all
      		

      在此示例中,我们有 4 个索引的列表,需要将它们从冻结层中移出。

      A screenshot showing a snapshot indices list
  3. (可选)将索引和快照名称列表保存在文本文件中,以便在其余整个过程中访问它。

  4. 移除应用于可搜索快照索引的别名。使用步骤 2 中的索引前缀。

    POST _aliases
    {
      "actions": [
        {
          "remove": {
            "index": "<searchable-snapshot-index-prefix>-<index_name>",
            "alias": "<index_name>"
          }
        }
      ]
    }
    		
    注意

    如果您使用数据流,则可以跳过此步骤。

    在此示例中,我们正在移除 frozen-index-1 索引的别名。

    A screenshot showing the process of removing a searchable snapshot index alias
  5. 从可搜索快照恢复索引。

    1. 按照步骤为要保留的层指定基于数据层的分配包含规则

    2. 移除关联的 ILM 策略(将其设置为 null)。如果您要应用不同的 ILM 策略,请按照切换生命周期策略中的步骤操作。

    3. 如果需要,请指定用于滚动的别名,否则将其设置为 null

    4. (可选)指定所需的副本分片数。

      POST _snapshot/<snapshot_repository_name>/<searchable_snapshot_name>/_restore
      {
        "indices": "*",
        "index_settings": {
          "index.routing.allocation.include._tier_preference": "<data_tiers>",
          "index.number_of_replicas": 0,
          "index.lifecycle.name": "<new-policy-name>",
          "index.lifecycle.rollover_alias": "<alias-for-rollover>"
        }
      }
      		

      对于 <searchable_snapshot_name>,请使用您在步骤 2 中获取的名称。调整 index.number_of_replicas 以匹配您的弹性需求。

      示例请求恢复了 frozen-index-1 并将其放置在暖层中;可以在默认快照存储库 found-snapshots 中找到该快照。

      A screenshot showing the process of restoring a searchable snapshot to a regular index
  6. 重复步骤 4 和 5,直到所有快照都恢复为常规索引。

  7. 恢复所有快照后,使用 GET _cat/indices/<index-pattern>?v=true 检查恢复的索引是否为 green,并且正确反映了预期的 docstore.size 计数。

    如果您正在使用数据流,可能需要使用 GET _data_stream/<data-stream-name> 来获取后备索引列表,然后使用 GET _cat/indices/<backing-index-name>?v=true 指定它们进行检查。当您恢复数据流的后备索引时,有一些注意事项适用,您可能需要手动将恢复的索引添加到您的数据流中或重新创建您的数据流。

  8. 一旦您的数据完成从可搜索快照到目标数据层的恢复,请使用步骤 2 中的前缀 DELETE 可搜索快照索引。

    DELETE <searchable-snapshot-index-prefix>-<index_name>
    		
  9. 按照以下步骤删除可搜索快照

    1. 打开 Kibana,使用导航菜单或全局搜索字段转到快照和恢复(Snapshot and Restore)管理页面,然后转到快照(Snapshots)标签页。(或者,转到 <kibana-endpoint>/app/management/data/snapshot_restore/snapshots。)

    2. 搜索 *<ilm-policy-name>*

    3. 批量选择快照并将其删除

      在此示例中,我们将删除与 policy_with_frozen_phase 关联的快照。

      A screenshot showing the process of deleting snapshots
  10. 使用 GET _cat/allocation?v=true&s=node 确认您希望移除的数据节点上没有剩余分片。

  11. 从控制台编辑您的集群以禁用数据层。

  12. 计划更改完成后,确认没有与已禁用层关联的剩余节点,并且 GET _cluster/health 报告 green。如果是这种情况,请重新启用 ILM。

    POST _ilm/start
    		
© . 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.