教程:在 Amazon EC2 上设置 Windows HPC 集群 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

教程:在 Amazon EC2 上设置 Windows HPC 集群

您可以使用 Amazon EC2 实例启动可扩展 Windows 高性能计算 (HPC) 集群。Windows HPC 集群需要 Active Directory 域控制器、DNS 服务器、头节点以及一个或多个计算节点。

要在 Amazon EC2 上设置 Windows HPC 集群,请完成以下任务:

有关高性能计算的更多信息,请参阅Amazon上的高性能计算 (HPC)

先决条件

您必须在 VPC 中启动您的实例。您可使用默认 VPC,也可创建非默认 VPC。有关更多信息,请参阅Amazon VPC 用户指南中的入门

步骤 1:创建安全组

使用 Tools for Windows PowerShell 为域控制器、域成员和 HPC 集群创建安全组。

创建安全组
  1. 使用 New-EC2SecurityGroup«2 cmdlet 为域控制器创建安全组。记下输出中的安全组 ID。

    PS C:\> New-EC2SecurityGroup -VpcId vpc-id -GroupName "SG - Domain Controller" -Description "Active Directory Domain Controller"
  2. 使用 New-EC2SecurityGroup«2 cmdlet 为域成员创建安全组。记下输出中的安全组 ID。

    PS C:\> New-EC2SecurityGroup -VpcId vpc-id -GroupName "SG - Domain Member" -Description "Active Directory Domain Member"
  3. 使用 New-EC2SecurityGroup cmdlet 为 HPC 集群创建安全组。记下输出中的安全组 ID。

    PS C:\> New-EC2SecurityGroup -VpcId vpc-id -GroupName "SG - Windows HPC Cluster" -Description "Windows HPC Cluster Nodes"
