使用应用程序恢复控制器管理 EMR 集群的多可用区失效转移 - AWS 规范指引

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用应用程序恢复控制器管理 EMR 集群的多可用区失效转移

Aarti Rajput、Ashish Bhatt、Neeti Mishra 和 Nidhi Sharma,Amazon Web Services

Summary

此模式可为 Amazon EMR 工作负载提供有效的灾难恢复策略,帮助确保单个 AWS 区域内多个可用区之间的高可用性和数据一致性。该设计使用 Amazon 应用程序恢复控制器应用程序负载均衡器,为基于 Apache Spark 的 EMR 集群管理失效转移操作和流量分配。

在标准条件下,主可用区托管活动的 EMR 集群和具有完整 read/write 功能的应用程序。如果可用区意外发生故障,流量将自动重定向到辅助可用区,并在那里启动一个新的 EMR 集群。两个可用区均通过专用的网关端点访问共享的 Amazon Simple Storage Service(Amazon S3)存储桶,从而确保数据管理的一致性。这种方法可以最大限度地减少停机时间,并在可用区发生故障时快速恢复关键的大数据工作负载。解决方案适用于金融、零售等实时分析至关重要的行业。

先决条件和限制

先决条件

限制

产品版本

架构

目标技术堆栈

  • Amazon EMR 集群

  • Amazon Application Recovery Controller

  • 应用程序负载均衡器

  • 亚马逊 S3 存储桶

  • 适用于 Amazon S3 的网关端点

目标架构

含应用程序恢复控制器的自动恢复机制的架构。

此架构通过使用多个可用区,并借助应用程序恢复控制器实施自动化恢复机制,提供应用程序弹性。

  1. 应用程序负载均衡器将流量路由到活动的 Amazon EMR 环境,通常是主可用区中的主 EMR 集群。

  2. 活动的 EMR 集群处理应用程序请求,并通过其专用 Amazon S3 网关端点连接到 Amazon S3,以进行读取和写入操作。

  3. Amazon S3 充当中央数据存储库,可能用作检查点或 EMR 集群之间的共享存储区。EMR 集群通过 s3:// 协议和 EMR 文件系统(EMRFS)直接写入 Amazon S3 时可以保持数据一致性。

  4. 应用程序恢复控制器持续监控主可用区的运行状况,并在必要时自动管理失效转移操作。

  5. 如果应用程序恢复控制器在主 EMR 集群中检测到故障,将采取以下措施:

    • 启动失效转移到可用区 2 中的辅助 EMR 集群的过程。

    • 更新路由配置以将流量定向至辅助集群。

工具

AWS 服务

  • Amazon 应用程序恢复控制器可帮助您管理和协调跨 AWS 区域 可用区的应用程序恢复。通过减少传统工具和流程所需的手动步骤,此服务简化了流程并提高了应用程序恢复的可靠性。

  • 应用程序负载均衡器在应用程序层运行,这是开放系统互连(OSI)模型的第 7 层。它在多个可用区中的多个目标(例如 EC2 实例)之间分配传入的应用程序流量。这将提高应用程序的可用性。

  • AWS Command Line Interface (AWS CLI) 是一个开源工具,可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。

  • Amazon EMR 是一个大数据平台,可为 Apache Spark、Apache Hive、Presto 等开源框架提供数据处理、交互式分析和机器学习功能。

  • AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。

  • Amazon S3 提供了一个简单 Web 服务接口,可用于随时随地存储和检索任何数量的数据。借助此服务,您可以轻松构建利用云原生存储的应用程序。

  • Amazon S3 的网关终端节点是您在路由表中指定的网关,用于通过 AWS 网络从您的虚拟私有云 (VPC) 访问 Amazon S3。

最佳实践

操作说明

Task说明所需技能

登录到 AWS 管理控制台。

以 IAM 用户身份登录 AWS 管理控制台。有关说明,请参阅 AWS 文档

AWS DevOps

配置 AWS CLI。

安装 AWS CLI 或将其更新到最新版本,以便可以在 AWS 服务 中进行交互 AWS 管理控制台。有关说明,请参阅 AWS CLI 文档

AWS DevOps
Task说明所需技能

创建 S3 存储桶。

  1. 创建 S3 存储桶,用于存储输入数据集、日志、应用程序和输出数据。有关说明,请参阅 Amazon S3 文档

  2. 将存储桶整理到不同的文件夹中,分别用于存放输入数据 (dataset)、日志 (logs)、Spark 应用程序 (spark-app) 和输出数据 (output)。

AWS DevOps

创建 EMR 集群。

  1. 使用以下 AWS CLI 命令创建一个 EMR 集群(例如,版本 6.12 或更高版本),其实例跨越两个可用区(例如us-east-1aus-east-1b),以实现高可用性。命令以 m4.large 实例类型为例进行说明。

    aws emr create-cluster \ --ec2-attributes AvailabilityZone=<AZ-name-1> \ --release-label emr-6.12.0 \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large
    aws emr create-cluster \ --ec2-attributes AvailabilityZone=<AZ-name-2> \ --release-label emr-6.12.0 \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large

    有关更多信息,请参阅 create-cluster 命令Amazon EMR 文档

  2. 根据需要提供具备所需权限的密钥对、服务角色和实例配置文件。

