LSF实践专题(24):如何在AWS上部署LSF集群

目录

注册并申请AWS虚拟机

登录虚拟机并安装LSF管理节点

为LSF集群的计算节点镜像创建虚拟机实例

登录计算节点实例,安装LSF server端

为当前计算节点创建镜像

登录管理节点,完成剩余的云部署配置

对LSF集群的作业进行云调度

LSF在云部署环境的日志


随着公有云技术的日益成熟,越来越多的客户开始了云上之旅。LSF作为一个功能强大、在HPC领域有着广泛应用的调度软件,也在最新的版本中增加了对主流云厂商的支持。本文介绍如何在AWS上创建和部署LSF集群环境,可以实现根据工作负载对LSF集群进行自动的扩容和缩容,为用户提供了一种经济合理的云上HPC调度方案,目前在国内外包括芯片设计在内的HPC领域得到了应用。本文以国外AWS为例进行介绍,配置方法在国内AWS环境也完全一样。

注册并申请AWS虚拟机

首先打开AWS的页面注册或者登录,https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Home

从Instances中选择Instances来创建一个VM实例,点击Launch instances按钮。

图片

点击按钮后会出现创建虚拟主机的页面,我们可以在这个页面中选择CPU、内存、硬盘等属性,选择操作系统的种类,并且为虚拟机实例设置一个名称。

图片

在AWS中包含了很多的虚拟机类型(type),不同的type中定义了CPU的数量、频率以及内存大小,我们需要选择不同的type来选择对应的虚拟机配置,当然,不同的type也对应了不同的单位时间价格。

我们可以看到t2.micro对应的是1个CPU和1GB内存,并且列出了这个type的Linux和Windows系统所对应的价格。

图片

我们可以从列表中选择符合要求的type来创建。

图片

选择好合适的type之后,可以为这个instance选择安全组(security group),每个security group可以使用相同的网络安全选项,包括防火墙设置等一些安全规则。

作为集群中的第一个虚拟机实例,我们选择新建一个security group,之后创建其它虚拟机实例作为集群中的运算节点时,就可以选择这个security group,让它们使用相同的安全设置。

图片

为了方便调试,这里选择了允许从所有IP地址进行ssh访问。当然也可以限制从指定IP地址进行ssh访问。

接下来选择系统盘的大小和连接类型。

连接类型里有“主要为哪些需求服务的说明”来帮助选择,速度越快的磁盘价格也越高。

图片

选择完之后,我们需要创建一个用于访问这个虚拟机的安全密钥,选择创建一个key pair,输入关键字,并且选择加密方式,然后根据“准备以何种方式访问这个虚拟机”来选择密钥的格式。最后点击创建key pair(create key pair),这时会在访问页面的电脑上下载一个名称为key pair的.pem(或.ppk)格式的文件,这个文件用于访问创建好的虚拟机,所有选择使用这个key pair创建的虚拟机都可以通过这个密钥文件来进行访问。

如果我们要从其它机器访问虚拟机,需要把这个文件传输到想要进行访问的机器上,这个我们后面访问虚拟机时会再提到。

图片

之后就会开始具体的虚拟机创建工作,我们可以看到完成情况。

创建完成后,点击查看所有Instances(View all Instances),可以列出所有的虚拟机实例。

图片

我们可以从列表看到刚才创建成功的虚拟机,创建好之后虚拟机会自动启动,状态是Running。

图片

向右滑动列表,还可以看到虚拟机的其它情况,包括外部IP地址(Public IPv4 address),我们需要这个外部地址从我们的机器上访问虚拟机,或者将这个外部地址添加到我们机器的hosts文件中用于域名解析,不过默认状态下,如果关闭虚拟机再重新启动,这个外部地址会变化。

图片

点击列表中Instance ID中的虚拟机ID,可以跳转到详细信息界面。

点击Connect可以从web页面对虚拟机进行访问,Instance state中可以对虚拟机进行关闭、启动、重启等操作,在Actions中可以对虚拟机进行镜像管理等操作。

图片

如果从web页面进行访问,点击Connect按钮,会出现下方的界面,访问的用户名要使用ec2-user,点击connect进行连接。

图片

如果想通过ssh方式进行访问,点击SSH client标签,会给出连接步骤,按照说明,将刚才下载的.pem或.ppk的密钥文件权限修改为400,然后参考页面提示通过ssh命令进行连接,默认情况下本地的DNS可能无法解析web页面上给出的主机名,也可以用刚才查看到的外部IP地址进行替换。例如:ssh -i ~/Downloads/trylsf.pem ec2-user@34.139.50.102

图片

登录虚拟机并安装LSF管理节点

图片

