本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在亚马逊 OpenSearch 服务中创建索引快照
Amazon S OpenSearch ervice 中的快照是集群索引和状态的备份。状态包含集群设置、节点信息、索引设置和分片分配。
OpenSearch 服务快照有以下形式:
-
自动快照仅用于集群恢复。在发生红色群集状态或数据丢失时,您可以使用它们还原域。有关更多信息,请参阅下面的恢复快照。 OpenSearch 该服务将自动快照存储在预配置的 Amazon S3 存储桶中,无需额外付费。
-
手动快照用于集群恢复或者将数据从一个集群移动到另一个集群。必须启动手动快照。这些快照将存储在您自己的 Amazon S3 存储桶中,收取标准 S3 费用。如果您有来自自管理 OpenSearch 集群的快照,则可以使用该快照迁移到 OpenSearch 服务域。有关更多信息,请参阅迁移到 Amazon OpenSearch 服务。
所有 OpenSearch 服务域都会自动拍摄快照,但频率在以下方面有所不同:
-
对于运行 OpenSearch 或 Elasticsearch 5.3 及更高版本的域名,S OpenSearch ervice 会按小时自动拍摄快照,并将其中最多 336 张快照保留 14 天。由于其增量性质,每小时快照的破坏性较小。如果出现域问题,它们还提供更新的恢复点。
-
对于运行 Elasticsearch 5.1 及更早版本的域名,S OpenSearch ervice 会在您指定的时间内每天自动拍摄快照,最多保留 14 张快照,并且不会将任何快照数据保留超过 30 天。
如果您的集群进入红色状态,则所有自动快照都会失败,而集群状态仍然存在。如果您在两周内未解决问题,则可能会永久丢失集群内的数据。有关问题排查步骤,请参阅红色集群状态。
先决条件
要手动创建快照,您必须使用 IAM 和 Amazon S3。确保您已满足以下先决条件,然后再尝试创建快照。
先决条件 | 描述 |
---|---|
S3 存储桶 | 创建 S3 存储桶以存储 OpenSearch 服务域的手动快照。有关说明,请参阅 Amazon Simple Storage Service 用户指南中的创建存储桶。 记住要在以下位置使用它的存储桶名称:
重要请勿对此存储桶应用 S3 Glacier 生命周期规则。手动快照不支持 S3 Glacier 存储类。 |
IAM 角色 | 创建 IAM 角色以向 OpenSearch 服务委派权限。有关说明,请参阅 IAM 用户指南中的创建 IAM 角色(控制台)。本章剩余部分将此角色称为 附加 IAM policy 将下面的策略附加到
有关附加托管策略的说明,请参阅 IAM 用户指南中的添加 IAM 身份权限。 编辑信任关系 编辑的信任关系
有关编辑信任关系的说明,请参阅 IAM 用户指南中的修改角色信任策略。 |
权限 |
要注册快照存储库,您需要能够传递
如果您的用户或角色没有
|
注册手动快照存储库
您需要先向 S OpenSearch ervice 注册快照存储库,然后才能手动拍摄索引快照。此一次性操作要求您使用允许访问的凭据签署 Amazon 请求TheSnapshotRole
,如中所述先决条件。
步骤 1:在 OpenSearch 仪表板中映射快照角色(如果使用精细的访问控制)
注册存储库时,精细访问控制会引入额外的步骤。即使将 HTTP 基本身份验证用于所有其他目的,也需要将 manage_snapshots
角色映射到具有传递 TheSnapshotRole
的 iam:PassRole
权限的 IAM 角色。
-
导航到您的 OpenSearch 服务域的 OpenSearch 仪表板插件。您可以在 OpenSearch 服务控制台的域控制面板上找到控制面板终端节点。
-
从主菜单中选择安全、角色,然后选择 manage_snapshots 角色。
-
选择映射的用户、管理映射。
-
添加具有传递
TheSnapshotRole
权限的角色的 ARN。将角色 ARN 置于 Backend roles(后端角色)下。arn:aws:iam::
123456789123
:role/role-name
-
选择映射并确认在映射的用户下显示的用户或角色。
第 2 步:注册存储库
以下快照选项卡演示如何注册快照目录。有关在迁移到新域后加密手动快照和注册快照的特定选项,请参阅相关选项卡。
使用示例 Python 客户端
Python 客户端比简单的 HTTP 请求更容易自动化,并且具有更好的可重用性。如果您选择使用此方法注册快照存储库,请将下面的示例 Python 代码保存为 Python 文件,如 register-repo.py
。客户端需要 Amazon SDK for Python (Boto3)
更新示例代码中的以下变量:host
、region
、path
和 payload
。
import boto3 import requests from requests_aws4auth import AWS4Auth host = '' # domain endpoint region = '' # e.g. us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '/_snapshot/
my-snapshot-repo-name
' # the OpenSearch API endpoint url = host + path payload = { "type": "s3", "settings": { "bucket": "s3-bucket-name
", "base_path": "my/snapshot/directory
", "region": "us-west-1
", "role_arn": "arn:aws:iam::123456789012
:role/snapshot-role
" } } headers = {"Content-Type": "application/json"} r = requests.put(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text) # # Take snapshot # # path = '_snapshot/my-snapshot-repo-name/my-snapshot' # url = host + path # # r = requests.put(url, auth=awsauth) # # print(r.text) # # # Delete index # # path = 'my-index' # url = host + path # # r = requests.delete(url, auth=awsauth) # # print(r.text) # # # Restore snapshot (all indexes except Dashboards and fine-grained access control) # # path = '_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = { # "indices": "-.kibana*,-.opendistro_security,-.opendistro-*", # "include_global_state": False # } # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text) # # # Restore snapshot (one index) # # path = '_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = {"indices": "my-index"} # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text)
手动创建快照
快照不是即时发生的。它们需要时间才能完成,并且不能代表集群的完美 point-in-time 视图。当快照正在进行时,您仍可以对文档编制索引并对集群发出其他请求,但新文档(和对现有文档的更新)通常不包含在快照中。快照包括 OpenSearch 启动快照时存在的主分片。根据快照线程池的大小,快照中可能包含时间略有不同的不同分片。有关快照最佳实践,请参阅 提高快照性能。
快照存储和性能
OpenSearch 快照是增量的,这意味着它们仅存储自上次成功快照以来更改的数据。此增量性质意味着频繁快照与不频繁快照之间的磁盘使用率差异通常极其小。换句话说,一周内每小时快照(总共 168 个快照)占用的磁盘空间比一周结束时的一个快照所占用的磁盘空间并不高多少。此外,拍摄快照的频率越高,完成快照所需的时间就更少。例如,每日快照可能需要 20-30 分钟才能完成,而每小时快照可能在几分钟内即可完成。有些 OpenSearch 用户每半小时拍摄一次快照。
拍摄快照
创建参数时,您需要指定以下信息:
-
快照存储库的名称
-
快照名称
为了方便和简洁起见,本章中的示例使用 curl
如果访问策略指定用户或角色,您必须签署快照请求。对于 curl,您可以在 7.75.0 或更高版本中使用 --aws-sigv4
选项
要制作手动快照,请执行以下步骤:
-
如果当前正在制作快照,则您无法制作快照。要进行检查,请运行以下命令:
curl -XGET '
domain-endpoint
/_snapshot/_status' -
运行以下命令来手动创建快照:
curl -XPUT '
domain-endpoint
/_snapshot/repository-name
/snapshot-name
'要包括或排除某些索引并指定其他设置,请添加请求正文。有关请求结构,请参阅 OpenSearch 文档中的拍摄快照
。
注意
拍摄快照所需的时间会随着 OpenSearch 服务域的大小而增加。长时间运行的快照操作有时会遇到以下错误:504 GATEWAY_TIMEOUT
。通常情况下,您可以忽略这些错误并等待操作成功完成。运行以下命令验证您的域中所有快照的状态:
curl -XGET '
domain-endpoint
/_snapshot/repository-name
/_all?pretty'
还原快照
在恢复快照之前,请确保目标域不使用带待机功能的多可用区。启用待机状态会导致恢复操作失败。
警告
如果您使用索引别名,应在删除别名的索引前停止向该别名写入请求(或将别名切换至其他索引)。停止写入请求有助于避免以下情景:
-
您删除某个索引,同时会删除它的别名。
-
对于现已删除的别名的错误写入请求会创建一个与别名同名的新索引。
-
由于与新索引的命名冲突,您无法再使用别名。如果将别名切换到其他索引,请在从快照中还原时指定
"include_aliases": false
。
还原快照
-
确定要还原的快照。确保此索引的所有设置(例如,自定义分析器软件包或分配要求设置)均与域兼容。要查看所有快照存储库,请运行以下命令:
curl -XGET '
domain-endpoint
/_snapshot?pretty'在确定存储库后,您可以运行以下命令查看所有快照:
curl -XGET '
domain-endpoint
/_snapshot/repository-name
/_all?pretty'注意
大多数自动快照存储在
cs-automated
存储库中。如果您的域对静态数据进行加密,这些快照将存储在cs-automated-enc
存储库中。如果您没有看到要查找的手动快照存储库,请确保您已向域注册该存储库。 -
(可选)如果群集上的索引与快照中的索引之间存在命名冲突,请删除或重命名 OpenSearch 服务域中的一个或多个索引。您无法将索引的快照还原到已包含同名索引的 OpenSearch 集群中。
如果索引命名冲突,您可以使用以下选项:
-
删除现有 OpenSearch 服务域上的索引,然后恢复快照。
-
从快照还原索引时为其重命名,之后为它们重新编制索引。
-
将快照还原到不同的 OpenSearch 服务域(只能使用手动快照)。
以下命令将删除域中的所有现有索引:
curl -XDELETE '
domain-endpoint
/_all'但是,如果您不打算还原所有索引,则可以仅删除一个索引:
curl -XDELETE '
domain-endpoint
/index-name
' -
-
要还原快照,请运行以下命令:
curl -XPOST '
domain-endpoint
/_snapshot/repository-name
/snapshot-name
/_restore'由于 OpenSearch 仪表板上的特殊权限和精细的访问控制索引,尝试恢复所有索引可能会失败,尤其是在您尝试从自动快照还原时。以下示例通过
my-index
快照存储库中的2020-snapshot
来只还原一个索引cs-automated
:curl -XPOST '
domain-endpoint
/_snapshot/cs-automated/2020-snapshot/_restore' \ -d '{"indices": "my-index"}' \ -H 'Content-Type: application/json'您还可能需要还原除控制面板和精细访问控制索引以外的所有索引:
curl -XPOST '
domain-endpoint
/_snapshot/cs-automated/2020-snapshot/_restore' \ -d '{"indices": "-.kibana*,-.opendistro*"}' \ -H 'Content-Type: application/json'使用
rename_pattern
和rename_replacement
参数,即可在不删除快照数据的情况下恢复快照。有关这些参数的更多信息,请参阅 OpenSearch 文档中的恢复快照 API 请求字段和示例请求 。
注意
如果并非所有主分片都适用于涉及的索引,则快照的 state
可能为 PARTIAL
。此值表示未成功存储至少一个分片中的数据。您仍可以从部分快照进行还原,但可能需要使用较旧的快照来还原任何缺失的索引。
删除手动快照
要删除手动快照,运行下列命令:
DELETE _snapshot/
repository-name
/snapshot-name
使用快照管理自动处理快照
您可以在 OpenSearch 控制面板中设置快照管理 (SM) 策略,以自动创建和删除定期快照。SM 可以为一组索引创建快照,而索引状态管理只能为每个索引创建一个快照。要在 OpenSearch 服务中使用 SM,您需要注册自己的 Amazon S3 存储库。有关注册存储库的说明,请参阅注册手动快照存储库。
在 SM 之前,S OpenSearch ervice 提供免费的自动快照功能,默认情况下该功能仍处于开启状态。此功能将快照发送到服务维护 cs-*
存储库。要停用此功能,请与 Amazon Web Services Support联系。
有关 SM 功能的更多信息,请参阅 OpenSearch 文档中的快照管理
SM 目前不支持基于多种索引类型创建快照。例如,如果尝试基于多个包含 *
的索引创建快照且部分索引位于暖层,则快照创建将失败。如果需要快照包含多种索引类型,请使用 ISM 快照操作
配置 权限
如果您要从以前的 OpenSearch 服务域版本升级到 2.5,则可能无法在该域上定义快照管理安全权限。必须将非管理员用户映射到此角色,才能通过精细访问控制在域上使用快照管理。要手动创建快照管理角色,请执行下列步骤:
-
在 “ OpenSearch 控制面板” 中,转至 “安全”,然后选择 “权限”。
-
选择创建操作组并配置以下组:
组名 权限 snapshot_management_full_access
-
cluster:admin/opensearch/snapshot_management/*
-
cluster:admin/opensearch/notifications/feature/publish
-
cluster:admin/repository/*
-
cluster:admin/snapshot/*
snapshot_management_read_access
-
cluster:admin/opensearch/snapshot_management/policy/get
-
cluster:admin/opensearch/snapshot_management/policy/search
-
cluster:admin/opensearch/snapshot_management/policy/explain
-
cluster:admin/repository/get
-
cluster:admin/snapshot/get
-
-
选择角色和创建角色。
-
将角色命名为 snapshot_management_role。
-
对于集群权限,选择
snapshot_management_full_access
和snapshot_management_read_access
。 -
选择 创建。
-
创建角色之后,将其映射到将管理快照的任何用户或后端角色。
注意事项
配置快照管理时,请考虑以下事项:
-
每个存储库允许使用一个策略。
-
一个策略最多允许 400 个快照。
-
如果域名处于红色状态、JVM 压力过高(85% 或以上)或快照功能卡住,则无法运行此功能。当集群的整体索引和搜索性能受到影响时,SM 也可能受到影响。
-
只有完成上一个快照操作后才能开始下一个快照操作,因此无法通过一项策略激活并发快照操作。
-
如果多个策略采用相同的计划,可能会导致资源激增。如果策略的快照索引重叠,则只能按顺序运行分片级别快照操作,因而可能引发级联性能问题。如果多个策略共享一个存储库,则该存储库的写入操作将激增。
-
除非存在特殊用例,否则我们建议您将快照操作自动化时间间隔设置为每小时不超过一次。
使用索引状态管理自动执行快照
您可以使用索引状态管理(ISM)snapshot
操作,以根据索引的年龄、大小或文档数量的变化自动触发索引快照。如果需要为每个索引创建一个快照,ISM 是最佳选择。如果需要为一组索引创建快照,请参阅 使用快照管理自动处理快照。
要在 OpenSearch 服务中使用 SM,您需要注册自己的 Amazon S3 存储库。有关使用snapshot
操作的 ISM 示例,请参阅示例策略。
将 Curator 用于快照
如果 ISM 不适用于索引和快照管理,则可以改用 Curator。它提供了高级筛选功能,可帮助简化复杂集群上的任务。使用 pip
pip install elasticsearch-curator
您可以使用 Curator 作为命令行界面 (CLI) 或 Python API。如果您使用 Python API,则必须使用旧式 elasticsearch-py
如果您使用 CLI,请在命令行处导出您的凭证并配置 curator.yml
,如下所示:
client: hosts: search-
my-domain
.us-west-1
.es.amazonaws.com port: 443 use_ssl: True aws_region:us-west-1
aws_sign_request: True ssl_no_validate: False timeout: 60 logging: loglevel: INFO