You need to enable JavaScript to run this app.
导航
通过 ISM 生成可搜索快照
最近更新时间:2024.11.08 17:24:37首次发布时间:2024.07.19 15:56:08

云搜索服务支持可搜索快照功能,该功能基于快照构建可搜索快照只读索引。本文介绍通过 ISM 生成可搜索快照的操作步骤。

背景信息

ISM(Index State Management )是用于索引生命周期的自动化管理插件,ISM 插件允许根据预定义的策略自动执行各种操作,以优化索引的性能、存储效率和数据管理。
在可搜索快照的场景中,可以帮助我们将不常用的索引自动转化成可搜索快照,优化集群的存储效率,避免频繁的手动创建快照操作。

功能限制

  • 要使用可搜索快照功能,需要在实例中提前启用冷数据节点。ES 6.7.1 版本实例不支持冷数据节点,因此也不支持可搜索快照功能。ES 7.10.2 和 OpenSearch 2.9.0 版本实例都支持可搜索快照。
  • ISM 策略只能针对未创建的索引自动关联生效。当新建的索引匹配到 ISM 策略中的索引名称表达式,索引和 ISM 策略将自动关联。

前提条件

在体验可搜索快照前,需要先确保实例中已经启用冷数据节点。

  • 您可以选择新建实例,在创建实例时启用冷数据节点,具体操作,请参见创建实例
  • 如果您已有实例,但未启用冷数据节点,可以通过升配的方式启用冷数据节点。具体操作,请参见升配实例

Image

