升级 Amazon OpenSearch Service 域 - Amazon Opensearch Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

升级 Amazon OpenSearch Service 域

注意

服务软件更新不同于 OpenSearch 和 Elasticsearch 版本升级。有关为您的 OpenSearch Service 域更新服务软件的信息,请参阅 Amazon OpenSearch Service 中的服务软件更新

Amazon OpenSearch Service 为运行 OpenSearch 1.0 或更高版本或 Elasticsearch 5.1 或更高版本的域提供了就地升级。如果您使用 Amazon Kinesis Data Firehose 或 Amazon CloudWatch Logs 等服务将数据流式传输至 OpenSearch Service,请在迁移前检查这些服务是否支持较新版本的 OpenSearch。

支持的升级途径

当前,OpenSearch Service 支持以下升级路径。

之前版本 目标版本
OpenSearch 1.3

OpenSearch 2.3

版本 2.3 具有以下重大更改:

  • 在版本 2.0 中,从所有 OpenSearch API 端点中移除了 type 参数。有关更多信息,请参阅 breaking changes(重大更改)。

  • Kinesis Data Firehose 目前不支持将运行版本 2.3 的域作为目标。如果您需要接收来自 Kinesis Data Firehose 的数据,我们建议您等到它受支持后,再将您的域升级到 2.3。

  • 如果您的域包含最初在 Elasticsearch 6.8 中创建的任何索引(热索引、UltraWarm 索引或冷索引),则这些索引与 OpenSearch 2.3 不兼容。

    在升级到版本 2.3 之前,必须为不兼容的索引重新编制索引。对于不兼容的 UltraWarm 索引或冷索引,请将它们迁移到热存储,重新索引数据,然后再将它们迁移回暖存储或冷存储。或者,如果您不再需要索引,可以删除它们。

    如果您意外将域升级到版本 2.3,而没有先执行这些步骤,则无法将不兼容的索引从其当前存储层迁移出去。您唯一的选择是删除它们。

OpenSearch 1.x OpenSearch 1.x
Elasticsearch 7.x

Elasticsearch 7.x或 OpenSearch 1.x

重要

OpenSearch 1.x 引入了许多突破性的变更。有关详细信息,请参阅 Amazon OpenSearch Service 重命名:更改摘要

Elasticsearch 6.8

Elasticsearch 7.x或 OpenSearch 1.x

重要

Elasticsearch 7.0 和 OpenSearch 1.0 包含许多突发性更改。启动就地升级之前,我们建议拍摄 6.x 域的手动快照并在测试 7.x 域或 OpenSearch 1.x 中还原,然后使用该测试域来识别潜在的升级问题。有关 OpenSearch 1.0 中的突破性变更,请参阅 Amazon OpenSearch Service 重命名:更改摘要

与 Elasticsearch 6.x 相似,索引只能包含一种映射类型,但该类型现在必须名为 _doc。因此,特定 API 在请求正文中不再需要映射类型(例如 _bulk API)。

对于新索引,自托管 Elasticsearch 7.x 和 OpenSearch 1.x 具有默认分片计数 1。在 Elasticsearch 7.x上的 OpenSearch Service 域和更高版本后保留之前的原定设置值 5。

Elasticsearch 6.x

Elasticsearch 6.x

Elasticsearch 5.6

Elasticsearch 6.x

重要

在版本 6.x 中创建的索引不再支持多个映射类型。在版本 5.x 中创建的索引在还原到 6.x 集群后仍然支持多个映射类型。请检查您的代码是否仅为每个索引创建一个映射类型。

为了在从 Elasticsearch 5.6 到 6.x 的升级过程中最大程度地减少停机时间,OpenSearch Service 将 .kibana 索引重建为 .kibana-6,删除了 .kibana,创建了一个名为 .kibana 的别名,并将新索引映射到新别名。

Elasticsearch 5.x Elasticsearch 5.x

升级过程包括三个步骤:

  1. 升级前检查 – OpenSearch Service 检查可能阻碍升级的问题,除非这些检查成功,否则不会继续下一步。

  2. 快照 - OpenSearch Service 拍摄 OpenSearch 或 Elasticsearch 集群的快照,除非快照拍摄成功,否则不会继续下一步。如果升级失败,OpenSearch Service 将使用此快照将集群还原到其原始状态。有关更多信息,请参阅升级后无法降级

  3. 升级 - OpenSearch Service 开始升级,这可能需要 15 分钟到几个小时才能完成。OpenSearch 控制面板可能在部分或全部升级中不可用。

