全部产品

自动伸缩

更新时间:2020-07-20 10:34:32

E-HPC自动化伸缩可以根据您配置的策略动态分配云资源,例如您可以设置根据实时负载自动增加或者减少云资源。E-HPC自动化伸缩可以为您:

  • 减少管理运维集群的人力成本。
  • 保证可用性的前提下,最大限度减少云资源消耗,降低集群成本。
  • 提高容错能力,自动化伸缩自动检测节点状态,停止处于错误状态下的节点,并创建新的节点。
  • 提高可用性,保证集群有充足的云资源。

队列调度自动伸缩策略

在多种类型业务和计算的驱动下,您可能需要在一个E-HPC集群里面运行不同类型的作业,而每种类型的作业对资源的需求是不一样的,例如,前处理作业需要普通8核32GiB内存的ECS虚拟机,后端计算性任务需要使用裸金属服务器。E-HPC为您提供了支持多队列部署的功能以及自动伸缩支持多队列的弹性配置策略。E-HPC支持多队列部署功能如下所示:

  • 扩容时支持指定新的实例类型
  • 创建集群和扩容时支持加入指定队列,如果队列不存在则会自动创建队列
  • 提交作业时支持提交到指定队列
  • 支持跨AZ扩容和缩容,以解决单个AZ域内资源库存不足的问题

配置自动伸缩服务

用户创建集群的时候,默认自动伸缩服务是没有启用的,用户如果希望使用的话,可以通过登录E-HPC管理控制台,点击左侧栏“自动伸缩”,跳转至自动伸缩页面进行手动配置。autoscale

配置项说明

自动伸缩页面提供以下三个模块的配置内容和展示:

全局配置

  • 开关设置:勾选后表示为集群的所有队列开启自动扩容和自动缩容。当单个队列中指定开启了扩容或缩容时,则以队列设置为优先,此处参数不需要再设置。
  • 集群计算节点数(MaxNodesInCluster):集群可以扩容的计算节点数量范围,上限值为集群中各队列最大节点数总和,下限值为各队列最小节点数总和。
  • 缩容时间(ShrinkIntervalInMinutes):指节点连续空闲时间,默认6分钟,可取值为4,6,8,10,单位分钟。缩容时间由缩容时间间隔和节点连续空闲次数决定的。其中,缩容时间间隔默认2分钟;节点连续空闲次数指资源收缩检查时,一个节点连续处于空闲的次数,默认值3,可取值为2,3,4,5。缩容时间 = 缩容时间间隔 * 连续空闲次数,如果一个计算节点连续空闲超过3次,就会被释放,所以默认配置下,一个资源的连续空闲时间超过6分钟,就会被释放。
  • 镜像类型(ImageOwnerAlias):为集群中所有队列新扩容的节点配置镜像,可选值为system、self、others 或 marketplace。
  • 例外节点列表(ExcludeNodes):不使用自动伸缩的节点列表,以半角逗号分割。用户如果希望一直保留某个实例存在,空闲时不被收缩,可以使用此配置项。

队列配置