将LSF的安装包copy到建立好的虚拟机节点,并安装好管理节点,建议安装最新的SPK组件(如LSF10.1 SPK13或者SPK14),因为现在是各种云部署快速发展的阶段,各家云服务提供商还在陆续不断的提供新功能,LSF也在随着做出相应的支持和扩展,所以选择安装比较新的版本会更好。

图片

除了常规的安装外,还需要配置启动用于管理和调度AWS云部署的LSF Resource Connector组件。

1、编辑$LSF_ENVDIR/lsbatch/{clustername}/configdir/lsb.modules文件,将schmod_demand前的注释去掉,使这个plugin专门用于云上虚拟机的调度。

图片

2、编辑$LSF_ENVDIR/lsf.shared文件,将Resource Section里面的awshost前的注释去掉,将awshost这个Boolean resource启用。

图片

3、编辑$LSF_ENVDIR/lsf.conf文件,添加下面三个参数。

图片

LSF_DYNAMIC_HOST_WAIT_TIME=60

定义LSF等待动态host加入或离开集群的时间,单位是秒。

LSB_RC_EXTERNAL_HOST_FLAG=awshost

告诉集群当前是部署在AWS云上的,LSF目前还支持Google Cloud、Azure、OpenShift等选项。

LSB_RC_EXTERNAL_HOST_IDLE_TIME=2

这个参数是控制当AWS虚拟机上的作业完成后,等待多久以后,LSF会将其注销,参数的单位是分钟。虚拟机空闲的时候,也会收费,但是如果这个时间设置的过小,而作业量比较大,也不太合适。比如虚拟机刚刚空闲了2分钟,LSF将其注销后,马上又有新的作业需要创建虚拟机,因为虚拟机从创建到成功启动并加入到LSF集群还是需要一定的时间,这个时长取决于虚拟机的属性、云服务提供商的一些具体情况、当前LSF集群的繁忙程度,时间长短不一,通常会需要2~4分钟的时间,这个时间不能用于作业执行,但是同样会计入这个虚拟机的收费时长里, 所以如果这个创建时间和实际虚拟机执行作业的时间之比越大越不划算。所以这个参数需要根据自己集群作业的多少来决定配置多少合适。

4、我们需要配置一个或多个队列,用于调度可以在云上部署的作业,编辑$LSF_ENVDIR/lsbatch/{clustername}/configdir/lsb.queues,在想要调度作业到云上的队列中配置RC_HOSTS=awshost。

图片

5、在$LSF_ENVDIR/resource_connector中创建一个aws目录,并将owner设置成LSF的管理员,将LSF_TOP/10.1中resource_connector/aws/conf下的文件拷贝到这个目录中。

图片

6、配置访问AWS管理API的用户权限。

当作业需要在云上创建虚拟机作为执行机的时候,需要由LSF调用AWS的API在AWS上进行虚拟机instance的管理操作,所以需要建立相应的用户认证。

(1)首先打开AWS的身份权限管理(IAM)页面:https://us-east-1.console.aws.amazon.com/iamv2/home#/home

从权限管理(Access management)中选择用户(Users)。

图片

(2)点击添加用户(Add users)。填写用户名,并选择Access key作为认证类型,然后点击下一步权限设置(Next: Permissions)。

图片

(3)选择权限。

我们主要需要以下权限:

图片

由于这里的权限非常详细和繁琐,我们通过过滤来选择需要的权限。点击过滤条件(Filter policies),选择AWS Managed – job function。

图片

然后勾选SystemAdministrator。点击下一步标签(Next: Tags)。

图片

(4)设定标签。

在标签页中输入key作为标识。点击Next: Review来确认一下设置。

图片

(5)确认并创建用户。

确认设置没有问题后点击创建用户(Create user)。

图片

(6)保存Access key。

创建完成后,会显示Access key ID和Secret access key,点击查看(show)把这两个字串都保存下来,后面要填写到LSF的配置文件中。

图片

如果忘记保存,也没关系,用户创建完成之后,可以在用户列表里找到刚才创建的用户。

图片

点击用户名可以打开详细信息界面。选择Security credentials,点击Create access key。

图片

点击Download .csv file可以下载一个.csv格式的文件,里面的内容就是刚才看到的access key ID和secrete access key,也可以直接从页面复制保存。

图片

(7)在LSF中配置access key。

打开刚才拷贝到$LSF_ENVDIR下的$LSF_ENVDIR/resource_connector/aws/conf/credentials文件,这里两个默认的参数就是access key ID和secrete access key,将刚才保存的字串填写到这个文件中。

图片

打开$LSF_ENVDIR/resource_connector/aws/conf/awsprov_config.json文件,确认AWS_CREDENTIAL_FILE的路径是正确的。

图片

7、将resource connector的provider配置为AWS。

