Azure 存储库
编辑Azure 存储库编辑
您可以使用 Azure Blob 存储 作为 快照/恢复 的存储库。
设置编辑
要启用 Azure 存储库,您必须先将 Azure 存储设置定义为 安全设置。
您可以在节点启动之前定义这些设置,或者在定义设置后调用 节点重新加载安全设置 API 以将它们应用于正在运行的节点。
bin/elasticsearch-keystore add azure.client.default.account bin/elasticsearch-keystore add azure.client.default.key
请注意,您还可以定义多个帐户
bin/elasticsearch-keystore add azure.client.default.account bin/elasticsearch-keystore add azure.client.default.key bin/elasticsearch-keystore add azure.client.secondary.account bin/elasticsearch-keystore add azure.client.secondary.sas_token
有关这些设置的更多信息,请参阅 客户端设置。
支持的 Azure 存储帐户类型
Azure 存储库类型适用于所有标准存储帐户
- 标准本地冗余存储 -
Standard_LRS
- 标准区域冗余存储 -
Standard_ZRS
- 标准异地冗余存储 -
Standard_GRS
- 标准读取访问异地冗余存储 -
Standard_RAGRS
高级本地冗余存储 (Premium_LRS
) 不受支持,因为它只能用作 VM 磁盘存储,而不能用作通用存储。
客户端设置编辑
您用来连接到 Azure 的客户端有许多可用的设置。这些设置的格式为 azure.client.CLIENT_NAME.SETTING_NAME
。默认情况下,azure
存储库使用名为 default
的客户端,但这可以使用 存储库设置 client
进行修改。例如
PUT _snapshot/my_backup { "type": "azure", "settings": { "client": "secondary" } }
大多数客户端设置都可以添加到 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
帐户的客户端超时为每次尝试 10 秒
,在失败之前重试 7
次。端点后缀为 core.chinacloudapi.cn
,secondary
帐户的客户端超时为每次尝试 30 秒
,在失败之前重试 3
次。
account
、key
和 sas_token
存储设置是可重新加载的安全设置,您可以将它们添加到 Elasticsearch 密钥库中。有关创建和更新 Elasticsearch 密钥库的更多信息,请参阅 安全设置。重新加载设置后,用于传输快照的内部 Azure 客户端将使用密钥库中的最新设置。
正在进行的快照或恢复作业不会因存储安全设置的 重新加载 而被抢占。它们将使用操作启动时构建的客户端完成。
以下列表包含可用的客户端设置。必须存储在密钥库中的设置标记为“安全”;其他设置属于 elasticsearch.yml
文件。
-
account
(安全,可重新加载) - 存储库的内部 Azure 客户端使用的 Azure 帐户名称。
-
endpoint_suffix
- 要连接到的 Azure 端点后缀。默认值为
core.windows.net
。 -
key
(安全,可重新加载) - 存储库的内部 Azure 客户端使用的 Azure 密钥。或者,使用
sas_token
。 -
max_retries
- Azure 请求失败时使用的重试次数。此设置有助于控制指数退避策略。它指定在快照失败之前必须发生的重试次数。默认值为
3
。初始退避时间段由 Azure SDK 定义为30 秒
。因此,在第一次超时或失败后,将等待30 秒
才会重试。最大退避时间段由 Azure SDK 定义为90 秒
。 -
proxy.host
- 要通过其连接到 Azure 的代理的主机名。例如:
azure.client.default.proxy.host: proxy.host
。 -
proxy.port
- 要通过其连接到 Azure 的代理的端口。例如,
azure.client.default.proxy.port: 8888
。 -
proxy.type
- 为客户端注册代理类型。支持的值为
direct
、http
和socks
。例如:azure.client.default.proxy.type: http
。当proxy.type
设置为http
或socks
时,还必须提供proxy.host
和proxy.port
。默认值为direct
。 -
sas_token
(安全,可重新加载) - 存储库的内部 Azure 客户端用于身份验证的共享访问签名 (SAS) 令牌。SAS 令牌必须对存储库基路径及其所有内容具有读取 (r)、写入 (w)、列出 (l) 和删除 (d) 权限。必须为 blob 服务 (b) 授予这些权限,并且这些权限适用于资源类型服务 (s)、容器 (c) 和对象 (o)。或者,使用
key
。 -
timeout
- 对 Azure 的任何单个请求的客户端超时。该值应指定时间单位。例如,值
5s
指定 5 秒超时。没有默认值,这意味着 Elasticsearch 使用 Azure 客户端设置的 默认值(已知为 5 分钟)。此设置可以全局定义,也可以按帐户定义,或者两者都定义。 -
endpoint
- 要连接到的 Azure 端点。它必须包含用于连接到 Azure 的协议。
-
secondary_endpoint
- 要连接到的 Azure 辅助端点。它必须包含用于连接到 Azure 的协议。
存储库设置编辑
Azure 存储库支持以下设置
-
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。
一些使用脚本的示例
# The simplest one PUT _snapshot/my_backup1 { "type": "azure" } # With some settings PUT _snapshot/my_backup2 { "type": "azure", "settings": { "container": "backup-container", "base_path": "backups", "chunk_size": "32MB", "compress": true } } # With two accounts defined in elasticsearch.yml (my_account1 and my_account2) PUT _snapshot/my_backup3 { "type": "azure", "settings": { "client": "secondary" } } PUT _snapshot/my_backup4 { "type": "azure", "settings": { "client": "secondary", "location_mode": "primary_only" } }
使用 Java 的示例
client.admin().cluster().preparePutRepository("my_backup_java1") .setType("azure").setSettings(Settings.builder() .put(Storage.CONTAINER, "backup-container") .put(Storage.CHUNK_SIZE, new ByteSizeValue(32, ByteSizeUnit.MB)) ).get();
存储库验证规则编辑
根据 容器命名指南,容器名称必须是有效的 DNS 名称,符合以下命名规则
- 容器名称必须以字母或数字开头,并且只能包含字母、数字和短划线 (-) 字符。
- 每个短划线 (-) 字符前后必须紧跟一个字母或数字;容器名称中不允许出现连续的短划线。
- 容器名称中的所有字母必须为小写。
- 容器名称的长度必须为 3 到 63 个字符。
线性化寄存器实现编辑
Azure 存储库的可线性化寄存器实现基于 Azure 对强一致性租约的支持。每个租约在任何时候都只能由一个节点持有。节点在对受保护的 Blob 执行读或写操作时会出示其租约。如果租约无效或过期,则受租约保护的操作将失败。要在寄存器上执行比较和交换操作,Elasticsearch 首先获取 Blob 的租约,然后在租约下读取 Blob 内容,最后在同一租约下上传更新后的 Blob。此过程可确保读取和写入操作以原子方式进行。