说明:

  1. 当前自动伸缩页面,限定最多显示8个队列的配置信息,可通过选择显示不同队列来进行指定队列的配置操作。
  2. 当前自动伸缩队列配置中,限定单个队列可支持最多8个实例规格。
  • 队列名称(QueueName):为扩容计算节点指定的队列名称。
  • 最大节点数(MaxNodesInQueue):单个队列可允许扩展的最大节点数量,默认值100。
  • 最小节点数(MinNodesInQueue):单个队列可允许的最小节点数量,默认值为0。
  • 自动扩容(EnableAutoGrow):是否启动单个队列中的自动扩容,默认值为false,取值为true,false。
  • 自动缩容(EnableAutoShrink):是否启动单个队列的自动缩容,默认值为false,取值为true,false。
  • 主机名前缀(HostNamePrefix):用以区分标记不同队列节点实例的标志。
  • 镜像类型(ImageOwnerAlias):为单个队列扩容的节点配置镜像类型,可选值为system、self、others 或 marketplace,不同队列可单独配置不同镜像类型。
  • 镜像ID(ImageId):单个队列扩容ECS实例所属镜像ID,不同队列可单独配置不同镜像ID。

    说明:该配置项只针对当前队列,若队列中不指定镜像类型和镜像ID,则扩容ECS实例镜像由全局配置中的镜像类型配置决定,若全局配置中也没有指定镜像类型,则扩容ECS实例镜像保持和集群默认镜像类型一致。

  • 实例配置(InstanceType):单个队列中扩容计算节点实例规格,竞价策略,每小时最高价格。扩容的实例规格,如果没有配置,就使用上次扩容或者创建集群时的计算节点实例规格。
  • VPC:创建集群时配置的VPCId,不可更改,且扩容的所有队列节点实例均必须在该VPC下。
  • 配置清单:

    • 可用区(ZoneId):集群所在地域的不同可用区,如cn-hangzhou-b,cn-hangzhou-h。
    • 虚拟交换机ID(VSwitchId):与集群VPC绑定且在指定可用区的不同可选虚拟交换机ID。
    • 实例类型(InstanceType):单个队列中扩容计算节点实例规格。

      注意在自动扩容时,按照配置清单中的由上而下的顺序扩容,只有当上一个实例类型库存不存在或者库存不足时才会跳开上一个,开始扩容下一个实例类型。

    • 竞价策略(SpotStrategy):扩充的实例需要配置的竞价方式。有三种选择:不使用抢占实例;设置上限价格的抢占实例;系统自动出价,最高按量付费价格。
    • 每小时最高价格(SpotPriceLimit):在竞价策略为“设置上限价格的竞价实例”时,需要设定每小时最高价格区间。

集群自动伸缩示意图

该部分目的在于向用户清楚展示在自动缩容和扩容的过程中,节点数随时间推移的变化,以及在关键时间点实例缩容扩容所耗费时间的变化。其中,用户可在全局配置中设置集群计算节点数和缩容时间,以及模拟并发节点数等参数,来手动模拟自动伸缩的全过程。

模拟并发节点:模拟作业负载所需计算节点的数量。

配置操作步骤

  1. 登录 E-HPC管理控制台,点击左侧栏自动伸缩,跳转至自动伸缩页面开始配置。
  2. 打开全局配置中的启动扩容,启动缩容按钮。
  3. 选择缩容时间,默认为6分钟即可。
  4. 选择镜像类型,如,公共镜像和CentOS_7.6_64。
  5. 在队列配置中,选中需要配置的队列后,点击“编辑”按钮,弹出队列配置信息框,开始队列配置。
  6. 点击配置清单右侧的“增加”按钮,弹出“新建配置”框,选择目标可用区和目标虚拟交换机ID,如果目标可用区没有可用的虚拟交换机,可以点击页面中“创建子网(交换机)”按钮进行创建。
  7. 选择目标扩容实例类型,或者可以手动输入,再根据实际情况选择竞价策略。
  8. 点击“确认”按钮,添加配置信息到配置清单中。
  9. 在队列配置页面,点击“启动扩容”和“启动缩容”按钮,配置队列节点数最小值和最大值(如2-10),配置主机名前缀用以区分和方便记忆,配置镜像类型(如公共镜像)和镜像ID(如CentOS_7.6_64)。
  10. 点击左下角“确认”按钮,完成队列配置。
  11. 在自动伸缩页面。点击右上角“确认”按钮,提交自动伸缩配置。

使用场景及实践

总的来说,自动伸缩服务适合于不使用包年包月服务的用户,比如:

用户每天集中提交一批作业,使用HPC集群几个小时进行大规模计算, 然后释放资源。用户不定期的会提交作业,但不是每天24小时满负荷运行的。针对不同的作业类型,用户可以使用不同的配置项参数,根据自己的HPC集群实际使用情况进行自定义配置。例如批量作业,作业数量大,单作业运行用时短,则用户可以通过配置扩容比例(GrowRatio)来调节扩容的比例。若用户提交1000个作业,每个作业虚使用一个CPU,运行1分钟。则用户可以配置GrowRatio为10,那么就会扩容100个CPU。

