如何在 EC2 的不同机架中创建两个实例? (AWS 中的机架意识)

Posted

技术标签:

【中文标题】如何在 EC2 的不同机架中创建两个实例? (AWS 中的机架意识)【英文标题】:How to create two instances in different rack in EC2? (Rack awareness in AWS) 【发布时间】:2017-10-06 20:00:48 【问题描述】:

我正在尝试创建一个 Hadoop 集群。我正在使用修改后的 Hadoop 源,它将根据机架的工作负载将任务安排到不同的机架。为了测试这一点,我希望我的一半 Datanodes 在一个机架上,另一半在另一个机架上。如何确保这一点?

【问题讨论】:

您是在使用 Amazon EMR 还是在部署和管理自己的 Hadoop 集群? “机架”是指传统的 IT 基础架构,计算机安装在机架中,共享一些资源(例如供电)?或者这是一个 Hadoop 术语? Hadoop 将节点定义为在同一个机架中,如果它们在同一个网络交换机中。 hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/… 它无法检测 Amazon EC2 基础设施中的物理机架。该文档提到了一些关于地址范围的假设,这些假设在 EC2 中不成立。 请注意,EC2 不在交换网络上运行。这是一个模拟普通以太网的软件定义网络。 【参考方案1】:

Amazon EC2 上没有“机架”的概念。您拥有的唯一控制级别是可用区,这是一个物理上不同的数据中心。但是,Hadoop 集群总是在同一个 AZ 中运行以提高速度,而且如果主节点发生故障,整个集群也会发生故障。 (这是在 EMR 上——如果您已经部署了自己的集群,则可以使用多可用区。)

如果您关心的是避免多次中断,我的建议是“别担心!”。 Hadoop 旨在处理故障,因此如果一个节点发生故障,它将向其余节点发送工作。您可以为集群配置其他节点以替换故障节点,但这不会自动完成。

与其把“我的数据节点的一半放在一个机架上,另一半放在另一个机架上”,不如说每个节点都在不同的主机上,所以你可能会得到一个更宽的基础设施的传播 那里只有两个“机架”。但是,您无法看到此类展示位置。

此外,建议您将持久性数据存储在 Amazon S3 中而不是 HDFS 中。这样,您可以终止集群并且您的数据仍然可用,最坏的情况是,如果集群发生故障,您的数据也仍然可用。这比不会丢失 HDFS 的普通本地 Hadoop 部署要好。

底线:不用担心。部署您的集群并监控它们,看看故障是否真的是一个问题。

【讨论】:

感谢您提供有用的信息。然而,我正在尝试为不同的机架测试我的负载平衡算法。我根据其工作负载对机架上打开容器请求的源进行了一些更改。为了测试它,我想创建一个有两个机架的集群,每个机架都有一些节点。【参考方案2】:

你可以通过Spread Placement Group做到这一点

    首先创建一个Spread Placement Groups。

    启动实例并指定它们属于此传播组。

AWS 文档

分散放置组是一组实例,每个实例都放置在不同的机架上,每个机架都有自己的网络和电源。

下图显示了单个可用区中的七个实例,它们被放置在一个分散的置放群组中。这七个实例被放置在七个不同的机架上。

对于具有少量关键实例且应彼此分开的应用程序,建议使用扩展置放群组。在分散的置放群组中启动实例可降低实例共享相同机架时可能发生的同时故障的风险。分散放置组提供对不同机架的访问,因此适合混合实例类型或随着时间的推移启动实例。

分散置放群组可以跨越同一区域中的多个可用区。每个组的每个可用区最多可以有七个正在运行的实例。

如果您在分散置放群组中启动或启动实例,并且没有足够的唯一硬件来满足请求,则请求将失败。随着时间的推移,Amazon EC2 会提供更多不同的硬件,因此您可以稍后再次尝试您的请求。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html

三个归置组简介

Amazon EC2 Placement Groups: SAA-C02 AWS Certified Solutions Architect Associate Exam 2020

【讨论】:

以上是关于如何在 EC2 的不同机架中创建两个实例? (AWS 中的机架意识)的主要内容,如果未能解决你的问题,请参考以下文章

EC2 实例的输出子网

即使在我指定了自定义 VPC 之后,我的用于自动缩放组的 Cloudformation YAML 也会继续在默认 VPC 中创建 EC2 实例

如何在 Terraform 中创建 SSH 密钥?

使用 ebextensions 动态设置每个环境的 EC2 实例类型

如何与用户一起备份 Ec2 linux 实例

如何使用 CloudFormation 将安全组添加到现有 EC2 实例