HPC群集系统中计算资源的管理是重要的一块,如果能够实现计算作业可以在异构操作系统上面协同运作,无疑将是一大亮点,微软HPC pack自2012 upate3开始,支持本地linux作为计算节点,微软官网写到如何添加linux计算节点进入HPC群集的方法,但仅是Ubuntu版本的操作,而且有些关键步骤并没有写出,导致如果不是很懂linux的微软系统管理员做起来会遇到各种问题,因此老王通过本文将实际环境中安装涉及到的步骤全部呈现,并讨论linux计算节点为微软HPC群集带来的可能性。


本文以hpc pack 2016 update1为例

支持的linux版本:SUSE Linux Enterprise Server 12,Red Hat Enterprise Linux 7.1,CentOS 6.7,Ubuntu Server 14.04 LTS和16.04 LTS


环境介绍

08dc

10.0.0.2 255.0.0.0


hpc01-head.oa.com

windows server 2016数据中心版

Enterprise 10.0.0.8 255.0.0.0 dns 10.0.0.2

HPC 18.0.0.1 255.0.0.0


linuxnode1 

Centos6.7

Enterprise 10.0.0.51 255.0.0.0 dns 10.0.0.2

HPC 18.0.0.3 255.0.0.0


老王总结的配置步骤如下


  1. 为linux主机修改主机名

  2. 在windows dns服务器上添加linux主机DNS记录,确保安装过程中head主机可以找到linux计算节点

  3. 为linux主机导入windows环境根证书,头节点证书公钥,确保证书可以验证,linux主机可以正确打开https://头节点fqdn(此步骤需重启生效)

  4. 在linux主机上面添加头节点主机名和FQDN名称进入/etc/resolv.conf,最好使用永久生效方式,确保互相正常解析

  5. 通过FileZilla或其它工具,将hpc pack linux aget tar gz,setup.py,头节点带私钥证书拷贝进入linux目录

  6. 在linux主机安装hpc pack agent代理需要联网通过yum install下载依赖组件,因此需要让安装过程linux主机可以临时联网下载组件

  7. 通过python命令开始安装setup.py,正常情况下centos或redhat安装完成后都有这个命令,如果在终端输入python无效,需自行下载安装

  8. 严格按照setup.py脚本指示安装代理

  9. 检查安装过程日志,以及nodemanager.json,如果出现主机名,需修改为FQDN,因为主机名称无法通过SSL验证

  10. 一切顺利,安装成功后,经过一杯茶的时间,可以在头节点看到被添加进来的linux计算节点,联机即可



1.为linux主机修改主机名,最好安装时指定,否则可以使用hostname linuxnode01修改

2018-04-28_173607.png

2.在windows dns服务器上添加linux主机DNS记录

微软HPC群集添加Linux计算节点_第1张图片

3.导出windows CA根证书与头节点安装证书,不带私钥版本,导出格式选择Base 64编码

微软HPC群集添加Linux计算节点_第2张图片


微软HPC群集添加Linux计算节点_第3张图片

导出完成后得到两个文件,一个是头节点安装证书不带私钥的cer,一个是企业根信任证书的cer,如果是自签名证书仅导出安装证书不带私钥的cer即可

微软HPC群集添加Linux计算节点_第4张图片

直接将文件后缀重命名为pem,便于我们在linux上面导入证书

微软HPC群集添加Linux计算节点_第5张图片

通过filezilla工具,拷贝这两张证书,放置到centos或redhat的/etc/pki/ca-trust/source/anchors路径下

微软HPC群集添加Linux计算节点_第6张图片

在centos或redhat上面进入bin目录下,输入update-ca-trust,更新证书列表,会将我们放进anchors的证书导入

2018-04-25_104013.png

导入之后重启操作系统,在浏览器栏输入https://hpc01-head.oa.com ,出现以下结果,即代表配置成功

微软HPC群集添加Linux计算节点_第7张图片

如果出现证书不受信任的提示,则一定要重新配置,检查证书位置,以及是否导入,务必确保地址可以正确打开,因为linux里面对于证书要求非常严格,如果SSL证书不信任,是不允许直接打开SSL网站的

微软HPC群集添加Linux计算节点_第8张图片

但是我们在linux上面安装hpc pack代理,最后一步,要通过json里面NamingServceUri写出的 https://hpc01-head.oa.com:443/HpcNaming/api/fabric/resolve/singleton/

路径,去联系头节点注册计算节点,如果这一步信任不做,那么最后一步这个地址是没办法打开的,这样即便linux端安装代理成功了,但是linux计算节点也不会显示在windows 头节点中


4.在linux主机上面添加头节点主机名和FQDN名称进入/etc/resolv.conf,这一步是为了让linux主机能够正常解析头节点主机,其实我们在linux上面设置了dns后,理论上来说应该就已经可以解析了,ping头节点主机名和FQDN都可以ping通,但是之前曾经有外国朋友提到过这是一个bug,告知我们仍需添加/etc/resolv.conf,作为双保险我们最好还是加上

添加方法使用linux vi编辑器