开始升级(控制台)

升级过程是不可撤消的,并且无法暂停或取消。在升级过程中,您无法对域进行配置更改。在开始升级之前,请仔细确认您是否要继续。您可以使用这些相同步骤执行升级前检查而不实际开始升级。

如果集群具有专用主节点,则无需停机即可完成 OpenSearch 升级。否则,集群在选择主节点时可能会在升级后几秒钟无响应。

将域升级到更高版本的 OpenSearch 或 Elasticsearch
  1. 创建您的域的手动快照。此快照用作备份,如果需要恢复为使用之前的 OpenSearch 版本,您可以在新域上恢复

  2. 转至 http://aws.amazon.com,然后选择登录到控制台

  3. Analytics 下,选择 Amazon OpenSearch Service

  4. 在导航窗格中的 Domains(域)下,选择要升级的域。

  5. 选择 Actions(操作)Upgrade(升级)

  6. 选择要升级到的版本。如果要升级到 OpenSearch 版本,出现启用兼容模式选项。如果启用此设置,OpenSearch 会将其版本报告为 7.10,以允许 Elasticsearch OSS 客户端和插件(如日志记录)继续使用 Amazon OpenSearch Service。可以稍后禁用此设置

  7. 选择 Upgrade

  8. 检查域控制面板上的 Status(状态)以监控升级的状态。

开始升级(CLI)

您可以通过以下操作为您的域识别正确版本的 OpenSearch 或 Elasticsearch,启动就地升级,执行升级前检查,并查看进度:

  • get-compatible-versions (GetCompatibleVersions)

  • upgrade-domain (UpgradeDomain)

  • get-upgrade-status (GetUpgradeStatus)

  • get-upgrade-history (GetUpgradeHistory)

有关更多信息,请参阅 Amazon CLI 命令参考Amazon OpenSearch Service API 参考

开始升级(SDK)

此示例使用 Amazon SDK for Python (Boto) 中的 OpenSearchService 低级别 Python 客户端,以检查域是否符合升级到特定版本的条件,对其进行升级,并持续检查升级状态。

import boto3 from botocore.config import Config import time # Build the client using the default credential configuration. # You can use the CLI and run 'aws configure' to set access key, secret # key, and default Region. DOMAIN_NAME = '' # The name of the domain to upgrade TARGET_VERSION = '' # The version you want to upgrade the domain to. For example, OpenSearch_1.1 my_config = Config( # Optionally lets you specify a Region other than your default. region_name='us-east-1' ) client = boto3.client('opensearch', config=my_config) def check_versions(): """Determine whether domain is eligible for upgrade""" response = client.get_compatible_versions( DomainName=DOMAIN_NAME ) compatible_versions = response['CompatibleVersions'] for i in range(len(compatible_versions)): if TARGET_VERSION in compatible_versions[i]["TargetVersions"]: print('Domain is eligible for upgrade to ' + TARGET_VERSION) upgrade_domain() print(response) else: print('Domain not eligible for upgrade to ' + TARGET_VERSION) def upgrade_domain(): """Upgrades the domain""" response = client.upgrade_domain( DomainName=DOMAIN_NAME, TargetVersion=TARGET_VERSION ) print('Upgrading domain to ' + TARGET_VERSION + '...' + response) time.sleep(5) wait_for_upgrade() def wait_for_upgrade(): """Get the status of the upgrade""" response = client.get_upgrade_status( DomainName=DOMAIN_NAME ) if (response['UpgradeStep']) == 'UPGRADE' and (response['StepStatus']) == 'SUCCEEDED': print('Domain successfully upgraded to ' + TARGET_VERSION) elif (response['StepStatus']) == 'FAILED': print('Upgrade failed. Please try again.') elif (response['StepStatus']) == 'SUCCEEDED_WITH_ISSUES': print('Upgrade succeeded with issues') elif (response['StepStatus']) == 'IN_PROGRESS': time.sleep(30) wait_for_upgrade() def main(): check_versions() if __name__ == "__main__": main()

对验证失败进行故障排除

启动 OpenSearch 或 Elasticsearch 版本升级时,OpenSearch Service 首先执行一系列验证检查,以确保您的域符合升级条件。如果其中任何一项检查失败,您将收到通知,其中包含在升级域之前必须修复的特定问题。有关潜在问题及其解决步骤的列表,请参阅 对验证错误进行故障排除

排查升级问题