创建可搜索快照

  1. 登录可视化工具,进入命令行。

    1. 登录可视化工具。使用公网访问地址登录可视化工具,请参见公网访问 Kibana/Dashboards
    2. 在左侧导航栏选择Management > Dev Tools
  2. 创建快照存储库。
    创建一个名为doc-repo的快照存储库。在实际使用中,您可以自定义设置存储库名称。

    PUT _snapshot/doc-repo
    {
      "type" : "s3",
      "settings" : {
        "bucket" : "es-shadow-prod-cn-beijing-210094***",
        "path_style_access" : "false",
        "endpoint" : "tos-s3-cn-beijing.ivolces.com/",
        "protocol" : "https",
        "client" : "default",
        "base_path" : "_remote_index",
        "region" : "cn-beijing",
        "searchable" : true
      }
    }
    
    • bucket:可以直接使用系统默认存储桶,默认存储桶的名称格式为es-shadow-prod-{region}-{accountId},您可以通过查看快照信息获取桶名称。详细详细,请参见快照存储查看快照信息
    • endpoint:TOS 存储桶的 S3 Endpoint 地址。直接使用私网地址,地域与云搜索服务实例相同。
    • base_path:自定义快照存储路径。
    • region:TOS 存储桶所属地域,与云搜索服务实例在相同地域。
    • searchable:使用系统自建的 TOS 存储桶来创建快照存储库时,必须将该参数设置为 true。使用其他 TOS 存储桶时,则无需配置该参数。
      Image
  3. 创建 ISM 策略。
    此处创建一个 id 为searchable_snapshot_policy的 ISM 策略,该策略将匹配nginxlogs-*格式的索引分为 Hot、Cold、Delete 三个阶段。

    • 索引的初始状态为 Hot,当索引中的文档数量超过 20 时,会自动进行 rollover 动作,将生成一个新索引并进入 Cold 阶段。
    • 在 Cold 阶段的索引会自动创建可搜索快照。索引在 Clod 阶段保留 5 天后会自动进入 Delete 阶段。在 Clod 阶段,会删除原索引并创建一个可搜索快照只读索引。
      假设原索引为nginxlogs-000001,那么新生成的索引为nginxlogs-000002,生成的可搜索快照只读索引为remote-nginxlogs-000001
    • 进入 Delete 阶段后,会删除可搜索快照只读索引,以及创建的快照数据。

    说明

    Opensearch 2.9.0 版本实例和 ES 7.10.2 版本实例在创建 ISM 策略时的命令不同,请注意区分。

    PUT _plugins/_ism/policies/searchable_snapshot_policy
       {
         "policy": {
           "description": "policy-test",
           "default_state": "hot",
           "states": [
             {
               "name": "hot",
               "actions": [
                 {
                   "rollover": {
                     "min_doc_count": 20
                   }
                 }
               ],
               "transitions": [
                 {
                   "state_name": "cold"
                 }
               ]
             },
             {
               "name": "cold",
               "actions": [
                 {
                   "searchable_snapshot": {
                       "snapshot_repository": "doc-repo"
                   }
                 }
               ],
               "transitions": [
                 {
                   "state_name": "delete",
                   "conditions": {
                     "min_index_age": "5d"
                   }
                 }
               ]
             },
             {
               "name": "delete",
               "actions": [
                 {
                   "delete": {
                       "delete_searchable_snapshot" : true
                   }
                 }
               ]
             }
           ],
           "ism_template": {
             "index_patterns": [
               "nginxlogs-*"
             ],
             "priority": 10
           }
         }
       }
    

    阶段

    动作

    说明

    Hot

    rollover

    条件:"min_doc_count": 20
    含义:当索引中的文档数量超过 20,触发 rollover 动作,将会生成一个新索引并进入 Cold 阶段。生成的新索引可以继续写入数据,满足条件时将会继续生成可搜索快照。
    您也可以选择设置其他条件,此处介绍以下两种配置:

    • min_size:当索引所有总分片存储值之和大于该值时,触发动作。
    • min_index_age:当索引自创建到现在的时间间隔大于该值时,触发动作。

    Cold

    searchable_snapshot

    可搜索快照配置,支持以下参数配置:

    • snapshot_repository:指定已创建的快照存储库。string 类型,必须配置。
    • force_merge_max_segments_num:强制合并索引各个分片的 segment 数量,默认不合并。force_merge 表示会在合并前将索引设置为read-only状态。integer 类型,非必填项。

    transitions

    条件:"min_index_age": "5d"
    含义:当索引处于 Cold 阶段 5 天,将自动进入 Delete 阶段。

    Delete

    delete

    delete_searchable_snapshot:是否删除创建的快照数据,默认为 false,表示不删除快照。boolean 类型,非必填项。
    该参数只在包含searchable_snapshot配置项时才有效。

    说明

    进入 Delete 阶段,系统将自动删除可搜索快照索引。是否删除快照数据,则取决于delete_searchable_snapshot参数配置,配置为true时将连同快照数据一起删除。

  4. 创建索引,并写入多条数据。

    1. 创建索引模板。
      创建一个名为nginxlogs_template的索引模板。在实际使用中,您可以自定义设置索引模板名称。

    说明

    以下命令在创建索引模板的同时,为所有匹配到表达式的索引,都添加一个共同的索引别名。Opensearch 2.9.0 版本实例和 ES7.10.2 版本实例在绑定别名时的命令不同,请注意区分。

    PUT _template/nginxlogs_template
       {
         "index_patterns": ["nginxlogs-*"],
         "settings": {
           "index": {
             "number_of_shards": 1,
             "number_of_replicas": 1,
             "plugins.index_state_management.rollover_alias": "nginxlogs"
           }
         }
       }
    
    • index_patterns:索引匹配表达式,可以用*代表后/前缀。如果创建的索引名匹配到表达式nginxlogs-*,那么该模板就对此索引生效。
    • plugins.index_state_management.rollover_alias:在 Opensearch 2.9.0 实例中,匹配到表达式的索引,都添加一个共同的索引别名nginxlogs
    • opendistro.index_state_management.rollover_alias:在 ES 7.10.2 实例中,匹配到表达式的索引,都添加一个共同的索引别名nginxlogs
    1. 创建索引。

      PUT /nginxlogs-000001
      {
        "aliases": {
          "nginxlogs": {
            "is_write_index": true
          }
        }
      }
      
    2. 反复写入多篇文档数据。
      反复执行以下命令,可以向索引中写入多篇文档数据。为了触发本文中设置的 ISM 策略 rollover 动作,至少需要写入超过 20 篇文档。

      POST /nginxlogs/_doc
      {
        "@timestamp": "2024-07-01T13:12:00",
        "message": "GET /search HTTP/1.1 200 1070000",
        "user": {
          "id": "kim"
        }
      }
      
  5. 查看索引数据分布情况,判断是否生成可搜索快照索引。

    GET _cat/shards?v&s=index,shard
    

    Image
    新建的索引名称和 ISM 策略中的索引表达式匹配后,将自动关联。经过较长一段时间后,您可执行上述命令查看是否生成了可搜索快照索引,默认以remote-开头。

    说明

    从查询结果中,您可了解到以下重要信息:

    • 可搜索快照索引以remote-开头,存储在冷数据节点
    • 系统自动生成一个新索引nginxlogs-000002,再过一段时间将会删除原索引nginxlogs-000001
    • 如果索引列表中没有remote-开头的可搜索快照索引,一般是由于正处于 ISM 策略执行过程,还未生成可搜索快照索引。ISM 策略执行一般耗时比较久,您可以通过命令查看策略执行进度,具体请参见1.如何查看 ISM 策略执行进度?
  6. 检索可搜索快照索引。

    GET /<index-name>/_search
    

    检索可搜索快照索引时,请替换为正确的索引名称。在本文中,可以查询remote-nginxlogs-000001,也可以查询remote-nginxlogs*
    Image

常见问题

1.如何查看索引的 ISM 策略的执行进度?

Dev Tools 页面,执行GET _opendistro/_ism/explain/<index-name>命令,即可查看 ISM 策略执行进度。
Image

2.如何判断索引是否是可搜索快照索引?

Dev Tools 页面,执行GET /<index-name>/_settings?pretty命令,查看索引配置。如果索引的存储类型显示为remote_snapshot,则表示该索引是可搜索快照索引。
Image

3.如何关联存量索引和 ISM 策略?

Dev Tools 页面,执行以下命令,关联历史索引和目标 ISM 策略。

  • Opensearch 版本实例:
POST /_plugins/_ism/add/<index-name>
{
  "policy_id": "searchable_snapshot_policy"
}

Image

  • ES 7.10.2 版本实例:
    POST /_opendistro/_ism/add/<index-name>
    {
      "policy_id": "searchable_snapshot_policy"
    }