E-HPC集群运行lammps算例

操作实现步骤:

  1. E-HPC管理控制台开始创建集群,其中软件包选择LAMMPS,或者软件列表选择lammps-openmpi/31Mar17、mpich/3.2和openmpi/1.10.7。

  2. 在软件配置界面的高级配置下,指定集群需要加入的队列,如low,此时该队列会自动创建。此外,也可以在“节点和队列”界面单独创建队列,具体操作请参照节点管理

  3. 集群创建完成后,转到自动伸缩界面开始配置:队列配置模块选择low队列,点击右侧“编辑”按钮,在队列配置弹出框点击“增加”按钮,新建需要扩容的节点可用区、虚拟交换机ID、实例类型(如ecs.n1.tiny),然后点击左下角“确认”按钮,提交新增配置。

  4. 继续在队列配置弹框中,打开启动扩容和启动缩容开关,设置队列节点数范围为2-10,主机名前缀为computeLow,镜像类型为公共镜像,镜像ID为CentOS_7.6_64,点击左下角“确认”按钮,提交队列配置。(对于pbspro来说,workq是默认队列,会自动创建,当新增加的nodes未指定队列时会默认加入到workq队列)

  5. 在自动伸缩页面,右上角点击“确认”按键,提交所有自动伸缩配置。

  6. 自动伸缩启动之后,如果没有作业运行,几分钟之后,指定low队列会扩容一个计算节点以保持最小节点数2个。

  7. 在控制台用户界面创建集群用户,用户组可以是普通权限组或者sodo权限组,本例设置为普通权限组。用户会把相应的数据,及程序放到NAS共享存储上。

  8. 在控制台左侧打开作业界面,右上角点击“创建作业”按键,创建并提交作业。具体操作和脚本文件,请查看LAMMPS实践操作步骤。此外,用户可通过在线新建编辑,或者OSS文件上传的方式来进行SubmitJob的操作,请参看作业管理模块的描述,进行作业信息配置和作业脚本文件创建。

    其中,lammps脚本为:

  1. #!/bin/sh
  2. #PBS -l select=3:ncpus=1:mpiprocs=1 #指该脚本在3个计算节点上运行,使用1个CPU,1个MPI进程
  3. #PBS -j oe
  4. export MODULEPATH=/opt/ehpcmodulefiles/
  5. module load lammps-openmpi/31Mar17
  6. module load openmpi/1.10.7
  7. echo "run at the beginning"
  8. mpirun lmp -in ./lj.in

9.两分钟左右,从控制台可以看到,low队列自动扩容了一个计算节点在安装中。

10.几分钟后,计算节点状态变为Running,此时作业开始在当前low队列的3个节点上运行。

11.作业运行完毕之后,可以通过点击作业界面的已完成列表右侧的“详情”按键,查看作业运行详情信息。

12.没有新的作业运行时,6分钟之后,low队列中空闲的计算节点会被释放掉,但会保持该队列最小节点数目的计算节点存在。

13.点击控制台左侧栏操作日志,可以看到扩容和缩容的日志记录。其中,自动缩容时,若没有设置例外节点,缩容是按照计算节点创建的先后顺序进行收缩的。

SGE(SunGridEngine)支持自动伸缩配置

SGE队列如果为空,没有任何计算节点的时候,用户提交作业的时候,会提交失败,或者作业不会被分配到默认队列中。因此如果在SGE集群中使用自动伸缩,可以使用如下的方式之一:

  • 保持队列中至少有一个节点,在自动伸缩配置页面,设置“例外节点列表”包含这个节点这样保证集群至少有一个计算节点, 如果集群需要保持最小规模的话,推荐使用这种方式
  • 添加dummynode到队列中,可以参考以下的设置(在调度器节点上):

    1. 在/etc/hosts增加记录:

      127.0.0.1 dummynode0

    2. 将dummnynode0加入默认节点组:

      qconf -aattr hostgroup hostlist dummynode0 @allhosts

      用户也可以使用类似命令将dummnynode0加入到别的节点组或者队列。