向安全组添加规则
  1. 创建要添加到域控制器安全组的规则。用域成员安全组的 ID 替换占位符安全组 ID,并用您的网络的 CIDR 块替换占位符 CIDR 块。

    PS C:\> $sg_dm = New-Object Amazon.EC2.Model.UserIdGroupPair PS C:\> $sg_dm.GroupId = "sg-12345678 PS C:\> $r1 = @{ IpProtocol="UDP"; FromPort="123"; ToPort="123"; UserIdGroupPairs=$sg_dm } PS C:\> $r2 = @{ IpProtocol="TCP"; FromPort="135"; ToPort="135"; UserIdGroupPairs=$sg_dm } PS C:\> $r3 = @{ IpProtocol="UDP"; FromPort="138"; ToPort="138"; UserIdGroupPairs=$sg_dm } PS C:\> $r4 = @{ IpProtocol="TCP"; FromPort="49152"; ToPort="65535"; UserIdGroupPairs=$sg_dm } PS C:\> $r5 = @{ IpProtocol="TCP"; FromPort="389"; ToPort="389"; UserIdGroupPairs=$sg_dm } PS C:\> $r6 = @{ IpProtocol="UDP"; FromPort="389"; ToPort="389"; UserIdGroupPairs=$sg_dm } PS C:\> $r7 = @{ IpProtocol="TCP"; FromPort="636"; ToPort="636"; UserIdGroupPairs=$sg_dm } PS C:\> $r8 = @{ IpProtocol="TCP"; FromPort="3268"; ToPort="3269"; UserIdGroupPairs=$sg_dm } PS C:\> $r9 = @{ IpProtocol="TCP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dm } PS C:\> $r10 = @{ IpProtocol="UDP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dm } PS C:\> $r11 = @{ IpProtocol="TCP"; FromPort="88"; ToPort="88"; UserIdGroupPairs=$sg_dm } PS C:\> $r12 = @{ IpProtocol="UDP"; FromPort="88"; ToPort="88"; UserIdGroupPairs=$sg_dm } PS C:\> $r13 = @{ IpProtocol="TCP"; FromPort="445"; ToPort="445"; UserIdGroupPairs=$sg_dm } PS C:\> $r14 = @{ IpProtocol="UDP"; FromPort="445"; ToPort="445"; UserIdGroupPairs=$sg_dm } PS C:\> $r15 = @{ IpProtocol="ICMP"; FromPort="-1"; ToPort="-1"; UserIdGroupPairs=$sg_dm } PS C:\> $r16 = @{ IpProtocol="UDP"; FromPort="53"; ToPort="53"; IpRanges="203.0.113.25/32" } PS C:\> $r17 = @{ IpProtocol="TCP"; FromPort="3389"; ToPort="3389"; IpRanges="203.0.113.25/32" }
  2. 使用 Grant-EC2SecurityGroupIngress cmdlet 将规则添加到域控制器安全组。

    PS C:\> Grant-EC2SecurityGroupIngress -GroupId sg-1a2b3c4d -IpPermission @( $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $r12, $r13, $r14, $r15, $r16, $r17 )

    有关这些安全组规则的更多信息,请参阅以下Microsoft文章:How to configure a firewall for domains and trusts (如何为域和信任关系配置防火墙)。

  3. 创建要添加到域成员安全组的规则。用域控制器安全组 ID 替换占位符安全组 ID。

    PS C:\> $sg_dc = New-Object Amazon.EC2.Model.UserIdGroupPair PS C:\> $sg_dc.GroupId = "sg-1a2b3c4d PS C:\> $r1 = @{ IpProtocol="TCP"; FromPort="49152"; ToPort="65535"; UserIdGroupPairs=$sg_dc } PS C:\> $r2 = @{ IpProtocol="UDP"; FromPort="49152"; ToPort="65535"; UserIdGroupPairs=$sg_dc } PS C:\> $r3 = @{ IpProtocol="TCP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dc } PS C:\> $r4 = @{ IpProtocol="UDP"; FromPort="53"; ToPort="53"; UserIdGroupPairs=$sg_dc }
  4. 使用 Grant-EC2SecurityGroupIngress cmdlet 将规则添加到域成员安全组。

    PS C:\> Grant-EC2SecurityGroupIngress -GroupId sg-12345678 -IpPermission @( $r1, $r2, $r3, $r4 )
  5. 创建以下规则以添加到 HPC 集群安全组。用 HPC 集群安全组 ID 替换占位符安全组 ID,并您的网络的 CIDR 块替换占位符 CIDR 块。

    $sg_hpc = New-Object Amazon.EC2.Model.UserIdGroupPair PS C:\> $sg_hpc.GroupId = "sg-87654321 PS C:\> $r1 = @{ IpProtocol="TCP"; FromPort="80"; ToPort="80"; UserIdGroupPairs=$sg_hpc } PS C:\> $r2 = @{ IpProtocol="TCP"; FromPort="443"; ToPort="443"; UserIdGroupPairs=$sg_hpc } PS C:\> $r3 = @{ IpProtocol="TCP"; FromPort="1856"; ToPort="1856"; UserIdGroupPairs=$sg_hpc } PS C:\> $r4 = @{ IpProtocol="TCP"; FromPort="5800"; ToPort="5800"; UserIdGroupPairs=$sg_hpc } PS C:\> $r5 = @{ IpProtocol="TCP"; FromPort="5801"; ToPort="5801"; UserIdGroupPairs=$sg_hpc } PS C:\> $r6 = @{ IpProtocol="TCP"; FromPort="5969"; ToPort="5969"; UserIdGroupPairs=$sg_hpc } PS C:\> $r7 = @{ IpProtocol="TCP"; FromPort="5970"; ToPort="5970"; UserIdGroupPairs=$sg_hpc } PS C:\> $r8 = @{ IpProtocol="TCP"; FromPort="5974"; ToPort="5974"; UserIdGroupPairs=$sg_hpc } PS C:\> $r9 = @{ IpProtocol="TCP"; FromPort="5999"; ToPort="5999"; UserIdGroupPairs=$sg_hpc } PS C:\> $r10 = @{ IpProtocol="TCP"; FromPort="6729"; ToPort="6730"; UserIdGroupPairs=$sg_hpc } PS C:\> $r11 = @{ IpProtocol="TCP"; FromPort="7997"; ToPort="7997"; UserIdGroupPairs=$sg_hpc } PS C:\> $r12 = @{ IpProtocol="TCP"; FromPort="8677"; ToPort="8677"; UserIdGroupPairs=$sg_hpc } PS C:\> $r13 = @{ IpProtocol="TCP"; FromPort="9087"; ToPort="9087"; UserIdGroupPairs=$sg_hpc } PS C:\> $r14 = @{ IpProtocol="TCP"; FromPort="9090"; ToPort="9092"; UserIdGroupPairs=$sg_hpc } PS C:\> $r15 = @{ IpProtocol="TCP"; FromPort="9100"; ToPort="9163"; UserIdGroupPairs=$sg_hpc } PS C:\> $r16 = @{ IpProtocol="TCP"; FromPort="9200"; ToPort="9263"; UserIdGroupPairs=$sg_hpc } PS C:\> $r17 = @{ IpProtocol="TCP"; FromPort="9794"; ToPort="9794"; UserIdGroupPairs=$sg_hpc } PS C:\> $r18 = @{ IpProtocol="TCP"; FromPort="9892"; ToPort="9893"; UserIdGroupPairs=$sg_hpc } PS C:\> $r19 = @{ IpProtocol="UDP"; FromPort="9893"; ToPort="9893"; UserIdGroupPairs=$sg_hpc } PS C:\> $r20 = @{ IpProtocol="TCP"; FromPort="6498"; ToPort="6498"; UserIdGroupPairs=$sg_hpc } PS C:\> $r21 = @{ IpProtocol="TCP"; FromPort="7998"; ToPort="7998"; UserIdGroupPairs=$sg_hpc } PS C:\> $r22 = @{ IpProtocol="TCP"; FromPort="8050"; ToPort="8050"; UserIdGroupPairs=$sg_hpc } PS C:\> $r23 = @{ IpProtocol="TCP"; FromPort="5051"; ToPort="5051"; UserIdGroupPairs=$sg_hpc } PS C:\> $r24 = @{ IpProtocol="TCP"; FromPort="3389"; ToPort="3389"; IpRanges="203.0.113.25/32" }
  6. 使用 Grant-EC2SecurityGroupIngress cmdlet 将规则添加到 HPC 集群安全组。

    PS C:\> Grant-EC2SecurityGroupIngress -GroupId sg-87654321 -IpPermission @( $r1, $r2, $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10, $r11, $r12, $r13, $r14, $r15, $r16, $r17, $r18, $r19, $r20, $r21, $r22, $r23, $r24 )

    有关这些安全组规则的更多信息,请参阅以下 Microsoft 文章:HPC Cluster Networking: Windows Firewall configuration (HPC 集群联网:Windows 防火墙配置)。

  7. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  8. 在导航窗格中,选择 Security Groups。确认三个安全组全部显示在列表中且拥有所需的规则。