终端中输入vi /etc/resolv.conf打开编辑器 ,输入完成后键入ESC,然后键入:w保存文档

此为临时性修改方法,一旦重启后即失效,虽可以确保代理安装过程无误,但如果有了解linux的朋友还是建议使用永久修改方法

微软HPC群集添加Linux计算节点_第9张图片

添加完成后尝试在头节点ping linux节点主机名,主机名加域名,在linux节点ping头节点主机名,FQDN名,都能ping通即配置成功


5.通过FileZilla或其它工具,将hpcnodeagent.tar.gz,setup.py,头节点安装时带私钥证书拷贝进入一个linux目录

微软HPC群集添加Linux计算节点_第10张图片

hpcnodeagent.tar.gz,setup.py可以在hpc pack 头节点安装包解压目录中找到

微软HPC群集添加Linux计算节点_第11张图片

HPCcom.pfx是我们安装hpc pack 头节点时申请的证书,导出那张证书,带私钥一起导出



6.在linux主机安装hpc pack agent代理需要联网通过yum install下载依赖组件,因此需要让安装过程linux主机可以临时联网下载组件


hpc pack liunx agent安装的时候需要联机下载一些必备组件,实验中老王临时把HPC网络接入了vmwareNAT网络,实际企业环境建议临时让其中一个网络联网,或临时新加入一个网卡

如果安装linux hpc pack代理时不能联网,则会出现以下错误

微软HPC群集添加Linux计算节点_第12张图片

7.通过python命令开始安装setup.py,正常情况下centos或redhat安装完成后都有这个命令,如果在终端输入python无效,需自行下载安装


进入setup.py所在目录运行python命令

python setup.py -install -connectionstring:'hpc01-head'-certfile:'/opt/HPCcom.pfx' -certpassword:'123.com' -managehosts

微软HPC群集添加Linux计算节点_第13张图片

如果怕麻烦可以直接输入python setup.py,会弹出setup.py帮助内容,直接可以复制粘贴,再修改为我们的内容

微软HPC群集添加Linux计算节点_第14张图片

严格按照setup.py说明安装代理,一个参数和大小写都不能错,最好是直接复制示例内容然后修改

微软HPC群集添加Linux计算节点_第15张图片

在安装步骤进行到大约这里时

微软HPC群集添加Linux计算节点_第16张图片

打开/opt/hpcnodemanager/nodemanager.json,检视NamingServceUri一栏,如果是hpc01-head这样的主机名,请一定把它改成hpc01-head.oa.com

微软HPC群集添加Linux计算节点_第17张图片

因为我们在windows端绑定的证书名称是fqdn名称,因此我们导入到linux的证书,也只会匹配fqdn名称,如果这里以主机名访问,则会因为名称与证书不匹配而无法直接打开网页,导致没办法向头节点注册

微软HPC群集添加Linux计算节点_第18张图片

安装成功后,经过一杯茶的时间,可以在头节点看到被添加进来的linux计算节点

微软HPC群集添加Linux计算节点_第19张图片

安装过程日志排错

Linux Node

/opt/hpcnodemanager/logs/nodemanager.txt,hpclinuxagent.log

/opt/hpcnodemanager/nodemanager.json


头节点

安装目录 Microsoft HPC Pack 2016 \ Data \ LogFiles \ Scheduler \ HpcScheduler*.bin

使用hpctrace将bin文件转换txt查看



联机linux计算节点,现在linux计算节点已经成功加入到微软HPC群集中,可以正常承载头节点派发给它的作业任务

微软HPC群集添加Linux计算节点_第20张图片

支持直接在群集管理器对linux节点执行命令

微软HPC群集添加Linux计算节点_第21张图片

支持使用clusrun提交作业直接在linux计算节点执行

微软HPC群集添加Linux计算节点_第22张图片

支持通过群集管理器汇总显示linux计算节点数据

微软HPC群集添加Linux计算节点_第23张图片


微软HPC群集添加Linux计算节点_第24张图片

支持通过客户端程序,portal,提交参数扫描作业至linux节点

微软HPC群集添加Linux计算节点_第25张图片


Linux计算节点不支持的场景

  1. linux计算节点仅支持单头节点的部署,如果采用群集头节点,则无法使用linux计算节点

  2. 要在Linux节点上运行MPI应用程序,您必须在节点上安装自己的MPI。包含在HPC Pack中的Microsoft MPI(MS-MPI)仅在Windows节点上运行。调度程序必须在Linux节点之间建立互信,HPC Pack 2016 Update 1会自动为用户生成密钥对。

  3. 不支持GPU和SOA工作负载 - 目前HPC Pack不支持在Linux节点上调度GPU或运行SOA工作负载

除上述场景外,其它体验均与windows计算节点一致


OK,干货讲完,下面随便聊聊


