Azure 仓库
编辑Azure 仓库
编辑你可以使用 Azure Blob 存储 作为 快照和恢复 的仓库。
设置
编辑要启用 Azure 仓库,首先需要通过指定一个或多个 azure.client.CLIENT_NAME.SETTING_NAME
形式的设置来配置 Azure 仓库客户端。默认情况下,azure
仓库使用名为 default
的客户端,但在注册每个仓库时,你可以指定不同的客户端名称。
唯一强制性的 Azure 仓库客户端设置是 account
,它是在 Elasticsearch 密钥库 中定义的 安全设置。 要提供此设置,请在每个节点上使用 elasticsearch-keystore
工具
bin/elasticsearch-keystore add azure.client.default.account
如果在节点启动后调整此设置,请调用 节点重新加载安全设置 API 以重新加载新值。
你可以通过设置它们的 account
值来定义多个客户端。 例如,要设置 default
客户端和另一个名为 secondary
的客户端,请在每个节点上运行以下命令
bin/elasticsearch-keystore add azure.client.default.account bin/elasticsearch-keystore add azure.client.secondary.account
key
和 sas_token
设置也是安全设置,可以使用如下命令进行设置
bin/elasticsearch-keystore add azure.client.default.key bin/elasticsearch-keystore add azure.client.secondary.sas_token
其他 Azure 仓库客户端设置必须在节点启动之前在 elasticsearch.yml
中设置。 例如
azure.client.default.timeout: 10s azure.client.default.max_retries: 7 azure.client.default.endpoint_suffix: core.chinacloudapi.cn azure.client.secondary.timeout: 30s
在此示例中,客户端超时时间对于使用 default
客户端的仓库来说,每次尝试为 10s
,失败前重试 7
次,并且端点后缀为 core.chinacloudapi.cn
。使用 secondary
客户端的仓库,每次尝试的超时时间为 30s
,但将使用默认端点,并且在默认重试次数后将失败。
正确配置 Azure 仓库客户端后,按如下所示注册一个 Azure 仓库,使用 client
仓库设置 提供客户端名称
resp = client.snapshot.create_repository( name="my_backup", repository={ "type": "azure", "settings": { "client": "secondary" } }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my_backup", repository: { type: "azure", settings: { client: "secondary", }, }, }); console.log(response);
PUT _snapshot/my_backup { "type": "azure", "settings": { "client": "secondary" } }
如果你正在使用 default
客户端,则可以省略 client
仓库设置
resp = client.snapshot.create_repository( name="my_backup", repository={ "type": "azure" }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my_backup", repository: { type: "azure", }, }); console.log(response);
PUT _snapshot/my_backup { "type": "azure" }
正在进行的快照或恢复作业不会被存储安全设置的重新加载抢占。它们将使用操作开始时构建的客户端完成。
客户端设置
编辑以下列表描述了可用的客户端设置。 那些必须存储在密钥库中的设置标记为 (安全, 可重新加载);其他设置必须存储在 elasticsearch.yml
文件中。默认的 CLIENT_NAME
是 default
,但你可以使用不同的名称配置一个客户端,并在注册仓库时按名称指定该客户端。
-
azure.client.CLIENT_NAME.account
(安全, 可重新加载) - Azure 帐户名称,仓库的内部 Azure 客户端使用此名称。所有客户端都必须设置此项。
-
azure.client.CLIENT_NAME.endpoint_suffix
- 要连接到的 Azure 端点后缀。默认值为
core.windows.net
。 -
azure.client.CLIENT_NAME.key
(安全, 可重新加载) - Azure 密钥,仓库的内部 Azure 客户端使用此密钥。或者,使用
sas_token
。 -
azure.client.CLIENT_NAME.max_retries
- 当 Azure 请求失败时使用的重试次数。此设置有助于控制指数退避策略。它指定快照失败前必须发生的重试次数。默认值为
3
。初始退避时间由 Azure SDK 定义为30s
。因此,在第一次超时或失败后重试之前,有30s
的等待时间。最大退避时间由 Azure SDK 定义为90s
。 -
azure.client.CLIENT_NAME.proxy.host
- 用于连接到 Azure 的代理的主机名。默认情况下,不使用代理。
-
azure.client.CLIENT_NAME.proxy.port
- 用于连接到 Azure 的代理的端口。默认情况下,不使用代理。
-
azure.client.CLIENT_NAME.proxy.type
- 注册客户端的代理类型。支持的值为
direct
、http
和socks
。例如:azure.client.default.proxy.type: http
。当proxy.type
设置为http
或socks
时,还必须提供proxy.host
和proxy.port
。默认值为direct
。 -
azure.client.CLIENT_NAME.sas_token
(安全, 可重新加载) - 共享访问签名 (SAS) 令牌,仓库的内部 Azure 客户端使用此令牌进行身份验证。SAS 令牌必须具有仓库基本路径及其所有内容的读取 (r)、写入 (w)、列表 (l) 和删除 (d) 权限。必须为 blob 服务 (b) 授予这些权限,并且适用于资源类型服务 (s)、容器 (c) 和对象 (o)。或者,使用
key
。 -
azure.client.CLIENT_NAME.timeout
- 客户端对 Azure 的任何单个请求的超时时间,以 时间单位 表示。例如,值
5s
指定 5 秒的超时时间。没有默认值,这意味着 Elasticsearch 使用 Azure 客户端设置的 默认值。 -
azure.client.CLIENT_NAME.endpoint
- 要连接到的 Azure 端点。它必须包含用于连接到 Azure 的协议。
-
azure.client.CLIENT_NAME.secondary_endpoint
- 要连接到的 Azure 次要端点。它必须包含用于连接到 Azure 的协议。
如果你没有为客户端指定 key
或 sas_token
设置,那么 Elasticsearch 将尝试使用 Azure SDK 中内置的机制,自动从其运行的环境中获取凭据。这非常适合在 Azure 平台上运行 Elasticsearch 时使用。
在 Azure 虚拟机 上运行 Elasticsearch 时,应使用 Azure 托管标识 向 Elasticsearch 提供凭据。要使用 Azure 托管标识,请将适当授权的标识分配给运行 Elasticsearch 的 Azure 虚拟机。
例如,当在 Azure Kubernetes Service 中运行 Elasticsearch 时(例如使用 Elastic Cloud on Kubernetes),应使用 Azure 工作负载标识 向 Elasticsearch 提供凭据。要使用 Azure 工作负载标识,请将 azure-identity-token
卷作为 Elasticsearch 配置目录 的子目录挂载,并将 AZURE_FEDERATED_TOKEN_FILE
环境变量设置为指向挂载卷内的名为 azure-identity-token
的文件。
Azure SDK 还有其他几种机制可以自动从其环境中获取凭据,但上面描述的两种方法是唯一经过测试并支持在 Elasticsearch 中使用的方法。
仓库设置
编辑Azure 仓库支持以下设置,可以在注册 Azure 仓库时指定这些设置,如下所示
resp = client.snapshot.create_repository( name="my_backup", repository={ "type": "azure", "settings": { "client": "secondary", "container": "my_container", "base_path": "snapshots_prefix" } }, ) print(resp)
const response = await client.snapshot.createRepository({ name: "my_backup", repository: { type: "azure", settings: { client: "secondary", container: "my_container", base_path: "snapshots_prefix", }, }, }); console.log(response);
PUT _snapshot/my_backup { "type": "azure", "settings": { "client": "secondary", "container": "my_container", "base_path": "snapshots_prefix" } }
-
client
- 要使用的 Azure 仓库客户端的名称。默认为
default
。 -
container
- 容器名称。在创建仓库之前,必须先创建 azure 容器。默认为
elasticsearch-snapshots
。 -
base_path
-
指定容器中仓库数据的路径。默认为空(根目录)。
在为 Elastic Cloud Enterprise 配置快照仓库时,请勿设置
base_path
。Elastic Cloud Enterprise 会自动为每个部署生成base_path
,以便多个部署可以共享同一个存储桶。 -
chunk_size
- 在快照期间,大文件可以分解为 blob 存储中的多个较小的 blob。除非有明确的原因要限制存储库中 blob 的大小,否则不建议更改此值的默认值。与使用默认值相比,设置低于默认值的值可能会导致在快照创建和恢复操作期间增加对 Azure blob 存储的 API 调用次数,从而使这两个操作都变慢且成本更高。将块大小指定为 字节单位,例如:
10MB
、5KB
、500B
。默认为 Azure blob 存储中 blob 的最大大小,即5TB
。 -
compress
- 设置为
true
时,元数据文件以压缩格式存储。此设置不影响默认情况下已压缩的索引文件。默认为true
。 -
max_restore_bytes_per_sec
- (可选,字节值)每个节点的最大快照恢复速率。默认为无限制。请注意,恢复也会通过 恢复设置 进行限制。
-
max_snapshot_bytes_per_sec
- (可选,字节值)每个节点的最大快照创建速率。默认为每秒
40mb
。请注意,如果设置了 托管服务的恢复设置,则默认为无限制,并且速率还会通过 恢复设置 进行限制。
-
readonly
-
(可选,布尔值)如果为
true
,则存储库为只读。集群可以从存储库检索和恢复快照,但不能写入存储库或在其中创建快照。只有具有写入权限的集群才能在存储库中创建快照。连接到存储库的所有其他集群都应将
readonly
参数设置为true
。如果为
false
,则集群可以写入存储库并在其中创建快照。默认为false
。如果使用多个集群注册同一个快照存储库,则只能有一个集群具有该存储库的写入权限。多个集群同时写入存储库可能会损坏存储库的内容。
-
location_mode
-
primary_only
或secondary_only
。默认为primary_only
。请注意,如果将其设置为secondary_only
,则会强制readonly
为 true。
存储库验证规则
编辑根据容器命名指南,容器名称必须是有效的 DNS 名称,符合以下命名规则
- 容器名称必须以字母或数字开头,并且只能包含字母、数字和破折号 (-) 字符。
- 每个破折号 (-) 字符的前后必须紧跟字母或数字;容器名称中不允许使用连续的破折号。
- 容器名称中的所有字母必须为小写。
- 容器名称的长度必须在 3 到 63 个字符之间。
支持的 Azure 存储帐户类型
Azure 存储库类型适用于所有标准存储帐户
- 标准本地冗余存储 -
Standard_LRS
- 标准区域冗余存储 -
Standard_ZRS
- 标准异地冗余存储 -
Standard_GRS
- 标准读取访问异地冗余存储 -
Standard_RAGRS
高级本地冗余存储 (Premium_LRS
) 不支持,因为它只能用作虚拟机磁盘存储,而不是通用存储。
线性化寄存器实现
编辑Azure 存储库的线性化寄存器实现基于 Azure 对强一致性租约的支持。每个租约在任何时候只能由单个节点持有。该节点在对受保护的 Blob 执行读取或写入操作时会出示其租约。如果租约无效或过期,受租约保护的操作将失败。为了对寄存器执行比较和交换操作,Elasticsearch 首先获取 Blob 的租约,然后在租约下读取 Blob 内容,最后在同一租约下上传更新后的 Blob。此过程确保读取和写入操作以原子方式发生。