Google Cloud Storage 存储库
编辑Google Cloud Storage 存储库
编辑你可以使用 Google Cloud Storage 服务作为 快照/还原的存储库。
入门
编辑此存储库类型使用 Google Cloud Java Client for Storage 连接到存储服务。如果你是首次使用 Google Cloud Storage,则必须连接到 Google Cloud Platform Console 并创建一个新项目。创建项目后,你必须为你的项目启用 Cloud Storage 服务。
创建存储桶
编辑Google Cloud Storage 服务使用 存储桶 的概念作为所有数据的容器。存储桶通常使用 Google Cloud Platform Console 创建。此存储库类型不会自动创建存储桶。
要创建新的存储桶:
- 连接到 Google Cloud Platform Console。
- 选择你的项目。
- 转到 Storage Browser。
- 单击 创建存储桶 按钮。
- 输入新存储桶的名称。
- 选择存储类别。
- 选择位置。
- 单击 创建 按钮。
有关更详细的说明,请参阅 Google Cloud 文档。
服务身份验证
编辑存储库必须对其向 Google Cloud Storage 服务发出的请求进行身份验证。Google 客户端库通常采用一种名为应用程序默认凭据的策略。但是,Elasticsearch 仅部分支持该策略。存储库在启用了安全管理器的 Elasticsearch 进程下运行。当环境变量 GOOGLE_APPLICATION_CREDENTIALS
用于指向磁盘上的本地文件时,安全管理器会阻止“自动”凭据发现。但是,它可以检索附加到正在运行 Elasticsearch 的资源的服务帐户,或者回退到 Compute Engine、Kubernetes Engine 或 App Engine 提供的默认服务帐户。或者,如果你使用的环境不支持自动凭据发现,则必须配置 服务帐户凭据。
使用服务帐户
编辑你必须手动获取并提供 服务帐户凭据。
有关生成 JSON 服务帐户文件的详细信息,请参阅 Google Cloud 文档。请注意,此存储库类型不支持 PKCS12 格式。
以下是步骤摘要:
- 连接到 Google Cloud Platform Console。
- 选择你的项目。
- 选择 服务帐户 选项卡。
- 单击 创建服务帐户。
- 创建帐户后,选择该帐户并转到 密钥。
- 选择 添加密钥,然后选择 创建新密钥。
- 选择密钥类型 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://127.0.0.1/o/oauth2/auth", "token_uri": "https://127.0.0.1/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_file
的 file
设置。NAME
是存储库的客户端配置的名称。隐式客户端名称为 default
,但可以使用 client
键在存储库设置中指定不同的客户端名称。
不支持通过 GOOGLE_APPLICATION_CREDENTIALS 环境变量传递文件路径。
例如,如果你在密钥库中添加了 gcs.client.my_alternate_client.credentials_file
设置,则可以像这样配置存储库以使用这些凭据:
resp = client.snapshot.create_repository( name="my_gcs_repository", repository={ "type": "gcs", "settings": { "bucket": "my_bucket", "client": "my_alternate_client" } }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my_gcs_repository", repository: { type: "gcs", settings: { bucket: "my_bucket", client: "my_alternate_client", }, }, }); console.log(response);
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
进行自定义。
例如:
resp = client.snapshot.create_repository( name="my_gcs_repository", repository={ "type": "gcs", "settings": { "bucket": "my_bucket", "client": "my_alternate_client" } }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my_gcs_repository", repository: { type: "gcs", settings: { bucket: "my_bucket", client: "my_alternate_client", }, }, }); console.log(response);
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
以下是可用的客户端设置。必须存储在密钥库中的设置标记为 安全
。
-
credentials_file
(安全,可重新加载) - 用于向 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
(无代理)、http
和socks
。默认为direct
。
存储库设置
编辑gcs
存储库类型支持许多设置,用于自定义数据在 Google Cloud Storage 中的存储方式。
这些可以在创建存储库时指定。例如:
resp = client.snapshot.create_repository( name="my_gcs_repository", repository={ "type": "gcs", "settings": { "bucket": "my_other_bucket", "base_path": "dev" } }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my_gcs_repository", repository: { type: "gcs", settings: { bucket: "my_other_bucket", base_path: "dev", }, }, }); console.log(response);
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 调用次数增加,从而使这两个操作速度更慢且成本更高。将块大小指定为值和单位,例如:
10MB
、5KB
、500B
。默认为 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 服务时使用的名称。
推荐的存储桶权限
编辑用于访问存储桶的服务帐户必须具有对该存储桶的“写入者”访问权限
- 连接到 Google Cloud Platform Console。
- 选择你的项目。
- 转到 Storage Browser。
- 选择存储桶并“编辑存储桶权限”。
- 服务帐户必须配置为具有“写入者”访问权限的“用户”。
线性化注册表实现
编辑GCS 存储库的线性化注册表实现基于 GCS 对 put-blob 操作的强一致性前提条件的支持。为了对注册表执行比较和交换操作,Elasticsearch 会检索注册表 blob 及其当前生成,然后使用观察到的生成作为其前提条件来上传更新后的 blob。该前提条件确保在此期间生成未发生更改。