就地 升级需要正常运行的域。您的域可能不符合升级条件或出于各种原因无法升级。下表显示了最常见的问题。

问题 描述
一个节点的分片过多 OpenSearch 和 Elasticsearch 7.x 版本的 的原定设置为每个节点不超过 1,000 个分片。如果当前集群中的节点超过了此设置,OpenSearch Service 不允许您升级。有关问题排查选项,请参阅超过最大分片限制
域正在处理中 域正在接受配置更改。在操作完成后检查升级资格。
红色集群状态 集群中的一个或多个索引为红色。有关问题排查步骤,请参阅红色集群状态
高错误率 在尝试处理请求时,集群返回大量 5xx 错误。此问题通常是因为同时读取或写入了过多的请求。请考虑减少流向集群的流量或扩展您的域。
裂脑 脑裂意味着您的集群有多个主节点并且已拆分成两个绝不会自行重新联接的集群。您可以通过使用推荐数量的专用主节点避免裂脑。为了帮助您从裂脑恢复,请联系 Amazon Web Services Support
找不到主节点 OpenSearch Service 无法找到集群的主节点。如果您的域使用了多 AZ,一个可用区故障可能已导致集群失去仲裁节点数且无法选择新的主节点。如果该问题无法自行解决,请联系 Amazon Web Services Support
待处理任务过多 主节点处于高负载状态,且具有很多待处理任务。请考虑减少流向集群的流量或扩展您的域。
存储卷受损 一个或多个节点的磁盘卷无法正常运行。此问题通常与其他问题一起发生,例如高错误率或待处理任务过多。如果它是独立发生的且无法自行解决,请联系 Amazon Web Services Support
KMS 密钥问题 用于加密域的 KMS 密钥无法访问或丢失。有关更多信息,请参阅监控对静态数据进行加密的域
快照拍摄正在进行中 域当前正在拍摄快照。在快照拍摄完成后检查升级资格。还要检查您是否可以列出手动快照存储库,在这些存储库中列出快照,并拍摄手动快照。如果 OpenSearch Service 无法检查快照拍摄是否正在进行中,升级可能会失败。
快照拍摄超时或失败 升级前快照拍摄所需的时间过长或失败。检查集群运行状况并重试。如果问题仍存在,请联系 Amazon Web Services Support
索引不兼容 一个或多个索引与目标版本不兼容。如果您从较旧版本的 OpenSearch 或 Elasticsearch 迁移索引,则可能出现此问题。重建索引并重试。
高磁盘使用率 集群的磁盘使用率高于 90%。删除数据或扩展域,然后重试。
高 JVM 使用率 JVM 内存压力高于 75%。减少流向集群的流量或扩展域,然后重试。
Open Ssearch 控制面板别名问题 .kibana 已被配置为一个别名并映射到不兼容的索引,可能是来自早期版本的 OpenSearch 控制面板的索引。重建索引,然后重试。
红色控制面板状态 Opensearch 控制面板状态为红色。尝试在升级完成时使用控制面板。如果红色状态仍然存在,请手动解决该问题,然后重试。
跨集群兼容性

仅当升级之后源域与目标域之间保持跨集群兼容性时,才能升级。在升级过程中,会识别任何不兼容的连接。要继续,请删除远程域或删除不兼容的连接。请注意,如果域上的复制处于活动状态,则在删除连接后无法恢复复制。

其他 OpenSearch Service 服务问题 OpenSearch Service 本身的问题可能会导致您的域显示没有升级资格。如果上述情况都不适用于您的域且该问题持续超过一天,请联系 Amazon Web Services Support

使用快照迁移数据

就地升级是将域升级到更高的 OpenSearch 或 Elasticsearch 版本的更方便、更快捷、更可靠的方法。如果您需要从 5.1 之前的 Elasticsearch 版本迁移或想要迁移到全新的集群,那么快照是一个很好的选择。

下表显示了如何使用快照将数据迁移到使用不同 OpenSearch 或 Elasticsearch的 版本的域。有关制作和还原快照的更多信息,请参阅在 Amazon OpenSearch Service 中创建索引快照

