Google Cloud Storage 存储库编辑

您可以使用 Google Cloud Storage 服务作为 快照/恢复 的存储库。

入门编辑

此存储库类型使用 Google Cloud Java 存储客户端 连接到存储服务。如果您是第一次使用 Google Cloud Storage,则必须连接到 Google Cloud Platform 控制台 并创建一个新项目。创建项目后,您必须为项目启用 Cloud Storage 服务。

创建存储桶编辑

Google Cloud Storage 服务使用 存储桶 的概念作为所有数据的容器。存储桶通常使用 Google Cloud Platform 控制台 创建。此存储库类型不会自动创建存储桶。

要创建一个新的存储桶

  1. 连接到 Google Cloud Platform 控制台
  2. 选择您的项目。
  3. 转到 存储浏览器
  4. 单击 创建存储桶 按钮。
  5. 输入新存储桶的名称。
  6. 选择一个存储类别。
  7. 选择一个位置。
  8. 单击 创建 按钮。

有关更详细的说明,请参阅 Google Cloud 文档

服务身份验证编辑

存储库必须对它向 Google Cloud Storage 服务发出的请求进行身份验证。Google 客户端库通常采用名为 应用程序默认凭据 的策略。但是,该策略仅 部分支持 Elasticsearch。存储库在 Elasticsearch 进程下运行,该进程在启用安全管理器的情况下运行。当环境变量 GOOGLE_APPLICATION_CREDENTIALS 用于指向磁盘上的本地文件时,安全管理器会阻止“自动”凭据发现。但是,它可以检索附加到运行 Elasticsearch 的资源的服务帐户,或者回退到 Compute Engine、Kubernetes Engine 或 App Engine 提供的默认服务帐户。或者,如果您使用的是不支持自动凭据发现的环境,则必须配置 服务帐户 凭据。

使用服务帐户编辑

您必须手动获取并提供 服务帐户凭据

有关生成 JSON 服务帐户文件的详细信息,请参阅 Google Cloud 文档。请注意,此存储库类型不支持 PKCS12 格式。

以下是步骤摘要

  1. 连接到 Google Cloud Platform 控制台
  2. 选择您的项目。
  3. 选择 服务帐户 选项卡。
  4. 单击 创建服务帐户
  5. 创建帐户后,选择它并转到 密钥
  6. 选择 添加密钥,然后选择 创建新密钥
  7. 选择密钥类型 JSON,因为不支持 P12。

JSON 服务帐户文件如下所示

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "...",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
  "client_email": "service-account-for-your-repository@your-project-id.iam.gserviceaccount.com",
  "client_id": "...",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/[email protected]"
}

要将此文件提供给存储库,它必须存储在 Elasticsearch 密钥库 中。您必须使用 add-file 子命令添加一个名为 gcs.client.NAME.credentials_filefile 设置。 NAME 是存储库的客户端配置的名称。隐式客户端名称为 default,但可以在存储库设置中使用 client 键指定不同的客户端名称。

通过 GOOGLE_APPLICATION_CREDENTIALS 环境变量传递文件路径 不支持

例如,如果您在密钥库中添加了 gcs.client.my_alternate_client.credentials_file 设置,则可以像这样配置存储库以使用这些凭据

PUT _snapshot/my_gcs_repository
{
  "type": "gcs",
  "settings": {
    "bucket": "my_bucket",
    "client": "my_alternate_client"
  }
}

credentials_file 设置是 可重新加载的。您可以在节点启动之前定义这些设置,或者在定义设置后调用 节点重新加载安全设置 API 以将它们应用于正在运行的节点。

重新加载设置后,用于传输快照内容的内部 gcs 客户端将使用密钥库中的最新设置。

正在进行的快照或恢复作业不会被客户端的 credentials_file 设置的 重新加载 抢占。它们使用在操作开始时构建的客户端完成。

客户端设置编辑

用于连接到 Google Cloud Storage 的客户端提供了一些设置。客户端设置名称的格式为 gcs.client.CLIENT_NAME.SETTING_NAME,并在 elasticsearch.yml 中指定。 gcs 存储库查找的默认客户端名称称为 default,但可以使用存储库设置 client 进行自定义。

例如

PUT _snapshot/my_gcs_repository
{
  "type": "gcs",
  "settings": {
    "bucket": "my_bucket",
    "client": "my_alternate_client"
  }
}

某些设置是敏感的,必须存储在 Elasticsearch 密钥库 中。对于服务帐户文件就是这种情况

bin/elasticsearch-keystore add-file gcs.client.default.credentials_file /path/service-account.json

以下是可用的客户端设置。必须存储在密钥库中的设置标记为 Secure

