本文档介绍如何在混合 HPC Pack 群集中部署和运行 HPC SOA 服务,该群集包含本地计算节点和 Azure IaaS 计算节点。
先决条件
Azure 订阅。
从本地网络到 Azure 虚拟网络的 站点到站点 VPN 或 ExpressRoute 连接。
部署混合 HPC Pack 群集
若要部署混合 HPC Pack 群集,可以利用 HPC Pack 2016 Update 1 中的 IaaS 突发功能。 有关详细信息,请参阅 HPC Pack 群集中的突发到 Azure IaaS VM 。
在混合 HPC Pack 群集中部署 HPC SOA 服务
IaaS 计算节点已加入域
如果 IaaS 计算节点已加入域,则群集应充当本地 HPC Pack 群集。 有关 HPC SOA 的详细信息,请参阅我们的 教程系列 。
IaaS 计算节点未加入域
如果 IaaS 计算节点是未加入域的计算节点,则部署新的 HPC SOA 服务的方式略有不同。
部署新的 HPC SOA 服务
部署服务二进制文件
将新的 HPC SOA 服务部署到包含未加入域的 IaaS 计算节点的混合 HPC Pack 群集时,服务二进制文件需要放置在每个计算节点的本地文件夹中。 (例如 C:\Services\Sample.dll)
更改服务注册文件中的设置
将程序集路径更改为每个计算节点上的本地文件
<microsoft.Hpc.Session.ServiceRegistration> <!--Change assembly path below--> <service assembly="C:\Services\Sample.dll" /> </microsoft.Hpc.Session.ServiceRegistration>
由于域标识在未加入域的计算节点上不可用,因此我们需要在中转站节点和计算节点
None
之间设置安全模式。 将以下部分添加到服务注册文件中或更改现有部分:<system.serviceModel> <bindings> <netTcpBinding> <!--binding used by broker's backend--> <binding name="Microsoft.Hpc.BackEndBinding" maxConnections="1000"> <!--for non ___domain joined compute nodes, the security mode should be None--> <security mode="None"/> </binding> </netTcpBinding> </bindings> </system.serviceModel>
部署服务注册文件
有两种方法可以部署新 SOA 服务的服务注册文件
将服务注册文件部署到每个群集节点的本地文件夹
若要使用这种方式部署服务注册文件,需要在每个节点上(例如 C:\ServiceRegistration)上创建本地服务注册文件夹,并将其添加到 HPC Pack 群集
CCP_SERVICEREGISTRATION_PATH
的环境。可以使用命令
cluscfg listenvs
在头节点上提取群集环境,并提供如下所示的输出:C:\Windows\system32>cluscfg listenvs CCP_SERVICEREGISTRATION_PATH=CCP_REGISTRATION_STORE;\\<headnode>\HpcServiceRegistration HPC_RUNTIMESHARE=\\<headnode>\Runtime$ CCP_MPI_NETMASK=10.0.0.0/255.255.252.0 CCP_CLUSTER_NAME=<headnode>
若要配置环境,请使用类似于
cluscfg setenvs
cluscfg setenvs CCP_SERVICEREGISTRATION_PATH=CCP_REGISTRATION_STORE;\\<headnode>\HpcServiceRegistration;C:\ServiceRegistration
然后将服务注册文件复制到新创建的本地文件夹(例如 C:\ServiceRegistration\Sample.config)
有关的详细信息
cluscfg
,请参阅 cluscfg 文档。有关创建和部署新的 SOA 服务的详细信息,请参阅 HPC Pack SOA 教程 I – 编写第一个 SOA 服务和客户端。
使用 HA 配置文件功能部署服务注册文件
在 HPC Pack Update 1 中,我们添加了 HA 配置文件功能,以帮助在 HA 群集和未加入域的计算节点的群集中部署服务注册文件。
若要使用此功能,请确保
CCP_REGISTRATION_STORE
在CCP_SERVICEREGISTRATION_PATH
群集环境中设置。 检查结果cluscfg listenvs
,它应包含CCP_SERVICEREGISTRATION_PATH=CCP_REGISTRATION_STORE;\\<headnode>\HpcServiceRegistration
如果缺少该值
CCP_REGISTRATION_STORE
,请将其设置为使用命令cluscfg setenvs
,例如cluscfg setenvs CCP_SERVICEREGISTRATION_PATH=CCP_REGISTRATION_STORE;\\<headnode>\HpcServiceRegistration
若要添加 HA 配置文件,请在 HPC Pack 2016 群集管理器中转到“配置 -> 服务”面板,单击“作”面板中的“ 导入高可用配置文件...” 。 然后选择要导入的 HA 配置文件。
导入后,新的服务条目将显示在“服务”面板中,“高可用”设置为 True。
使用通用数据
从 HPC Pack 2016 Update 2 开始,未加入域的计算节点可以直接从 Azure Blob 存储读取 SOA Common Data,而无需访问通常位于头节点上的 HPC 运行时共享。 这样就可以在混合 HPC Pack 群集中使用 Azure 中预配的计算资源启用 SOA 工作负荷。
配置 HPC Pack 群集
若要启用此功能,需要在 HPC 群集中配置 Azure 存储连接字符串。 在 HPC Pack 2016 群集管理器中,在配置 -> 部署到列表中找到“设置”Microsoft Azure 存储连接字符串,并填写正确的连接字符串。
更改 SOA 服务代码
如果服务调用
ServiceContext.GetDataClient
之前获取引用DataClient
,则无需更改代码。相反,如果服务显式使用
DataClient.Open
,则需要在未加入域的节点上运行服务时更改对新 API 的调用。 下面是它的示例。// Get Job ID from environment variable string jobIdEnvVar = Environment.GetEnvironmentVariable(Microsoft.Hpc.Scheduler.Session.Internal.Constant.JobIDEnvVar); if (!int.TryParse(jobIdEnvVar, out int jobId)) { throw new InvalidOperationException($"jobIdEnvVar is invalid:{jobIdEnvVar}"); } // Get Job Secret from environment variable string jobSecretEnvVar = Environment.GetEnvironmentVariable(Microsoft.Hpc.Scheduler.Session.Internal.Constant.JobSecretEnvVar); return DataClient.Open(dataClientId, jobId, jobSecretEnvVar);
有关的详细信息 cluscfg
,请参阅 cluscfg 文档。
若要详细了解 Azure 存储连接字符串,请参阅 配置 Azure 存储连接字符串。
若要详细了解 HPC SOA Common Data,请参阅 HPC Pack SOA Tutorial IV – Common Data。