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
老王总结的配置步骤如下
为linux主机修改主机名
在windows dns服务器上添加linux主机DNS记录,确保安装过程中head主机可以找到linux计算节点
为linux主机导入windows环境根证书,头节点证书公钥,确保证书可以验证,linux主机可以正确打开https://头节点fqdn(此步骤需重启生效)
在linux主机上面添加头节点主机名和FQDN名称进入/etc/resolv.conf,最好使用永久生效方式,确保互相正常解析
通过FileZilla或其它工具,将hpc pack linux aget tar gz,setup.py,头节点带私钥证书拷贝进入linux目录
在linux主机安装hpc pack agent代理需要联网通过yum install下载依赖组件,因此需要让安装过程linux主机可以临时联网下载组件
通过python命令开始安装setup.py,正常情况下centos或redhat安装完成后都有这个命令,如果在终端输入python无效,需自行下载安装
严格按照setup.py脚本指示安装代理
检查安装过程日志,以及nodemanager.json,如果出现主机名,需修改为FQDN,因为主机名称无法通过SSL验证
一切顺利,安装成功后,经过一杯茶的时间,可以在头节点看到被添加进来的linux计算节点,联机即可
1.为linux主机修改主机名,最好安装时指定,否则可以使用hostname linuxnode01修改
2.在windows dns服务器上添加linux主机DNS记录
3.导出windows CA根证书与头节点安装证书,不带私钥版本,导出格式选择Base 64编码
导出完成后得到两个文件,一个是头节点安装证书不带私钥的cer,一个是企业根信任证书的cer,如果是自签名证书仅导出安装证书不带私钥的cer即可
直接将文件后缀重命名为pem,便于我们在linux上面导入证书
通过filezilla工具,拷贝这两张证书,放置到centos或redhat的/etc/pki/ca-trust/source/anchors路径下
在centos或redhat上面进入bin目录下,输入update-ca-trust,更新证书列表,会将我们放进anchors的证书导入
导入之后重启操作系统,在浏览器栏输入https://hpc01-head.oa.com ,出现以下结果,即代表配置成功
如果出现证书不受信任的提示,则一定要重新配置,检查证书位置,以及是否导入,务必确保地址可以正确打开,因为linux里面对于证书要求非常严格,如果SSL证书不信任,是不允许直接打开SSL网站的
但是我们在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的朋友还是建议使用永久修改方法
添加完成后尝试在头节点ping linux节点主机名,主机名加域名,在linux节点ping头节点主机名,FQDN名,都能ping通即配置成功
5.通过FileZilla或其它工具,将hpcnodeagent.tar.gz,setup.py,头节点安装时带私钥证书拷贝进入一个linux目录
hpcnodeagent.tar.gz,setup.py可以在hpc pack 头节点安装包解压目录中找到
HPCcom.pfx是我们安装hpc pack 头节点时申请的证书,导出那张证书,带私钥一起导出
6.在linux主机安装hpc pack agent代理需要联网通过yum install下载依赖组件,因此需要让安装过程linux主机可以临时联网下载组件
hpc pack liunx agent安装的时候需要联机下载一些必备组件,实验中老王临时把HPC网络接入了vmwareNAT网络,实际企业环境建议临时让其中一个网络联网,或临时新加入一个网卡
如果安装linux hpc pack代理时不能联网,则会出现以下错误
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
如果怕麻烦可以直接输入python setup.py,会弹出setup.py帮助内容,直接可以复制粘贴,再修改为我们的内容
严格按照setup.py说明安装代理,一个参数和大小写都不能错,最好是直接复制示例内容然后修改
在安装步骤进行到大约这里时
打开/opt/hpcnodemanager/nodemanager.json,检视NamingServceUri一栏,如果是hpc01-head这样的主机名,请一定把它改成hpc01-head.oa.com
因为我们在windows端绑定的证书名称是fqdn名称,因此我们导入到linux的证书,也只会匹配fqdn名称,如果这里以主机名访问,则会因为名称与证书不匹配而无法直接打开网页,导致没办法向头节点注册
安装成功后,经过一杯茶的时间,可以在头节点看到被添加进来的linux计算节点
安装过程日志排错
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群集中,可以正常承载头节点派发给它的作业任务
支持直接在群集管理器对linux节点执行命令
支持使用clusrun提交作业直接在linux计算节点执行
支持通过群集管理器汇总显示linux计算节点数据
支持通过客户端程序,portal,提交参数扫描作业至linux节点
Linux计算节点不支持的场景
linux计算节点仅支持单头节点的部署,如果采用群集头节点,则无法使用linux计算节点
要在Linux节点上运行MPI应用程序,您必须在节点上安装自己的MPI。包含在HPC Pack中的Microsoft MPI(MS-MPI)仅在Windows节点上运行。调度程序必须在Linux节点之间建立互信,HPC Pack 2016 Update 1会自动为用户生成密钥对。
不支持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融合的场景,感兴趣的朋友可以结合自身的环境去思考选用
本地没有服务器环境,在Azure市场申请搭建HPC群集,用于完成计算
构建混合HPC环境,本地搭建HPC头节点,计算节点,Azure也搭建计算节点,当本地计算环境达到阀值,启动Azure计算节点辅助完成计算
本地没有Windows授权,直接申请Azure虚拟机,自带系统授权和HPC授权
Azure上面添加linux计算机节点有脚本帮助我们自动完成
需要完成重大运算,本地资源不足,临时开启Azure虚拟机,运算完成删除关闭虚拟机
相信一些朋友看过后会对微软hpc pack产生兴趣,这里老王给出一个我的学习路线建议
了解什么是高性能群集
了解什么是高性能群集作业管理,作业调度,资源管理
这两点可以在百度文库,国内博客上面获得
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