可搜索快照
> 文档中心 > 文档中心 > INFINI Easysearch > 功能手册 > 管理模块 > 可搜索快照

可搜索快照 #

可搜索快照索引在实时搜索时从快照存储库中按需读取数据,而不是在恢复时将所有索引数据下载到集群存储中。由于索引数据仍然保持在快照格式中存储在存储库中,因此可搜索快照索引本质上是只读的。 任何尝试写入可搜索快照索引的操作都会导致错误。

可搜索快照功能采用了诸如在集群节点中缓存频繁使用的数据段以及删除集群节点中最不常使用的数据段等技术,以便为频繁使用的数据段腾出空间。从快照下载的数据段存储在块存储中,与集群节点的通用索引并存。 因此,集群节点的计算能力在索引、本地搜索和存储在低成本对象存储,例如 Amazon Simple Storage Service(Amazon S3)上的快照数据段之间共享。 尽管集群节点的资源利用效率要高得多,但大量的任务将导致快照搜索变得较慢且持续时间较长。节点的本地存储也用于缓存快照数据。

将节点配置为使用可搜索快照 #

只有角色为 search 的节点才能进行快照搜索,要启用可搜索快照功能,请在您的 easysearch.yml 文件中创建一个节点,并将节点角色定义为 “search”:

node.name: snapshots-node
node.roles: [search]

如果您正在运行 Docker,可以通过在您的 docker-compose.yml 文件中添加以下行来创建一个具有搜索节点角色的节点:

- node.roles: [search]

创建可搜索的快照索引 #

可搜索的快照索引是通过使用 _restore API 并指定 remote_snapshot 存储类型来创建的。

storage_type:

  • local 表示所有快照的元数据和索引数据都将下载到本地存储。
  • remote_snapshot 表示快照的元数据将下载到集群,但远程存储库将保持索引数据的权威存储。数据将根据需要下载和缓存以提供查询服务。为了使用 remote_snapshot 类型还原快照,集群中至少必须配置一个节点具有 search 节点角色。

使用示例 #

下面我们以 MinIO 作为快照存储仓库,Minio 是专为云应用程序开发人员和 DevOps 构建的对象存储服务器,与 Amazon S3 对象存储兼容。

使用 _snapshot API 注册 MinIO 存储库

curl -XPUT "http://localhost:9200/_snapshot/my-minio-repository" -H 'Content-Type: application/json' -d'
{
  "type": "s3",
  "settings": {
    "access_key": "minioadmin",
    "secret_key": "minioadmin",
    "bucket": "es-bucket",
    "endpoint": "http://127.0.0.1:9000",
    "compress": true
  }
}'

将事先准备好的 nginx_default_1g 索引备份到快照

curl  -XPUT "http://localhost:920/_snapshot/my-minio-repository/4" -H 'Content-Type: application/json' -d'
{
"indices": "nginx_default_1g",
"ignore_unavailable": true,
"include_global_state": false,
"partial": false
}'

恢复可搜索的快照索引,关键的配置是将 storage_type 设置为 remote_snapshot

curl -XPOST "http://localhost:9211/_snapshot/my-minio-repository/4/_restore" -H 'Content-Type: application/json' -d'
{
  "indices": "nginx_default_1g",
  "ignore_unavailable": true,
  "include_global_state": false,
  "include_aliases": false,
  "partial": false,
  "storage_type": "remote_snapshot",
  "rename_pattern": "nginx_default_1g",
  "rename_replacement": "remote_nginx_default_1g"
}'

然后 我们就可以像本地索引一样进行搜索了。