AWS DevOps

配置 EMR 集群的安全设置。

  1. 使用 d AWS CLI es cribe-cluster 命令识别与 EMR 集群的主节点关联的安全组:

    aws emr describe-cluster --cluster-id j-XXXXXXXX
  2. 要增强安全性,请修改安全组设置以允许 SSH 访问主节点(TCP 端口 22),但仅限于您的特定 IP 地址。

    有关更多信息,请参阅 Amazon EMR 文档

AWS DevOps

连接到 EMR 集群。

使用所提供的密钥对,通过 SSH 连接到 EMR 集群的主节点。

请确保密钥对文件与您的应用程序位于同一目录下。

运行以下命令为密钥对设置正确的权限并建立 SSH 连接:

chmod 400 <key-pair-name> ssh -i ./<key-pair-name> hadoop@<master-node-public-dns>
AWS DevOps

部署 Spark 应用程序。

建立 SSH 连接后,您将进入 Hadoop 控制台。

  1. 使用 vim 之类的文本编辑器创建或编辑 Spark 应用程序文件 (main.py):

    vim main.py

    有关创建和修改 Spark 应用程序的更多信息,请参阅 Amazon EMR 文档

  2. 将 Spark 应用程序提交至 EMR 集群,在 S3 存储桶中指定输入数据和输出数据的位置:

    spark-submit main.py —data_source <input-data-folder-in-s3> —output_uri <output-folder-in-s3>

    以下是基于您之前设置的文件夹的示例:

    spark-submit main.py —data_source dataset —output_uri output
  3. 检查应用程序日志以监控应用程序的进度:

    yarn logs -applicationId <application-id>
AWS DevOps

监控 Spark 应用程序。

  1. 打开另一个终端窗口,并建立到 EMR 集群资源管理器 Web UI 的 SSH 隧道:

    ssh -i <key-pair-name> -N -L 8157:<resource-manager-public-dns>:8088 hadoop@<resource-manager-public-dns>
  2. 要监控应用程序,请在 Web 浏览器中导航到 http://localhost:8157,以访问资源管理器 Web UI。

AWS DevOps
Task说明所需技能

创建应用程序负载均衡器。

在 AWS 区域内设置目标组,在跨两个可用区的 Amazon EMR 主节点之间路由流量。

有关说明,请参阅弹性负载均衡文档中的为应用程序负载均衡器创建目标组

AWS DevOps

在应用程序恢复控制器中配置可用区转移

在此步骤中,您需要使用应用程序恢复控制器中的可用区转移功能将流量转移到另一个可用区。

  1. 打开应用程序恢复控制器控制台

  2. 开始使用下,依次选择可用区转移开始可用区转移

  3. 选择要从哪个可用区移走流量。

  4. 从资源表中选择一个支持的资源(例如应用程序负载均衡器)进行可用区转移。

  5. 设置可用区转移到期时间中,选择或输入可用区转移的到期时间。可以将持续时间设置为 1 分钟到三天(72 小时)。

    所有可用区转移都是暂时的。您必须设置到期时间,但稍后可以更新活动的可用区转移,以设置新的到期时间,最长是三天。

  6. 输入有关此可用区转移的备注。

  7. 选中该复选框以确认启动可用区转移,这会将流量移离该可用区,从而减少应用程序的可用容量。

  8. 选择启动

要使用 AWS CLI,请参阅应用程序恢复控制器文档中的 AWS CLI 带区域偏移的使用示例

AWS DevOps

验证可用区转移配置和进度。

  1. 验证已注册可用区转移的资源:

    aws arc-zonal-shift list-managed-resources --region <AWS-region-name>

    例如,以下输出证实资源已在两个可用区中正常启动和运行。

    "appliedWeights": { "use1-az1": 1.0, "use1-az2": 1.0 },
  2. 要可视化区域偏移,请使用以下 AWS CLI 命令开始区域偏移:

    aws arc-zonal-shift start-zonal-shift \ --resource-identifier <application-load-balancer-arn> \ --away-from <source-AZ> \ --expires-in 10m --comment "testing" \ --region <AWS-region-name>

    其中,<source-AZ> 是您要从中移走流量的可用区的标识符,<application-load-balancer-arn> 是应用程序负载均衡器的 Amazon 资源名称(ARN)。

  3. 确认流量已移至另一个可用区。

    aws arc-zonal-shift get-managed-resource \ --resource-identifier <application-load-balancer-arn> \ --region <AWS-region-name>

    这些权重数据证实了可用区转移:

    "appliedWeights": { "use1-az1": 0.0, "use1-az2": 1.0 },
AWS DevOps

相关资源