之前版本 目标版本 迁移过程
Elasticsearch 6.x 或 7.x OpenSearch 1.x
  1. 请查看 OpenSearch 1.0 的重大更改,了解是否需要对索引或应用程序做出调整。有关其他注意事项,请参阅升级 Amazon OpenSearch Service 域 中的表。

  2. 创建 Elasticsearch 7.x 或 6.x域的手动快照。

  3. 创建 Opensearch 1.x域。

  4. 将快照从 Elasticsearch 域还原到 Opensearch 域。在操作期间,您可能需要在新名称下还原 .kibana 索引:

    POST _snapshot/<repository-name>/<snapshot-name>/_restore { "indices": "*", "ignore_unavailable": true, "rename_pattern": ".kibana", "rename_replacement": ".backup-kibana" }

    然后,您可以在新域上为 .backup-kibana 重新建立索引,并为其分配别名 .kibana

  5. 如果您不再需要您的原始域,请将其删除。否则,您仍需为该域付费。

Elasticsearch 6.x Elasticsearch 7.x
  1. 请查看 7.0 的重大更改,了解是否需要对索引或应用程序做出调整。有关其他注意事项,请参阅升级 Amazon OpenSearch Service 域 中的表。

  2. 创建 6.x 域的手动快照。

  3. 创建 7.x 域。

  4. 将快照从原始域还原到 7.x 域。在操作期间,您可能需要在新名称下还原 .kibana 索引:

    POST _snapshot/<repository-name>/<snapshot-name>/_restore { "indices": "*", "ignore_unavailable": true, "rename_pattern": ".kibana", "rename_replacement": ".backup-kibana" }

    然后,您可以在新域上为 .backup-kibana 重新建立索引,并为其分配别名 .kibana

  5. 如果您不再需要您的原始域,请将其删除。否则,您仍需为该域付费。

Elasticsearch 6.x Elasticsearch 6.8
  1. 创建 6.x 域的手动快照。

  2. 创建 6.8 域。

  3. 将快照从原始域还原到 6.8 域。

  4. 如果您不再需要您的原始域,请将其删除。否则,您仍需为该域付费。

Elasticsearch 5.x Elasticsearch 6.x
  1. 请查看 6.0 的重大更改,了解是否需要对索引或应用程序做出调整。有关其他注意事项,请参阅升级 Amazon OpenSearch Service 域 中的表。

  2. 创建 5.x 域的手动快照。

  3. 创建 6.x 域。

  4. 将快照从原始域还原到 6.x 域。

  5. 如果您不再需要 5.x 域,请将其删除。否则,您仍需为该域付费。

Elasticsearch 5.x Elasticsearch 5.6
  1. 创建 5.x 域的手动快照。

  2. 创建 5.6 域。

  3. 将快照从原始域还原到 5.6 域。

  4. 如果您不再需要您的原始域,请将其删除。否则,您仍需为该域付费。

Elasticsearch 2.3 Elasticsearch 6.x

Elasticsearch 2.3 快照与 6.x 不兼容。要将您的数据直接从 2.3 迁移到 6.x,则必须在新域中手动重新创建您的索引。

或者,您也可以执行本表中从 2.3 迁移到 5.x 的步骤,在新的 5.x 域中执行 _reindex 操作以将 2.3 索引转换为 5.x 索引,然后执行从 5.x 迁移到 6.x 的步骤。

Elasticsearch 2.3 Elasticsearch 5.x
  1. 请查看 5.0 的重大更改,了解是否需要对索引或应用程序做出调整。

  2. 创建 2.3 域的手动快照。

  3. 创建 5.x 域。

  4. 将快照从 2.3 域还原到 5.x 域。

  5. 如果您不再需要 2.3 域,请将其删除。否则,您仍需为该域付费。

Elasticsearch Elasticsearch 5.x

1.5 快照与 5.x 不兼容。要将您的数据从 1.5 迁移到 5.x,则必须在新域中手动重新创建您的索引。

重要

1.5 快照与 2.3 兼容,但 OpenSearch Service 2.3 域不支持 _reindex 操作。由于您无法为它们重新编制索引,因此 1.5 域中发出的索引仍无法从 2.3 快照还原到 5.x 域。

Elasticsearch Elasticsearch 2.3
  1. 使用迁移插件了解是否可以直接升级到 2.3 版。您可能需要在迁移前对数据进行更改。

    1. 在 Web 浏览器中,打开 http://domain-endpoint/_plugin/migration/

    2. 选择立即运行检查

    3. 检查结果,如果需要,按照说明更改您的数据。

  2. 创建 1.5 域的手动快照。

  3. 创建 2.3 域。

  4. 将快照从 1.5 域还原到 2.3 域。

  5. 如果您不再需要 1.5 域,请将其删除。否则,您仍需为该域付费。