可搜索快照功能改变了我们对备份数据的查询方式。以往要查询备份数据时,要先找到备份数据所在的快照,然后在一个合适的环境中恢复快照,最后再发起请求查询数据。这个处理路径很长,而且很消耗时间。可搜索快照功能将大大简化该处理路径,节约时间。
角色设置
相信你对节点角色的概念已经有所熟悉。要启用可搜索快照功能,Easysearch 集群中必须至少有一个节点拥有 search 角色。参考设置如下。
node.roles: ["search"]
node.search.cache.size: 500mb
- node.roles: 指定节点角色,只有 search 角色的节点才能去搜索快照中的数据。
- node.search.cache.size: 执行快照搜索时,数据缓存大小。
混合角色设置,参考如下。
node.roles: ["master","data","search","ingest"]
node.search.cache.size: 500mb
创建快照
可搜索快照功能使用普通快照作为基础,创建快照命令不变。比如我创建且备份个 infini 索引。
# 创建 infini 索引
POST infini/_doc
{"test":"Searchable snapshots"
}# 创建快照备份 infini 索引
PUT _snapshot/my-fs-repository/1
{"indices": "infini","include_global_state": false
}
创建快照索引
可搜索快照功能的核心是搜索快照中的索引,这一步是通过快照索引实现的。为了和集群中的普通索引区别开来,我们将实际存储在快照中的索引称为快照索引。通过使用 Easysearch 的 _restore API 并指定 remote_snapshot 存储类型来创建快照索引。
创建快照索引时,注意名称不能与当前索引名称重复。通常我们备份完索引后,可删除索引释放节点磁盘空间,创建快照索引时默认使用原来的名称。
# 删除 infini 索引释放磁盘空间
DELETE infini# 创建快照索引,使用原索引名称
POST /_snapshot/my-fs-repository/1/_restore
{"indices": "infini","include_global_state": false,"include_aliases": false,"storage_type": "remote_snapshot"
}
创建快照索引的命令和还原快照的命令非常相似,关键在于 storage_type 参数指定 remote_snapshot 存储类型。
如果要将快照中的全部索引都创建快照索引,可省略 indices 参数。
如果想在创建快照索引时指定不同的名字,参考下面的命令。
POST /_snapshot/my-fs-repository/1/_restore
{"indices": "infini","include_global_state": false,"include_aliases": false,"storage_type": "remote_snapshot","rename_pattern": "(infini)","rename_replacement": "snapshot-$1"
}
- rename_pattern: 使用此选项指定索引匹配的正则表达式。使用捕获组重用索引名称的部分。
- rename_replacement: 使用 $0 包括整个匹配索引名称,使用 $1 包括第一个捕获组的内容,等等。
上述命令创建出来的快照索引名称是 snapshot-infini 。
经过上面一系列的操作,我已经拥有了两个快照索引。
搜索快照索引
我们通过搜索快照索引达到搜索快照数据的目的,令人开心的是搜索快照索引和搜索普通索引的语法完全一样。😀
常见问题
如何区分普通索引和快照索引呢?
我们可以通过索引的 settings 信息区分,快照索引的 settings 信息中有 store.type: remote_snapshot 信息,普通索引没有此信息。
快照索引能写入数据吗?
快照索引无法写入,数据仍然保持在快照格式中存储在存储库中,因此可搜索快照索引本质上是只读的。 任何尝试写入可搜索快照索引的操作都会导致错误。
快照索引不想要了怎么办?
直接删除,需要时再执行创建快照索引流程。此外快照在创建快照索引后,无法直接删除快照,要先删除快照索引。
如果您对上述内容有任何疑问,欢迎与我讨论。