步骤 2:设置您的 Active Directory 域控制器

Active Directory 域控制器提供身份验证以及针对 HPC 环境的集中式资源管理,而且是安装所必需的。要设置 Active Directory,请启动一个实例充当您的 HPC 集群的域控制器并配置它。

为您的 HPC 集群启动域控制器
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在控制台控制面板中,选择 Launch Instance

  3. Choose an AMI 页上,为 Windows Server 选择一个 AMI,然后选择 Select

  4. 在向导的下一页上,选择一种实例类型,然后选择 Next: Configure Instance Details

  5. Configure Instance Details 页上,从 Network 中选择 VPC,从 Subnet 中选择子网。在向导的下一页上,您可以为实例指定额外的存储。

  6. Add Tags 页上,输入 Domain Controller 作为实例的 Name 标签的值,然后选择 Next: Configure Security Group

  7. Configure Security Group 页上,选择 Select an existing security group,选择 SG - Domain Controller 安全组,然后选择 Review and Launch

  8. 选择 Launch

  9. 在导航窗格中,选择 Elastic IPs

  10. 选择 Allocate new address。选择 Allocate。选择 Close

  11. 选择您创建的弹性 IP 地址,然后选择 ActionsAssociate address。对于 Instance,选择域控制器实例。选择 Associate

连接到您创建的实例,并将服务器配置为 HPC 集群的域控制器。

