在混合 HPC Pack 群集中运行 HPC SOA 服务

本文档介绍如何在混合 HPC Pack 群集中部署和运行 HPC SOA 服务,该群集包含本地计算节点和 Azure IaaS 计算节点。

先决条件

部署混合 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 服务

  1. 部署服务二进制文件

    将新的 HPC SOA 服务部署到包含未加入域的 IaaS 计算节点的混合 HPC Pack 群集时,服务二进制文件需要放置在每个计算节点的本地文件夹中。 (例如 C:\Services\Sample.dll

  2. 更改服务注册文件中的设置

    • 将程序集路径更改为每个计算节点上的本地文件

      <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>
      
  3. 部署服务注册文件

    有两种方法可以部署新 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。

      屏幕截图显示服务条目,值为 True for High Available。

使用通用数据

从 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,并填写正确的连接字符串。

    屏幕截图显示了“配置部署到”列表,其中突出显示了“设置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

HPC Pack SOA 教程