📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

此 API 用于创建或更新快照存储仓库。

API #

PUT /_snapshot/{repository}
POST /_snapshot/{repository}

API 的作用 #

创建新的快照存储仓库或更新已存在的仓库配置。快照仓库是存储索引快照的位置,可以是:

  • 共享文件系统:使用共享文件系统存储快照
  • 云存储:使用 S3、Azure、GCS 等云存储服务
  • 其他存储:通过插件支持 HDFS 等其他存储类型

如果仓库已存在,新的配置将替换现有配置。

API 的参数 #

路由参数 #

参数类型是否必需描述
repositorystring必需仓库名称

查询字符串参数 #

参数类型是否必需默认值描述
master_timeouttime可选30s等待主节点响应的超时时间
timeouttime可选30s操作超时时间
verifyboolean可选true创建后是否验证仓库

请求体参数 #

参数类型是否必需描述
typestring必需仓库类型
可选值:fs, s3, hdfs, azure, gcs
settingsobject必需仓库特定配置

仓库类型和配置 #

文件系统仓库 (fs) #

参数类型是否必需描述
locationstring必需共享文件系统的路径
compressboolean可选是否压缩快照文件,默认 true
chunk_sizestring可选快照文件的块大小,默认 null
max_restore_bytes_per_secstring可选恢复时的最大字节数/秒
max_snapshot_bytes_per_secstring可选创建快照时的最大字节数/秒
readonlyboolean可选是否只读模式,默认 false

S3 仓库 (s3) #

参数类型是否必需描述
bucketstring必需S3 存储桶名称
regionstring可选AWS 区域
endpointstring可选S3 兼容服务的端点
access_keystring可选AWS 访问密钥
secret_keystring可选AWS 密钥
session_tokenstring可选AWS 会话令牌

请求示例 #

创建文件系统仓库 #

PUT /_snapshot/my-fs-repo
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/my_backup"
  }
}

创建带压缩的文件系统仓库 #

PUT /_snapshot/my-fs-repo-compressed
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/my_backup",
    "compress": true,
    "chunk_size": "10m",
    "max_restore_bytes_per_sec": "50mb",
    "max_snapshot_bytes_per_sec": "100mb"
  }
}

创建 S3 仓库 #

PUT /_snapshot/my-s3-repo
{
  "type": "s3",
  "settings": {
    "bucket": "my-backup-bucket",
    "region": "us-west-2",
    "base_path": "easysearch"
  }
}

创建 S3 兼容服务仓库 #

PUT /_snapshot/my-custom-s3-repo
{
  "type": "s3",
  "settings": {
    "bucket": "my-backup-bucket",
    "endpoint": "https://s3.example.com",
    "access_key": "your-access-key",
    "secret_key": "your-secret-key"
  }
}

不验证仓库创建 #

PUT /_snapshot/my-repo?verify=false
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/my_backup"
  }
}

响应示例 #

成功响应 #

{
  "acknowledged": true
}

错误响应 - 位置不存在 #

{
  "error": {
    "root_cause": [
      {
        "type": "repository_exception",
        "reason": "[my-fs-repo] location [/mount/backups/my_backup] doesn't match any of the locations registered with the repository"
      }
    ],
    "type": "repository_exception",
    "reason": "[my-fs-repo] failed to create repository"
  },
  "status": 500
}

使用场景 #

  1. 备份准备:在创建快照前先配置仓库
  2. 灾难恢复:配置远程存储用于灾难恢复
  3. 数据归档:配置长期存储用于数据归档
  4. 跨集群复制:使用共享存储实现跨集群数据复制

共享文件系统要求 #

使用文件系统仓库时,需要确保:

  1. 共享访问:所有节点都能访问同一位置
  2. 写入权限:所有节点都有写入权限
  3. 路径注册:路径已注册在 path.repo 配置中
  4. 挂载点:文件系统已正确挂载

path.repo 配置 #

easysearch.yml 中配置:

path.repo: ["/mount/backups", "/mount/backup2"]

注意事项 #

  1. 此 API 支持 PUT 和 POST 方法
  2. 仓库创建后会默认验证(verify=true
  3. 文件系统路径必须预先在 path.repo 中注册
  4. 仓库配置更新后会完全替换现有配置
  5. 删除仓库不会删除存储的快照数据

最佳实践 #

  1. 验证配置:创建后验证仓库可访问
  2. 权限控制:限制仓库的访问权限
  3. 容量规划:确保存储空间充足
  4. 网络带宽:考虑恢复时的网络带宽
  5. 定期测试:定期测试恢复流程

相关文档 #