

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

# 使用应用程序恢复控制器管理 EMR 集群的多可用区失效转移
<a name="multi-az-failover-spark-emr-clusters-arc"></a>

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

## Summary
<a name="multi-az-failover-spark-emr-clusters-arc-summary"></a>

此模式可为 Amazon EMR 工作负载提供有效的灾难恢复策略，帮助确保单个 AWS 区域内多个可用区之间的高可用性和数据一致性。该设计使用 [Amazon 应用程序恢复控制器](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html)和[应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)，为基于 Apache Spark 的 EMR 集群管理失效转移操作和流量分配。

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

## 先决条件和限制
<a name="multi-az-failover-spark-emr-clusters-arc-prereqs"></a>

**先决条件**
+ 有效的 [AWS 账户](https://aws.amazon.com/resources/create-account/)
+ [亚马逊弹性计算云（亚马逊）上的亚马逊 EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) EC2
+ 从 EMR 集群的主节点访问 Amazon S3。
+ AWS 多可用区基础架构

**限制**
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

**产品版本**
+ [Amazon EMR 6.x 或更高版本](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)

## 架构
<a name="multi-az-failover-spark-emr-clusters-arc-architecture"></a>

**目标技术堆栈**
+ Amazon EMR 集群
+ Amazon Application Recovery Controller
+ 应用程序负载均衡器
+ 亚马逊 S3 存储桶
+ 适用于 Amazon S3 的网关端点

**目标架构**

![\[含应用程序恢复控制器的自动恢复机制的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/e5ecdb66-0eef-4a6a-8367-982a55104748/images/e982d580-13db-4bdd-9f6b-6400d7c31c01.png)


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

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

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

1. Amazon S3 充当中央数据存储库，可能用作检查点或 EMR 集群之间的共享存储区。EMR 集群通过 `s3://` 协议和 [EMR 文件系统（EMRFS）](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs.html)直接写入 Amazon S3 时可以保持数据一致性。

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

1. 如果应用程序恢复控制器在主 EMR 集群中检测到故障，将采取以下措施：
   + 启动失效转移到可用区 2 中的辅助 EMR 集群的过程。
   + 更新路由配置以将流量定向至辅助集群。

## 工具
<a name="multi-az-failover-spark-emr-clusters-arc-tools"></a>

**AWS 服务**
+ [Amazon 应用程序恢复控制器****](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html)可帮助您管理和协调跨 AWS 区域 可用区的应用程序恢复。通过减少传统工具和流程所需的手动步骤，此服务简化了流程并提高了应用程序恢复的可靠性。
+ [应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)在应用程序层运行，这是开放系统互连（OSI）模型的第 7 层。它在多个可用区中的多个目标（例如 EC2 实例）之间分配传入的应用程序流量。这将提高应用程序的可用性。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) 是一个大数据平台，可为 Apache Spark、Apache Hive、Presto 等开源框架提供数据处理、交互式分析和机器学习功能。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 提供了一个简单 Web 服务接口，可用于随时随地存储和检索任何数量的数据。借助此服务，您可以轻松构建利用云原生存储的应用程序。
+ [Amazon S3 的网关终端节点是您在路由表中指定的网关，用于](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)通过 AWS 网络从您的虚拟私有云 (VPC) 访问 Amazon S3。

## 最佳实践
<a name="multi-az-failover-spark-emr-clusters-arc-best-practices"></a>
+ 遵循 [AWS 安全性、身份和合规性最佳实践](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=%5b…%5d.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all)，确保架构强大且安全。
+ 确保架构符合 [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/)。
+ 使用 Amazon S3 访问权限管控功能来管理基于 Spark 的 EMR 集群对 Amazon S3 的访问权限。有关详细信息，请参阅博客文章：[Use Amazon EMR with S3 Access Grants to Scale Spark access to Amazon S3](https://aws.amazon.com/blogs/big-data/use-amazon-emr-with-s3-access-grants-to-scale-spark-access-to-amazon-s3/)。
+ [使用亚马逊 S3 提高 Spark 性能](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html)。

## 操作说明
<a name="multi-az-failover-spark-emr-clusters-arc-epics"></a>

### 设置您的环境
<a name="set-up-your-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 登录到 AWS 管理控制台。 | 以 IAM 用户身份登录 [AWS 管理控制台](https://console.aws.amazon.com/)。有关说明，请参阅 [AWS 文档](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-iam-user-sign-in-tutorial.html)。 | AWS DevOps | 
| 配置 AWS CLI。**** | 安装 AWS CLI 或将其更新到最新版本，以便可以在 AWS 服务 中进行交互 AWS 管理控制台。有关说明，请参阅 [AWS CLI 文档](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。 | AWS DevOps | 

### 在 EMR 集群上部署 Spark 应用程序
<a name="deploy-a-spark-application-on-your-emr-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| 创建 EMR 集群。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| 配置 EMR 集群的安全设置。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| 连接到 EMR 集群。 | 使用所提供的密钥对，通过 SSH 连接到 EMR 集群的主节点。请确保密钥对文件与您的应用程序位于同一目录下。运行以下命令为密钥对设置正确的权限并建立 SSH 连接：<pre>chmod 400 <key-pair-name><br />ssh -i ./<key-pair-name> hadoop@<master-node-public-dns></pre> | AWS DevOps | 
| 部署 Spark 应用程序。 | 建立 SSH 连接后，您将进入 Hadoop 控制台。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| 监控 Spark 应用程序。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

### 将流量转移到其他可用区
<a name="shift-traffic-to-another-availability-zone"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建应用程序负载均衡器。 | 在 AWS 区域内设置目标组，在跨两个可用区的 Amazon EMR 主节点之间路由流量。有关说明，请参阅弹性负载均衡文档中的[为应用程序负载均衡器创建目标组](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html)。 | AWS DevOps | 
| 在应用程序恢复控制器中配置可用区转移 | 在此步骤中，您需要使用应用程序恢复控制器中的[可用区转移功能](https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html)将流量转移到另一个可用区。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html)要使用 AWS CLI，请参阅应用程序恢复控制器文档[中的 AWS CLI 带区域偏移的使用示例](https://docs.aws.amazon.com/r53recovery/latest/dg/getting-started-cli-zonalshift.html)。 | AWS DevOps | 
| 验证可用区转移配置和进度。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

## 相关资源
<a name="multi-az-failover-spark-emr-clusters-arc-resources"></a>
+ AWS CLI 命令：
  + [create-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)
  + [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html)
  + [arc-zonal-shift](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/arc-zonal-shift/index.html)
+ [为竞价型实例配置 Amazon EMR 集群实例类型和最佳实践](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html)（Amazon EMR 文档）
+ [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)（IAM 文档）
+ [使用实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)（IAM 文档）
+ [使用可用区转移和可用区自动转移来恢复 ARC 中的应用程序](https://docs.aws.amazon.com/r53recovery/latest/dg/multi-az.html)（应用程序恢复控制器文档）