混合云集群在云上部署代理节点(proxymgr),打通本地集群与云端的网络、域账号和调度器。本地负载超限时,自动扩展ECS资源缓解IDC压力。本文介绍如何在控制台创建混合云标准版集群。
背景信息
混合云集群由以下部分组成:
-
计算节点:由多个ECS实例组成,按队列分组管理,支持扩缩容,用于运行作业。
-
云上代理节点(proxymgr):对应一个ECS实例,部署了调度器插件,用于感知本地集群调度器负载信息,并触发ECS资源的弹性扩缩容。
工作原理:本地调度器检测到队列负载超限时,代理节点自动申请ECS资源。计算节点加入本地队列参与作业调度。作业完成后,节点按缩容等待时间自动释放。
-
创建E-HPC集群时,自动创建ECS实例等资源,可能产生费用。详见计费概述。
-
创建E-HPC集群后,通过弹性高性能计算控制台调整节点。勿直接使用云服务器ECS控制台操作单个节点。
-
混合云集群需要具备网络、域名账号和调度器运维经验。无运维经验,建议使用标准集群或托管版集群。更多关于E-HPC集群的相关信息,请参见集群概述。
前提条件
-
已创建服务关联角色。首次登录E-HPC控制台,按提示创建服务关联角色。
-
已创建本地集群DNS、域账号和调度器环境。
-
已打通本地集群与云上VPC的网络连通性。
-
混合云集群仅支持使用插件模式代理以下外部调度服务:
-
LSF调度服务。
-
SLURM调度服务。
-
PBS Pro调度服务。
-
-
已准备本地集群对应版本的调度器客户端安装包。
-
PBS:参见PBS Professional。
-
Slurm:参见Slurm。
-
LSF:可在集群创建后通过共享存储安装。
-
操作步骤
步骤一:创建混合云集群
-
单击前往创建集群页面。
-
集群配置:
-
专有网络VPC:选择已与本地集群打通网络的VPC。
-
安全组:建议选择与本地集群相同的安全组;如不同,需在安全组入方向开放调度器、域账号等服务的端口。
-
部署模式:选择混合云集群。
-
集群类型:根据本地集群调度器类型选择。
-
LSF-Plugin:使用插件模式代理外部LSF调度服务
-
PBS Pro-Plugin:使用插件模式代理外部PBS Pro调度服务
-
SLURM-Plugin:使用插件模式代理外部Slurm调度服务
-
-
云上代理节点:选择合适的实例规格和可用镜像(系统提供默认镜像 CentOS 7.6)。
-
-
软件组件:可选,默认为空,直接跳过。
-
确认配置:集群名称自动生成(如
lsf-plugin-hybrid-cluster-20260331),可修改。设置节点登录密码,单击创建集群。
步骤二:配置混合云集群
-
进入集群列表,单击集群名称。在概览页单击配置,进入配置向导。
-
单击远程连接按钮,登录proxymgr节点。
步骤三:根据本地环境手动加入proxymgr节点
-
DNS及域账号服务加入
DNS解析 + Windows AD域控
DNS解析 + Windows AD域控:
-
proxymgr节点安装SSSD软件
yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python -
设置AD Server hostname解析
执行
vi /etc/hosts命令编辑hosts文件,添加AD Server hostname解析。示例如下:-
10.0.XX.XX:本地AD域控服务器的IP地址,请确保可以访问该IP地址。
-
ted-test:本地AD域控服务器的hostname。
-
test.com:本地AD域控的域名后缀。
10.0.XX.XX ted-test.test.com ted-test说明:示例中的ted-test.test.com会作为SSSD中AD Server的参数,需要解析其IP地址。
-
-
在DNS Server增加proxymgr的正向解析及反向解析记录
-
设置DNS地址
执行
vi /etc/resolv.conf命令编辑DNS配置文件,添加的内容示例如下:# 补全test.com域名 search test.com # 10.0.XX.XX为本地DNS服务器的IP地址,如果不使用本地DNS服务,可以不设置nameserver nameserver 10.0.XX.XX -
加入域
通过
realm join命令将ECS实例加入到域中。realm join -v --user=administrator ted-test.test.com命令说明如下:
-
--user:本地AD域控的管理员用户,如administrator,加域过程中需要输入该用户密码。
-
-v:显示加域过程信息。
-
ted-test.test.com:本地AD域控的域名,一般是
<hostname>.<domain>格式。 -
--computer-name:可选参数。如果没有指定该参数,加域时系统会自动通过hostname获取。
提示Successfully enrolled machine,则加域成功。自动生成/etc/sssd/sssd.conf和/etc/krb5.keytab。
-
-
查询加域结果。
通过
realm list命令查询,如果返回信息中包含了本地AD域控的域名后缀(本文示例为test.com),则表示加域成功。 -
执行
vi /etc/sssd/sssd.conf命令修改sssd.conf配置文件。修改内容如下:
-
use_fully_qualified_names = False: -
fallback_homedir = /home/%u:设置用户目录和名称。
[sssd] domains = test.com config_file_version = 2 services = nss, pam debug_level = 6 [nss] debug_level = 6 [pam] debug_level = 6 [domain/test.com] ad_server = ted-test.test.com ad_domain = test.com krb5_realm = TEST.COM realmd_tags = manages-system joined-with-adcli cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = False fallback_homedir = /home/%u access_provider = ad修改后需执行
systemctl restart sssd重启SSSD服务。 -
-
测试用户账号同步情况。
-
同步用户目录:通过
su命令切换用户,查看用户目录是否与sssd.conf配置文件中fallback_homedir的设置一致。 -
新增用户并测试:在本地AD域控中创建一个新的用户,在线上测试是否可以切换。
-
-
退出域。
加域生成与机器绑定的唯一krb5。以加域实例制作镜像,新实例会出现加域状态异常。制作镜像前必须先退域。
realm leave test.com -
把加域操作写入服务器的启动脚本中(例如
/etc/rc.local)。echo "your passwd"|realm join -v --user=administrator TED-TEST.test.com
hosts文件解析 + NIS
hosts文件解析 + NIS:
-
proxymgr节点安装ypbind软件
yum install -y ypbind yp-tools -
proxymgr节点配置NIS
# 补全test.com域名 echo NISDOMAIN=test.com >> /etc/sysconfig/network 10.0.XX.XX为本地NIS服务器的IP地址 echo domain test.com server 10.0.XX.XX > /etc/yp.conf -
proxymgr节点配置名称解析顺序为NIS优先
sed -i "s/\(^\s*passwd:.*\)/\1 nis/" /etc/nsswitch.conf sed -i "s/\(^\s*shadow:.*\)/\1 nis/" /etc/nsswitch.conf sed -i "s/\(^\s*group:.*\)/\1 nis/" /etc/nsswitch.conf sed -i "s/\(^\s*hosts:.*\)/\1 nis/" /etc/nsswitch.conf sed -i "s/\(^\s*password\s*sufficient.*\)/\1 nis/" /etc/pam.d/system-auth-ac dracut -v -f -
重启ypbind服务
systemctl start ypbind.service systemctl enable ypbind.service -
在NIS Server节点/etc/hosts添加proxymgr解析
172.16.xx.xx proxymgr proxymgr -
在NIS Server更新数据库映射文件
make -C /var/yp
-
-
设置用户免密(可选)
节点间需要免密(如并行任务),按以下步骤配置。
-
选择互信的用户(以testuser为例),运行
su testuser进入该用户目录。 -
运行
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q生成密钥。执行命令后,会在当前用户目录下生成ssh/id_rsa.pub, id_rsa密钥文件。 -
运行
cat .ssh/id_rsa.pub >> .ssh/authorized_keys设置互信。 -
设置免提示。如果需要登录时免提示输入,可在
ssh/config文件中输入以下信息:Host * StrictHostKeyChecking no UserKnownHostsFile=/dev/null
-
-
设置共享存储
-
挂载本地文件系统。将挂载命令写入启动脚本,例如
/etc/rc.local文件或者/etc/fstab文件。 -
挂载阿里云NAS文件系统。具体操作,请参见挂载NFS协议文件系统。
-
-
安装调度器并将proxymgr节点加入调度器
LSF
LSF调度器安装及加入:
-
通过共享存储在Proxymgr节点安装LSF调度器客户端(LSF License需要自行解决)
-
在LSF本地管控节点修改 lsf.cluster.lsf 添加proxymgr名称
proxymgr ! ! 1 (mg) -
在LSF本地管控节点重启lsf-server服务
lsf_daemons restart -
在Proxymgr节点启动lsf客户端
/opt/lsf/10.1/install/hostsetup --top="/opt/lsf" --boot="y" lsf_daemons restart -
若不希望作业调度到proxymgr节点,则需要下线proxymgr节点
badmin hclose proxymgr
PBS Pro
PBS Pro调度器安装及加入:
-
参见PBS Professional 在Proxymgr节点安装PBS Pro客户端
-
在PBS本地管控节点执行以下命令添加Proxymgr节点
qmgr -c "create node proxymgr" qmgr -c "set node proxymgr queue = cloudq" -
若不希望作业调度到proxymgr节点,则需要下线proxymgr节点
pbdnodes -o proxymgr
SLURM(No DynamicNode)
SLURM调度器安装及加入(No DynamicNode):
-
参见 Slurm 在Proxymgr节点安装SLURMD服务
-
在Slurm本地管控节点修改slurm.conf 将proxymgr加入SLURM集群
NodeName=proxymgr Sockets=1 CoresPerSocket=1 ThreadsPerCore=2 RealMemory=3646 Gres=gpu:0 State=IDLE PartitionName=cloudq Nodes=proxymgr Default=NO MaxTime=INFINITE State=UP -
在Slurm本地管控节点重启slurmctld服务
systemctl restart slurmctld -
查看proxymgr节点是否加入调度器
scontrol show node proxymgr -
若不希望作业调度到proxymgr节点,则需要下线proxymgr节点
scontrol update node=proxymgr state=down Reason=suspend
SLURM(DynamicNode)
SLURM调度器安装及加入(DynamicNode):
-
参见 Slurm DynamicNode在Proxymgr节点安装SLURMD服务
-
在Slurm本地管控节点修改slurm.conf 增加NodeSet
## 添加configless参数 SlurmctldParameters=enable_configless ## 使用NodeSet方式 NodeSet=compNodeSet Feature=compFeature PartitionName=comp Nodes=compNodeSet Default=YES MaxTime=INFINITE State=UP -
在Slurm本地管控节点重启slurmctld服务
systemctl restart slurmctld -
在Proxymgr节点修改slurmd.service启动程序
ExecStart=/usr/sbin/slurmd -D -s -Z --conf Feature=compFeature --conf-server manager:port -
若不希望作业调度到proxymgr节点,则需要下线proxymgr节点
scontrol update node=proxymgr state=down Reason=suspend
-
步骤四:测试混合云集群环境
-
测试线上线下环境打通
-
编辑
/usr/local/ehpc_plugin/env/ehpc-cluster.yaml,替换线下环境配置(不需要检查的项,请自行注释):-
环境无DNS
-
挂载点使用nfs协议,记录nfs-server的ip
-
域账号使用NIS,记录其domain及服务节点ip、hostname
-
调度器使用SLURM,记录调度节点ip、hostname
-
环境无相关依赖服务
localInfo: # dns_server: <ip> # 选填,根据是否有该参数来判断是否有线下DNS mount_point: # 选填,根据是否有该参数来判断是否有挂载共享存储 - 172.16.xx.xx account: name: NIS # 必填,域账户名称(AD、NIS) domain: ehpc-test # 必填,域账户的域名 server_host: slurm-master # 必填,域账户服务主机名,用于检查网络 server_ip: 172.16.xx.xx # 必填,域账户服务主机IP,用于检测服务端口 user_case: testuser # 必填,用于检测用户访问连通性 scheduler: name: SLURM # 必填,调度器名称(LSF、PBS、SLURM) server_host: slurm-master # 必填,调度器服务主机名,用于检查网络 server_ip: 172.xx.xx.xx # 必填,调度器服务主机IP,用于检测服务端口 # dependency_services: # 选填,检测线下依赖服务的网络联通性 # - name: service_name # ip: <ip> # port: 1055,2325 -
-
根据ehpc-cluster.yaml配置文件执行检测脚本
ehpcutil tools hybridcheck --yaml /usr/local/ehpc_plugin/env/ehpc-cluster.yaml --human -
输出检测结果(无异常则可继续)。
重要若有报错需要进行相应修改。
-
-
测试调度器插件
-
修改插件环境配置文件
/usr/local/ehpc_plugin/env/plugin.env,本调度器暂不用修改 -
执行插件测试
/usr/local/ehpc_plugin/test/test_plugin.py -
执行成功时,输出如下。
重要若报错找不到调度器命令,进入插件目录 /usr/local/ehpc_plugin/env 修改环境变量。
-
步骤五:制作自定义镜像并激活集群
-
若上述步骤中修改了Proxymgr节点配置,需重新制作镜像以供后续扩容。
-
激活集群
-
进入集群配置页面。
-
勾选已手动完成以上所有配置向导,点击激活集群。
-
步骤六:创建预设节点池并预配置线下环境
混合云集群需提前配置预设节点池(固定主机映射列表)。创建后,一次性将节点列表预置到本地DNS、域账号和调度器中。后续扩缩容无需修改本地环境。
-
创建预设节点池
-
进入节点侧栏,单击预设节点池
-
新增一个预设节点池,填写以下信息后单击确认:
-
填写预设节点池名称
-
选择虚拟交换机
-
选择"规则生成"方式
-
点击"确认"按钮
-
-
在预设节点池中执行添加预设节点:
-
选择起始和终止IP
-
主机名规则填写
-
点击"预览/收起"来查看预加入节点列表
-
确认后点击"确定"按钮
-
-
-
-
返回到管理预设节点池页面,查看生成的预设节点列表信息。
-
点击下载节点列表,来下载预设节点池中的映射关系信息。
更多预设节点池操作详见:预设节点池
-
DNS及域账号预配置
DNS解析 + Windows AD域控
DNS解析 + Windows AD域控:
获取预设节点列表,并在DNS Server批量增加正向解析及反向解析记录。
hosts文件解析 + NIS
hosts文件解析 + NIS:
-
获取预设节点列表,并在NIS Server节点/etc/hosts批量添加解析
-
NIS Server更新数据库映射文件
make -C /var/yp
-
-
调度器服务预配置
LSF
LSF调度器:
-
获取预设节点列表,并在LSF本地管控节点修改 lsf.cluster.lsf 批量添加
cloudq001 ! ! 1 (mg) ...... -
在LSF本地管控节点重启lsf-server服务
lsf_daemons restart
PBS Pro
PBS Pro调度器:获取预设节点列表,并在PBS本地管控节点执行以下命令批量添加
qmgr -c "create node cloudq001" qmgr -c "set node cloudq001 queue = cloudq" ......SLURM(No DynamicNode)
SLURM调度器安装及加入(No DynamicNode):
-
获取预设节点列表,并在Slurm本地管控节点修改slurm.conf批量添加
NodeName=cloudq[001-020] Sockets=1 CoresPerSocket=1 ThreadsPerCore=2 RealMemory=3646 Gres=gpu:0 State=IDLE PartitionName=cloudq Nodes=cloudq[001-020] Default=NO MaxTime=INFINITE State=UP -
在Slurm本地管控节点重启slurmctld服务
systemctl restart slurmctld
SLURM(DynamicNode)
SLURM调度器安装及加入(DynamicNode):无需提前做任何操作。
重要DynamicNode模式下,节点启动时根据slurmd的Feature参数决定所属队列。换队列须更换镜像。单个镜像只能扩容单个队列。
-
-
步骤七:创建自动伸缩配置
-
单击队列,页面将自动识别集群的队列信息。
-
找到目标队列,单击编辑,配置自动伸缩。
-
打开队列的自动伸缩开关(同时启用自动扩容和自动缩容)。
-
设置最小/最大节点数:最小节点数设为0(按需扩容);最大节点数设为预设节点池节点数。
-
选择节点间互联方式:选择VPC网络(通过VPC通信)或eRDMA网络(高带宽低延迟,适合MPI作业)。
-
在使用预设节点池中,选择步骤七中创建的预设节点池,会展示该节点池下还剩余多少预设节点数量。
-
在自定义镜像中,选择步骤六中制作的自定义镜像进行扩容。
-
伸缩策略:默认为供应优先策略(按交换机可售区顺序满足实例规格需求)。
-
单次最大伸缩节点数:单次扩容的最大节点数上限,默认为99,按需调整。
-
单击保存。
-
步骤八:测试自动扩缩容
-
进入用户主目录,提交测试作业(例:提交10个单核作业)。
-
等待自动伸缩扩容节点,并通过以下方式查看进度:
-
在节点列表页面查看扩容节点。
-
在自动伸缩超链接页面查看当前的队列自动伸缩配置。
节点扩容完成后,作业直接调度到新节点。
-
-
缩容等待时间到期后,节点自动缩容。