credentials_file (Secure可重新加载的)
用于对 Google Cloud Storage 服务进行身份验证的服务帐户文件。
endpoint
要连接到的 Google Cloud Storage 服务端点。这将由 Google Cloud Storage 客户端自动确定,但可以显式指定。
connect_timeout
建立与 Google Cloud Storage 服务连接的超时时间。该值应指定单位。例如,值 5s 指定 5 秒的超时时间。值 -1 对应于无限超时时间。默认值为 20 秒。
read_timeout
从已建立的连接读取数据的超时时间。该值应指定单位。例如,值 5s 指定 5 秒的超时时间。值 -1 对应于无限超时时间。默认值为 20 秒。
application_name
客户端在使用 Google Cloud Storage 服务时使用的名称。设置自定义名称对于在 Google Cloud Platform 中记录请求统计信息时对集群进行身份验证很有用。默认为 repository-gcs
project_id
Google Cloud 项目 ID。这将从凭据文件自动推断,但可以显式指定。例如,它可用于在可以使用相同凭据的生产项目和开发项目之间切换。
proxy.host
通过它连接到 Google Cloud Storage 的代理的主机名。
proxy.port
通过它连接到 Google Cloud Storage 的代理的端口。
proxy.type
客户端的代理类型。支持的值为 direct(无代理)、httpsocks。默认为 direct

存储库设置编辑

gcs 存储库类型支持一些设置,以自定义数据在 Google Cloud Storage 中的存储方式。

这些可以在创建存储库时指定。例如

PUT _snapshot/my_gcs_repository
{
  "type": "gcs",
  "settings": {
    "bucket": "my_other_bucket",
    "base_path": "dev"
  }
}

支持以下设置

bucket
要用于快照的存储桶的名称。(必填)
client
用于连接到 Google Cloud Storage 的客户端的名称。默认为 default
base_path

指定存储库数据在存储桶内的路径。默认为存储桶的根目录。

在为 Elastic Cloud Enterprise 配置快照存储库时,请不要设置 base_path。Elastic Cloud Enterprise 会自动为每个部署生成 base_path,以便多个部署可以共享同一个存储桶。

chunk_size
在快照过程中,大文件可以分解成 blob 存储中的多个较小的 blob。除非有明确的理由限制存储库中 blob 的大小,否则不建议更改此值的默认值。将值设置为低于默认值会导致与使用默认值相比,在快照创建和恢复操作期间对 Google Cloud Storage 服务进行更多 API 调用,从而使这两种操作都变慢,成本也更高。将块大小指定为值和单位,例如:10MB5KB500B。默认为 Google Cloud Storage 服务中 blob 的最大大小,即 5TB
compress
当设置为 true 时,元数据文件将以压缩格式存储。此设置不会影响默认情况下已压缩的索引文件。默认为 true
max_restore_bytes_per_sec
(可选,字节值) 每个节点的最大快照恢复速率。默认为无限制。请注意,恢复也会通过 恢复设置 进行限制。
max_snapshot_bytes_per_sec
(可选,字节值) 每个节点的最大快照创建速率。默认为每秒 40mb。请注意,如果设置了 托管服务的恢复设置,则默认为无限制,并且速率还会通过 恢复设置 进行限制。
readonly

(可选,布尔值) 如果 true,则存储库为只读。集群可以从存储库中检索和恢复快照,但不能写入存储库或在其中创建快照。

只有具有写入权限的集群才能在存储库中创建快照。连接到存储库的所有其他集群都应将 readonly 参数设置为 true

如果 false,则集群可以写入存储库并在其中创建快照。默认为 false

如果您将同一个快照存储库注册到多个集群,则只有一个集群应该具有对存储库的写入权限。如果多个集群同时写入存储库,可能会导致存储库内容损坏。

application_name
[6.3.0] 在 6.3.0 中已弃用。此设置现在在 客户端设置 中定义。 客户端在使用 Google Cloud Storage 服务时使用的名称。

推荐的存储桶权限编辑

用于访问存储桶的服务帐户必须对存储桶具有“写入者”访问权限。

  1. 连接到 Google Cloud Platform 控制台
  2. 选择您的项目。
  3. 转到 存储浏览器
  4. 选择存储桶并“编辑存储桶权限”。
  5. 服务帐户必须配置为具有“写入者”访问权限的“用户”。

线性化寄存器实现编辑

GCS 存储库的线性化寄存器实现基于 GCS 对 put-blob 操作的强一致性前提条件的支持。要对寄存器执行比较和交换操作,Elasticsearch 会检索寄存器 blob 及其当前代,然后使用观察到的代作为前提条件上传更新的 blob。前提条件确保代在此期间没有改变。