可搜索快照
可搜索快照索引实时(在搜索时)按需从快照存储库读取数据,而不是在恢复时将所有索引数据下载到集群存储。由于索引数据以快照格式保留在存储库中,因此可搜索快照索引本质上是只读的。任何写入可搜索快照索引的尝试都会导致错误。
可搜索快照功能采用了诸如在集群节点中缓存常用数据段以及从集群节点中移除最少使用的数据段以为常用数据段腾出空间等技术。从块存储上的快照下载的数据段与集群节点的通用索引并存。因此,集群节点的计算能力在索引、本地搜索以及位于低成本对象存储(如 Amazon Simple Storage Service (Amazon S3))上的快照数据段之间共享。虽然集群节点资源利用效率更高,但大量的任务会导致快照搜索速度变慢且耗时更长。节点的本地存储也用于缓存快照数据。
配置节点以使用可搜索快照
从 OpenSearch 3.0 开始,使用可搜索快照功能的节点必须具有 warm
节点角色,而不是 search
角色。
要配置可搜索快照功能,请在 opensearch.yml
文件中创建一个节点,并将节点角色定义为 warm
。或者,您也可以为节点配置 cache.size
属性。
一个 warm
节点会为缓存预留存储空间,以执行可搜索快照查询。对于节点仅具有 warm
角色的专用搜索节点,此值默认为可用存储的固定百分比 (80%)。在其他情况下,需要使用 node.search.cache.size
设置来配置该值。
参数 | 类型 | 描述 |
---|---|---|
node.search.cache.size | 字节大小 | 指定字节大小的单位。例如,7kb 或 6gb 。有关更多信息,请参阅支持的单位。 |
node.name: snapshots-node
node.roles: [ warm ]
node.search.cache.size: 50gb
如果您正在运行 Docker,可以通过在 docker-compose.yml
文件中添加 - node.roles=warm
行来创建具有 warm
节点角色的节点。
version: '3'
services:
opensearch-node1:
image: opensearchproject/opensearch:3.0.0
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster
- node.name=opensearch-node1
- node.roles=warm
- node.search.cache.size=50gb
- 从 2.18 版本开始,k-NN 索引支持 NMSLIB 和 Faiss 引擎的可搜索快照。
创建可搜索快照索引
通过使用 恢复快照 API 并指定 remote_snapshot
存储类型来创建可搜索快照索引。
请求字段 | 描述 |
---|---|
storage_type | local 表示所有快照元数据和索引数据都将下载到本地存储。remote_snapshot 表示快照元数据将下载到集群,但远程存储库仍将是索引数据的权威存储。数据将根据需要下载和缓存以服务查询。集群中至少有一个节点必须配置为 warm 节点角色,才能使用 remote_snapshot 类型恢复快照。默认为 local 。 |
请求示例
以下请求将从快照 my-snapshot
中恢复索引 my-index
作为可搜索快照。
POST /_snapshot/my-repository/my-snapshot/_restore
{
"storage_type": "remote_snapshot",
"indices": "my-index"
}
与所有快照恢复请求类似,您可以包含或排除某些索引或指定其他快照设置。有关更多信息,请参阅恢复快照 API。
列出索引
要确定索引是否为可搜索快照索引,请查找存储类型值为 remote_snapshot
的索引。
GET /my-index/_settings?pretty
{
"my-index": {
"settings": {
"index": {
"store": {
"type": "remote_snapshot"
}
}
}
}
}
潜在用例
以下是可搜索快照功能的潜在用例:
- 能够将索引从基于集群的存储中卸载,同时保留搜索它们的能力。
- 能够在低成本介质中拥有大量可搜索索引的能力。
已知限制
以下是可搜索快照功能的已知限制:
- 从远程存储库访问数据比本地磁盘读取慢,因此预计搜索查询的延迟会更高。
- 许多远程对象存储按每次检索请求收费,因此用户应密切监控产生的任何费用。
- 搜索远程数据可能会影响在同一节点上运行的其他查询的性能。我们建议用户为对性能要求严格的应用程序预置具有
warm
角色的专用节点。 - 为了获得更好的搜索性能,请考虑在拍摄快照之前将索引强制合并为更少数量的段。为了获得最佳性能(以在快照之前使用计算资源为代价),请将索引强制合并为一个段。
- 我们建议使用
cluster.filecache.remote_data_ratio
设置来配置远程数据与本地磁盘缓存大小的最大比率。对于大多数工作负载,比率 5 是一个很好的起始点,以确保良好的查询性能。如果比率过大,则可能没有足够的磁盘空间来处理搜索工作负载。有关远程数据最大比率的更多详细信息,请参阅问题 #11676。