在混合 HPC Pack 群集中运行 HPC SOA 服务
本文档介绍如何在混合 HPC Pack 群集中部署和运行 HPC SOA 服务,该群集包含本地计算节点和 Azure IaaS 计算节点。
先决条件
Azure 订阅。
站点到站点 VPN 或 ExpressRoute 从本地网络连接到 Azure 虚拟网络。
部署混合 HPC Pack 群集
若要部署混合 HPC Pack 群集,可以利用 HPC Pack 2016 Update 1 中的 IaaS 突发功能。 有关详细信息,请参阅从 HPC Pack 群集
在混合 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_SERVICEREGISTRATION_PATH
群集环境中设置CCP_REGISTRATION_STORE
。 检查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 存储连接字符串 -> 部署 To-do List,并填写正确的连接字符串。
更改 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。