打开$LSF_ENVDIR/resource_connector/hostProviders.json文件,按照以下内容进行配置。

图片

8、将LSF_TOP/10.1/resource_connector/aws/scripts/下的example_user_data.sh拷贝成user_data.sh到原位置。

图片

然后打开该文件。

图片

修改LSF_TOP为实际的集群安装路径。

图片

在文件的末尾,添加LSF启动命令,让脚本可以成功启动LSF的lim、res和sbatchd daemon。并且检查脚本是否具有执行权限。

图片

到这里,管理节点的配置先告一段落,后续还需要根据建立的计算节点的镜像信息做一些模板设置,我们在完成了计算节点的镜像建立后再继续设置。

为LSF集群的计算节点镜像创建虚拟机实例

再次打开虚拟机实例页面:https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Home

按照刚才的方式再创建一个虚拟机实例,用于安装LSF的计算节点。

图片

这次在网络设置中不需要再创建新的security group,而是选择使用刚才创建的security group。

图片

完成后,在虚拟机列表中点击创建好的计算节点的instance ID。

图片

选择安全(Security)页面。

图片

确认Inbound rules里面没有屏蔽所需要的端口,保证计算节点可以正常和管理节点进行通信。

图片

登录计算节点实例,安装LSF server端

以相同的ssh方式登录刚刚创建好的计算节点,因为我们选择使用了同一个security group,所以刚才的.pem格式的认证文件仍然可以使用,只需要更换登录的主机名称或IP地址就可以了。

图片

安装LSF server端

进入解压好的lsf10.1_lsfinstall目录,我们需要去掉下列几个参数的注释并进行配置。

图片

LSF_TOP是计算节点上LSF集群的安装位置,建议和管理节点配置成相同路径,便于启动。

LSF_ADMINS和管理节点上配置成一样的。

LSF_TARDIR是LSF安装包位置,按照实际配置就可以。

LSF_ENTITLEMENT_FILE是lsf的entitlement文件路径。

LSF_SERVER_HOSTS配置成实际的LSF管理节点的名字,注意计算节点和管理节点之间的主机名称要能互相解析并连通。

LSF_LIM_PORT配置与管理节点相同。

ENABLE_EGO这里习惯配置成N,保持与管理节点相同即可。

执行./lsfinstall -s -f ./server.config进行安装。

图片

安装完成后,进入计算节点的LSF_TOP目录,执行source LSF_TOP/conf/profile.lsf,并打开$LSF_ENVDIR/lsf.conf文件,增加配置LSF_LOCAL_RESOURCES=”[resource awshost]”。

图片

在计算节点启动lim、res和sbatchd,等待当前计算节点成功加入LSF集群。因为当前节点是以动态server加入集群,所以lshosts命令会显示当前的server类型为Dyn。

图片

可以尝试通过以下命令提交一个需要awshost资源的作业,应该可以在当前节点运行:

bsub -R "awshost" sleep 100

为当前计算节点创建镜像

回到EC2的instances页面:https://us-west-2.console.aws.amazon.com/ec2/v2/home?region=us-west-2#Home

勾选LSF计算节点的虚拟机实例,从Actions中选择Image and templates,点击Create Image为这个实例创建一个镜像。

图片

输入一个镜像名称,例如lsfserver-image-1,以便查找和管理。指定启动这个镜像所需的磁盘空间大小。

图片

镜像创建完成后,可以在列表中看到,这时有个AMI ID,我们将这个镜像的AMI ID保存下来。

图片

创建完成后将刚才的计算节点的虚拟机实例关闭(stop)。

登录管理节点,完成剩余的云部署配置

再次回到刚才的LSF集群管理节点,打开文件$LSF_ENVDIR/resource_connector/aws/conf/awsprov_templates.json,按照以下方式添加刚才创建的镜像以及相关属性,用于LSF在AWS云上进行作业调度。

图片

因为在AWS上不同配置的VM会有不同的价格,所以我们可以创建几种不同配置的虚拟机镜像,给不同需求的作业使用,我们可以在awsprov_templates.json中将每一种不同的配置创建为一个template,在“templates”中可以包含多个template的配置段落,每一个段落确保有唯一的templateId

maxNumber是指当前这个template可以用来创建最多几个实例,比如当前有3个作业,都需要同一种template为模板的虚拟机实例,但是maxNumber为2 ,那么LSF会为前两个作业各创建一个虚拟机实例,但是不会创建更多的实例。