将实例配置为域控制器
  1. 连接到您的 Domain Controller 实例。有关更多信息,请参阅连接到您的 Windows 实例

  2. 打开 Server Manager (服务器管理器),然后添加“Active Directory Domain Services (Active Directory 域服务)”角色。

  3. 通过使用服务器管理器或运行 DCPromo.exe,将服务器升级为域控制器。

  4. 在新林中创建新域。

  5. 键入 hpc.local 作为完全限定域名 (FQDN)。

  6. 选择 Forest Functional Level 作为 Windows Server 2008 R2

  7. 确保 DNS Server 选项已选中,然后选择 Next

  8. 选择 Yes, the computer will use an IP address automatically assigned by a DHCP server (not recommended) (是,该计算机将使用 DHCP 服务器自动分配的 IP 地址(不推荐))

  9. 系统提示时,请选择 Yes 继续。

  10. 完成向导,然后选择 Reboot on Completion (完成后重新启动)

  11. hpc.local\administrator 身份连接到实例

  12. 创建域用户 hpc.local\hpcuser

步骤 3:配置头节点

一个 HPC 客户端连接到头节点。头节点会促进相关预定的任务。通过启动实例、安装 HPC 包和配置集群来配置您的头节点。

启动一个实例,然后将其配置为具有必要用户账户的 hpc.local 域成员。

将实例配置为头节点
  1. 启动一个实例,将其命名为 HPC-Head。当您启动实例时,同时选择这两种安全组:SG - Windows HPC Cluster (SG - Windows HPC 集群) 和 SG - Domain Member (SG - 域成员)。

  2. 连接到实例,并使用以下命令获取现有 DNS 服务器地址:

    IPConfig /all
  3. 更新 HPC-Head NIC 的 TCP/IPv4 属性以包括 Domain Controller 实例的弹性 IP 地址作为主 DNS,然后添加上一步中的额外 DNS IP 地址。

  4. 使用 hpc.local (域管理员账户) 的凭证将计算机加入到 hpc.local\administrator 域。

  5. 以本地管理员身份添加 hpc.local\hpcuser。出现提供凭证的提示时,使用 hpc.local\administrator,然后重新启动实例。

  6. hpc.local\hpcuser 身份连接到 HPC-Head

安装 HPC 包
  1. 使用 账户连接到您的 HPC-Headhpc.local\hpcuser 实例。

  2. 通过 Server Manager (服务器管理器),关闭针对管理员的 Internet Explorer 增强的安全配置 (IE ESC)。

    1. Server Manager 中的 Security Information 下,选择 Configure IE ESC

    2. 关闭针对管理员的 IE ESC。

  3. HPC-Head 上安装 HPC 包。

    1. 将 HPC 包从 HPC-HeadMicrosoft 下载中心下载到 。选择适用于 HPC-Head 上的 Windows Server 版本的 HPC 包。

    2. 将相关文件提取到一个文件夹中,打开该文件夹并双击 setup.exe

    3. 在 Installation 页上,选择 Create a new HPC cluster by creating a head node,然后选择 Next

    4. 接受默认设置以在头节点上安装所有数据库,然后选择 Next

    5. 完成向导。

在头节点上配置您的 HPC 集群
  1. 启动 HPC Cluster Manager

  2. Deployment To-Do List (部署待办事项列表) 中,选择 Configure your network (配置您的网络)

    1. 在向导中,选择默认选项 (5),然后选择 Next

    2. 接受所有屏幕上的默认值以结束向导,然后选择您想如何更新服务器和参与客户反馈。

    3. 选择 Configure

  3. 选择 Provide Network Credentials,然后提供 hpc.local\hpcuser 证书。

  4. 选择 Configure the naming of new nodes,然后选择 OK

  5. 选择 Create a node template (创建节点模板)

    1. 选择 Compute node template,然后选择 Next

    2. 选择 Without operating system (不使用操作系统),然后使用默认设置继续。

    3. 选择创建

步骤 4:设置计算节点

通过启动实例、安装 HPC 包和将计算节点添加到集群来设置计算节点。

首先,启动一个实例,然后将其配置为具有必要用户账户的 hpc.local 域成员。