有些不太了解微软最近几年变化的朋友可能会诧异,怎么可能你微软的群集还能允许linux节点加入呢,事实上微软最近几年正在逐步走向开放的道路上,老王将微软的开放分为两部分,一部分是支持异构化资源,支持和异构资源协同工作,另外一部分则是全面拥抱公有云,后面我们先不表,单说支持异构资源,老王认为这一点算是个明智之举,一个企业不可能只有windows或只有linux,如果能有一套工具集中管理windows、linux这当然是企业最希望的,而微软很多产品正在做到这一点,System Center,powershell,docker,还有我们这个系列的hpc pack,老王认为未来在中国,群集管理平台,云管理平台,IT管理平台,都将呈现两个趋势,一个是异构化,通过一个管理工具可以管理多家厂商节点 ;一个是自主化,越来越多国产厂商将涌现,国产厂商可以从外国厂商中优秀的功能借鉴。


对于高性能计算群集来说,总的来说这种群集相对于高可用群集来说较为松散,高可用群集对于每个群集的配置有严格的配置要求,最好要做到的完全一致,高性能群集则不必,因为它所需要的是每个节点能够提供计算能力,各个节点可以协同并行工作,至于你节点是什么System,高性能群集理想情况下是不需要关注的。


微软的高性能群集支持Linux计算节点后带来的场景思考


1.企业管理员不熟悉linux,只熟悉windows,想搭建一套HPC群集,微软自家降低学习成本

2.企业已有linux,但是配置linux hpc群集过于复杂,管理员可以挑选微软hpc pack作为HPC头节点,计算节点全部采用linux节点

3.可以通过在头节点配置存储复制或S2D,对象存储等技术,将一些微软上面特有的技术,带给linux计算节点

4.企业有linux,也有windows,希望同时利用,可以搭建一套微软高性能群集,同时添加linux计算节点,windows计算节点

5.微软hpc pack目前看来不单独收费,只要有正规的windows license或azure订阅即可安装使用

6.可以建立windows节点作业模板,linux节点作业模板,如果我们无法做到并行程序跨平台,就可以让用户写的程序windows的就只能提交到windows节点,linux的就只提交到linux计算节点

7.利用Docker,HPC Pack现在已与Docker集成。用户作业可以提交请求Docker镜像的作业,并且HPC Job Scheduler将在Docker中启动该任务。NVIDIA Docker GPU作业和跨Docker MPI作业均受支持


HPC群集可以支持Linux计算节点之后,下一步主要需要思考的就是如何能让作业跨windows节点和linux节点执行,选用什么样的并行接口程序来实现跨平台的并行,在异构系统都具备HPC环境的情况下,如何能够实现一个作业同时提交给windows和linux节点,都能输出理想的结果


微软高性能群集,Linux,与Azure


老王认为使用公有云无非是需要考虑两个平衡,第一个平衡是我有多大程度上可以信赖公有云,第二个平衡是我的数据有多大程度上不可以公开给公有云,结合这两个平衡考虑,选择出一个可以接受的负载,放到公有云运行,下面是老王整理的一些HPC群集和Azure融合的场景,感兴趣的朋友可以结合自身的环境去思考选用


  1. 本地没有服务器环境,在Azure市场申请搭建HPC群集,用于完成计算

  2. 构建混合HPC环境,本地搭建HPC头节点,计算节点,Azure也搭建计算节点,当本地计算环境达到阀值,启动Azure计算节点辅助完成计算

  3. 本地没有Windows授权,直接申请Azure虚拟机,自带系统授权和HPC授权

  4. Azure上面添加linux计算机节点有脚本帮助我们自动完成

  5. 需要完成重大运算,本地资源不足,临时开启Azure虚拟机,运算完成删除关闭虚拟机


相信一些朋友看过后会对微软hpc pack产生兴趣,这里老王给出一个我的学习路线建议

  1. 了解什么是高性能群集

  2. 了解什么是高性能群集作业管理,作业调度,资源管理

这两点可以在百度文库,国内博客上面获得

3.查看微软官网,了解微软hpc pack概念,架构,对于作业调度,资源管理等概念如何实现

4.了解HPC pack 作业申请过程 ,资源如何管理

这部分内容可以参考https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/hpc-server-2012-R2-and-2012/jj899615(v%3dws.11)

5.了解并行计算,并行计算方式,并行计算程序,这些如何在微软HPC群集上面工作

6.实战添加windows计算节点,添加linux计算节点,配置门户

7.实战裸金属部署windows节点

8.实战提交作业,观察HPC作业调度过程

9.熟悉HPC pack群集管理器,资源管理功能,报表功能

10.了解hpc pack在azure上面场景,参考https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/ruby-rails-web-app



HPC pack支持整合科学计算环境:NAMD,OpenFOAM,STAR-CCM+环境,InterMPI,Matlab


Matlab整合介绍

https://ww2.mathworks.cn/help/mdce/configure-parallel-computing-products-for-hpc-server.html

https://blogs.technet.microsoft.com/hpc_and_azure_observations_and_hints/2011/12/12/running-matlab-in-parallel-on-a-windows-cluster-using-compiled-matlab-code-and-the-matlab-compiler-runtime-mcr/


NAMD,OpenFOAM,STAR-CCM+环境,InterMPI整合介绍

https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/hpcpack-cluster-starccm