attributes中是为当前这个template在LSF集群中设定的属性,LSF会根据这些属性来调度作业,这些属性就好比LSF集群中实际存在的计算节点上的属性一样。常用的属性包括type、ncores、ncpus、mem、awshost。这些属性的配置需要两个值,第一个是属性的类型,第二个是属性的值。比如一个作业需要同一台节点上有两个core,memory要求大于1G,LSF在决定使用哪个template作为模板部署云节点时,就会逐个检查每个template的attributes中的属性是否满足,不满足就去看下一个template。

imageIdsubnetIdsecurityGroupIds需要根据刚才在AWS中创建的镜像属性来填写, 其中imageId就是AMI ID。

vmType是VM实例规格,这个必须是AWS中支持的名称才可以,同时还要考虑到镜像所支持的硬件,否则镜像中的操作系统可能无法正常使用创建的虚拟机实例。这个type还会和attributes中的ncores、ncpus、mem有关,如果所选的type中的配置和attributes中填写的不一致,就会造成LSF按照错误的信息来创建VM实例,结果就是创建好实例后不满足作业的需求,导致作业不能运行,或者是创建了配置超过作业要求的VM实例导致不必要的费用。所以可以根据实际作业需求和作业规模,使用相同的镜像创建几个不同配置的template,并且根据每个template设置的vmType来填写对应的attributes,LSF就可以灵活地选择创建何种配置的VM实例来满足不同作业的需求。

keyNameinstanceTags主要是为VM实例做一些方便管理的标注,可以根据自己的需要设定。

userData中可以设置从哪个区域创建VM实例, 这些区域也要和AWS列表中的选项匹配, 不同区域能够提供的type类型会有所区别,而相同type类型在不同区域的价格可能也会不同,有些稀缺的硬件可能只在某些区域才有,或者不同区域的配额不同,需要用户结合实际情况进行设置,同时还要考虑计算节点和提交端以及管理节点之间的通信效率。

设定完成之后,保存并关闭awsprov_templates.json,将管理节点上的lim和mbatchd重启:

lsadmin limrestart

badmin mbdrestart

对LSF集群的作业进行云调度

现在我们就可以提交作业来验证云部署情况了。

在云上运行的作业,需要被提交到配置了RC_HOST=awshost的队列上,并指定"awshost"这个资源, 例如:

图片

作业<101>提交后,LSF会首先查看当前集群中有没有可以使用的awshost节点,如果有,会直接将作业调度到该节点运行。

如果没有可用的节点,LSF会依次检查awsprov_templates.json中的各个template,选出第一个符合要求的template,然后与AWS通信,根据template中的配置创建一个虚拟机实例。

当虚拟机实例创建完成后,会通过user_data.sh启动LSF进程lim、res和sbatchd,然后这些进程根据lsf.conf中的配置与管理节点的LSF进程通信,并加入到LSF集群中。

按照我们刚才的配置,计算节点会以动态host的方式加入集群,然后LSF就会将刚才的作业调度到这个节点上运行。我们可以通过AWS的管理页面以及LSF中的lsload,bhosts等命令观察到这个过程。

图片

图片

当作业结束后,如果有更多等待执行的作业,LSF也会尝试将作业调度到已经空闲下来的云节点上,如果这个云节点上有一段时间没有任何作业执行,LSF就会与AWS通信来terminate掉这个虚拟机实例。这个时间长度是由lsf.conf中的LSB_RC_EXTERNAL_HOST_IDLE_TIME来控制的,这个值表示空闲多少分钟后会触发terminate。

当某个云节点的空闲时间达到这个设定的时长后,LSF会首先将这个节点的状态变为closed_RC,并且触发terminate机制。状态设置成closed_RC会导致普通的bhosts不再显示这个节点,通过bhosts -a才可以列出closed_RC的节点,并且这些closed_RC的节点也不再参与作业的调度。

当云节点被AWS删除后,管理节点会失去该节点上lim的连接信息,就会将这个节点在lsload中显示为unavail状态,在大概10分钟后,会将其从lsload显示列表中删除。

图片

图片

LSF在云部署环境的日志

在云环境下配置LSF时,如果发生错误,我们可以查看这两个日志:

ebrokerd.log:ebrokerd服务进程负责template的检查和调度,如果template配置有问题或者在选择template过程中出现了问题,可以查看这个日志文件。

aws-provider.log:LSF与AWS通信进行VM的查询、创建、删除等操作时出现了问题,会记录到这个日志中。

图片

这两个文件默认只记录运行和错误信息,如果想查看运行时更多的debug信息,或者只关注发生错误的信息,可以在$LSF_ENVDIR/resource_connector/aws/conf/awsprov_config.json中,将LogLevel设置成不同的值(例如DEBUG、WARN、ERROR、FATAL等),默认日志级别是INFO。

图片

以上是在AWS中部署LSF集群的基本操作,有问题欢迎在留言区与我们交流。

欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。

HPC常青园

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivyent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值