配置计算节点实例
  1. 启动一个实例,将其命名为 HPC-Compute。当您启动实例时,选择以下安全组:SG - Windows HPC Cluster (SG - Windows HPC 集群)SG - Domain Member (SG - 域成员)

  2. 使用以下命令登录该实例,并从 HPC-Compute 获取现有 DNS 服务器地址:

    IPConfig /all
  3. 更新 HPC-Compute NIC 的 TCP/IPv4 属性以包括 Domain Controller 实例的弹性 IP 地址作为主 DNS。然后从上一步开始添加其他 DNS IP 地址。

  4. 使用 hpc.local (域管理员账户) 的凭证将计算机加入到 hpc.local\administrator 域。

  5. 以本地管理员身份添加 hpc.local\hpcuser。当系统提示您提供凭证时,使用 hpc.local\administrator,然后重新启动。

  6. HPC-Compute 身份连接到 hpc.local\hpcuser

在计算节点上安装 HPC 包
  1. 使用 HPC-Compute 账户连接到您的 hpc.local\hpcuser 实例。

  2. 通过 Server Manager (服务器管理器),关闭针对管理员的 Internet Explorer 增强的安全配置 (IE ESC)。

    1. Server Manager 中的 Security Information 下,选择 Configure IE ESC

    2. 关闭针对管理员的 IE ESC。

  3. HPC-Compute 上安装 HPC 包。

    1. 将 HPC 包从 HPC-ComputeMicrosoft 下载中心下载到 。选择适用于 HPC-Compute 上的 Windows Server 版本的 HPC 包。

    2. 将相关文件提取到一个文件夹中,打开该文件夹并双击 setup.exe

    3. Installation 页上,选择 Join an existing HPC cluster by creating a new compute node,然后选择 Next

    4. 指定 HPC-Head 实例的完全限定名称,然后选择默认设置。

    5. 完成向导。

要完成您的集群配置,请从头节点中将计算节点添加到您的集群。

将计算节点添加到您的集群
  1. HPC-Head 身份连接到 hpc.local\hpcuser 实例。

  2. 打开 HPC Cluster Manager

  3. 选择 Node Management (节点管理)

  4. 如果 Unapproved (未批准) 存储桶中显示了计算节点,请右键单击列出的节点,然后选择 Add Node (添加节点)

    1. 选择 Add compute nodes or broker nodes that have already been configured (添加已经配置的计算节点或代理节点)

    2. 选中节点旁边的复选框并选择 Add

  5. 右键单击节点并选择 Bring Online

步骤 5:扩展您的 HPC 计算节点 (可选)

扩展您的计算节点
  1. HPC-Compute 身份连接到 hpc.local\hpcuser 实例。

  2. 删除您从 HP Pack 安装包下载到本地的所有文件。(由于您已运行安装程序并在自己的映像中创建了这些文件,因此无需再为 AMI 复制这些文件。)

  3. C:\Program Files\Amazon\Ec2ConfigService 打开文件 sysprep2008.xml

  4. <settings pass="specialize"> 底部,添加以下部分。确保替换 hpc.localpasswordhpcuser 以匹配您的环境。

    <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Identification> <UnsecureJoin>false</UnsecureJoin> <Credentials> <Domain>hpc.local</Domain> <Password>password</Password> <Username>hpcuser</Username> </Credentials> <JoinDomain>hpc.local</JoinDomain> </Identification> </component>
  5. 保存 sysprep2008.xml

  6. 依次选择 StartAll ProgramsEC2ConfigService Settings

    1. 选择 General 选项卡,并清除 Set Computer Name 复选框。

    2. 选择 Bundle 选项卡,然后选择 Run Sysprep and Shutdown Now

  7. 打开 Amazon EC2 控制台。

  8. 在导航窗格中,选择实例

  9. 等待实例状态显示为 Stopped (停止)

  10. 选择实例,再依次选择 Actions (操作)Image and templates (映像和模板)Create image (创建映像)

  11. 指定映像名称和映像描述,然后选择 Create Image (创建映像) 以便从实例创建 AMI。

  12. 启动已关闭的原始 HPC-Compute 实例。

  13. 使用 hpc.local\hpcuser 账户连接到头节点。

  14. HPC Cluster Manager 中,删除现在以错误状态显示的旧节点。

  15. 在 Amazon EC2 控制台的导航窗格中,选择 AMIs

  16. 使用您创建的 AMI 向集群添加额外节点。

您可以从已创建的 AMI 启动附加计算节点。这些节点会自动加入域,但是您必须使用头节点将它们作为已在 HPC Cluster Manager 配置的节点添加到集群,然后将这些节点联机。