云搜索服务支持可搜索快照功能,该功能基于快照构建可搜索快照只读索引。本文介绍通过 ISM 生成可搜索快照的操作步骤。
ISM(Index State Management )是用于索引生命周期的自动化管理插件,ISM 插件允许根据预定义的策略自动执行各种操作,以优化索引的性能、存储效率和数据管理。
在可搜索快照的场景中,可以帮助我们将不常用的索引自动转化成可搜索快照,优化集群的存储效率,避免频繁的手动创建快照操作。
在体验可搜索快照前,需要先确保实例中已经启用冷数据节点。
登录可视化工具,进入命令行。
创建快照存储库。
创建一个名为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 } }
创建 ISM 策略。
此处创建一个 id 为searchable_snapshot_policy
的 ISM 策略,该策略将匹配nginxlogs-*
格式的索引分为 Hot、Cold、Delete 三个阶段。
nginxlogs-000001
,那么新生成的索引为nginxlogs-000002
,生成的可搜索快照只读索引为remote-nginxlogs-000001
。说明
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 | 条件:
|
Cold | searchable_snapshot | 可搜索快照配置,支持以下参数配置:
|
transitions | 条件: | |
Delete | delete | delete_searchable_snapshot:是否删除创建的快照数据,默认为 false,表示不删除快照。boolean 类型,非必填项。 说明 进入 Delete 阶段,系统将自动删除可搜索快照索引。是否删除快照数据,则取决于 |
创建索引,并写入多条数据。
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" } } }
*
代表后/前缀。如果创建的索引名匹配到表达式nginxlogs-*
,那么该模板就对此索引生效。nginxlogs
。nginxlogs
。创建索引。
PUT /nginxlogs-000001 { "aliases": { "nginxlogs": { "is_write_index": true } } }
反复写入多篇文档数据。
反复执行以下命令,可以向索引中写入多篇文档数据。为了触发本文中设置的 ISM 策略 rollover 动作,至少需要写入超过 20 篇文档。
POST /nginxlogs/_doc { "@timestamp": "2024-07-01T13:12:00", "message": "GET /search HTTP/1.1 200 1070000", "user": { "id": "kim" } }
查看索引数据分布情况,判断是否生成可搜索快照索引。
GET _cat/shards?v&s=index,shard
新建的索引名称和 ISM 策略中的索引表达式匹配后,将自动关联。经过较长一段时间后,您可执行上述命令查看是否生成了可搜索快照索引,默认以remote-
开头。
说明
从查询结果中,您可了解到以下重要信息:
remote-
开头,存储在冷数据节点。nginxlogs-000002
,再过一段时间将会删除原索引nginxlogs-000001
。remote-
开头的可搜索快照索引,一般是由于正处于 ISM 策略执行过程,还未生成可搜索快照索引。ISM 策略执行一般耗时比较久,您可以通过命令查看策略执行进度,具体请参见1.如何查看 ISM 策略执行进度?。检索可搜索快照索引。
GET /<index-name>/_search
检索可搜索快照索引时,请替换为正确的索引名称。在本文中,可以查询remote-nginxlogs-000001
,也可以查询remote-nginxlogs*
。
在 Dev Tools 页面,执行GET _opendistro/_ism/explain/<index-name>
命令,即可查看 ISM 策略执行进度。
在 Dev Tools 页面,执行GET /<index-name>/_settings?pretty
命令,查看索引配置。如果索引的存储类型显示为remote_snapshot,则表示该索引是可搜索快照索引。
在 Dev Tools 页面,执行以下命令,关联历史索引和目标 ISM 策略。
POST /_plugins/_ism/add/<index-name> { "policy_id": "searchable_snapshot_policy" }
POST /_opendistro/_ism/add/<index-name> { "policy_id": "searchable_snapshot_policy" }