Google Cloud Storage 存储库
编辑Google Cloud Storage 存储库
编辑您可以使用 Google Cloud Storage 服务作为 快照/恢复 的存储库。
入门
编辑此存储库类型使用 Google Cloud Java 存储客户端 连接到存储服务。如果您是第一次使用 Google Cloud Storage,则必须连接到 Google Cloud Platform 控制台 并创建一个新项目。创建项目后,必须为您的项目启用 Cloud Storage 服务。
创建存储桶
编辑Google Cloud Storage 服务使用 存储桶 的概念作为所有数据的容器。存储桶通常使用 Google Cloud Platform 控制台 创建。此存储库类型不会自动创建存储桶。
要创建新的存储桶
- 连接到 Google Cloud Platform 控制台。
- 选择您的项目。
- 转到 存储浏览器。
- 单击 创建存储桶 按钮。
- 输入新存储桶的名称。
- 选择存储类别。
- 选择一个位置。
- 单击 创建 按钮。
有关更详细的说明,请参阅 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 控制台。
- 选择您的项目。
- 选择 服务帐户 选项卡。
- 单击 创建服务帐户。
- 创建帐户后,选择它并转到 密钥。
- 选择 添加密钥,然后选择 创建新密钥。
- 选择密钥类型 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_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
以下是可用的客户端设置。必须存储在密钥存储中的设置标记为 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
(无代理)、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
。请注意,如果设置了托管服务的恢复设置,则默认为无限,并且速率还会通过恢复设置进行限制。
-
只读
-
(可选,布尔值) 如果
true
,则存储库为只读。集群可以从存储库检索和恢复快照,但不能写入存储库或在其中创建快照。只有具有写入权限的集群才能在存储库中创建快照。连接到存储库的所有其他集群都应将
readonly
参数设置为true
。如果
false
,则集群可以写入存储库并在其中创建快照。默认为false
。如果将同一个快照存储库注册到多个集群,则只有一个集群应该具有对存储库的写入权限。多个集群同时写入存储库存在损坏存储库内容的风险。
-
application_name
- [6.3.0] 已在 6.3.0 中弃用。此设置现在在客户端设置中定义。 客户端使用 Google Cloud Storage 服务时使用的名称。
推荐的存储桶权限
编辑用于访问存储桶的服务帐户必须对存储桶具有“写入者”权限。
- 连接到 Google Cloud Platform 控制台。
- 选择您的项目。
- 转到 存储浏览器。
- 选择存储桶并“编辑存储桶权限”。
- 服务帐户必须配置为具有“写入者”权限的“用户”。
线性化寄存器实现
编辑GCS 存储库的线性化寄存器实现基于 GCS 对 put-blob 操作的强一致性前提条件的支持。要对寄存器执行比较并交换操作,Elasticsearch 会检索寄存器 blob 及其当前生成,然后使用观察到的生成作为其前提条件上传更新后的 blob。前提条件确保在此期间生成没有更改。