亚马逊AWS官方博客

在 AWS EC2 搭建 Torque Resource Manager

本文主要介绍 TORQUE RESOURCE MANGER 是什么,TORQUE 节点架构,AWS 环境中TORQUE RESOURCE MANAGER 推荐架构,架构涉及服务介绍,AWS 架构 HPC 环境的优势,AWS 环境配置前续准备,TORQUE RESOURCE MANAGER 构建步骤以及相关的第三方参考资料。

1. Torque Resource Manger 是什么?

Torque (Terascale Open-source Resource and QUEue Manager) 是一个批处理与分布式计算的资源管理工具。被广泛用于 HPC 计算基础架构如天气预测,流体分析,材料模拟,地理分析等场景中。本文将讨论 Torque Resource Manager 在 AWS 上的推荐架构并分步指导如何在 AWS EC2计算节点上面安装 Torque Resource Manager.

2.  Torque节点架构

Torque 群集架构包括一个主节点和多个计算节点。主节点运行 pub_server 后台进程。计算节点运行 pbs_mom 后台进程。同时还有可以安装在任意主机上的客户端程序 (clients),用来提交和管理任务(jobs)。

主节点同时运行着调度进程(Scheduler Daemon)。调度进程与 pbs_server 交互来为每个任务进行节点资源调度。Torque 自带的 pbs_sched 提供简单的 FIFO(先进先出)的资源调度。

3.  AWS 环境中 Torque Resource Manager 推荐架构

4.  架构涉及服务介绍:

  • Amazon EC2: 相当于云中的服务器,能够在云环境中提供可任意调整的计算容量。其设计目标在于为开发人员轻松提供 Web 规模计算资源。本环境中的 Torque 主节点与计算节点主要部署在EC2实例上。
  • Amazon EBS:即 Amazon 弹性块存储,配合 Amazon EC2 实例使用。Amazon EBS 分卷提供一致性与低延迟性能,为高性能工作负载提供支持。利用 Amazon EBS,大家可以在数分钟内进行容量扩展。本例中每个 EC2 实例都配置有 EBS SSD 类型的根卷,并且在主节点配置了额外一个卷提供 NFS 数据共享,为群集提供共享文件系统。
  • Amazon Auto Scaling:允许根据所定义条件自动对 Amazon EC2的容量进行规模伸缩。可以利用 Auto Scaling 确保当前运行中的 Amazon EC2 实例数量始终与需求相符。Auto Scaling 还可以在出现需求峰值时自动增加 Amazon EC2 实例数量以保持性能水平,并在需求降低时削减容量以降低使用成本。Auto Scaling 非常适合HPC中性能要求间歇性波动,即性能需求每小时、每天或者每周发生变动的应用程序。架构中计算节点可以根据计算节点的负载自动地进行扩展或者收缩。
  • Amazon S3:能够提供安全且具备可扩展性的对象存储方案。Amazon S3 易于使用,提供简单的 Web 服务界面以立足任意网络位置存储及检索任意规模的数据。在方案架构中的 HPC 环境过程数据可以保存到S3当中。
  • Amazon CloudFormation: CloudFormation可以方便地把上面的方案做成配置文件,并在一个新的环境中进行快速部署。
  • Internet Gateway:架构图的实例与服务必须通过 Internet Gateway 才可以进行 Internet 访问
  • NAT Gateway:对于架构图中的主节点与计算节点服务器,如果直接暴露在公网访问中会不安全,但同时这些实例又有访问 Internet 安装依赖软件与升级的需求。NAT Gateway 主要用于此类访问。
  • Amazon SQS:多个节点群集之前会有队伍任务的需要,SQS 可以简单方便地提供队列服务
  • Amazon DynamoDB:对于生成的结构性数据,可以方便地保存到 NOSQL 类型数据库 DynamoDB 中,方便生态环境中其它服务进行访问
  • Amazon CloudWatch:对于架构图中的所有服务进行监测,可以提供实例的 CPU , 网络访问,存储等指标,同时支持日志,触发任务等
  • 以下步骤将着重涵盖 Torque 架构部分主要包括主节点,计算节点部分。

5.  AWS 架构 HPC 环境的优势:

  • 资源按需分配:AWS 环境中实例与服务,无需提前购买,需要时候进行申请激活,分钟级别完成部署,快速上线。解决传统 HPC 中采购周期长,基础架构部署复杂的特点
  • 无限存储计算资源:AWS 云环境中拥有大量的计算与存储资源,满足 HPC 环境中对于资源的大量需求。
  • 快速生产部署:支持配置文件直接生成基础架构实例,快速简单实现架构与应用的复制
  • 低成本部署灵活运营:云中环境可以按秒收费,按需使用,在计算任务完成时可以关闭资源,充分节省费用
  • 全球部署协同:AWS 在全球有18个区域,单一区域部署,全球复制。云环境方便全球协作支持。

6.    AWS 环境配置前续准备

1)    申请 AWS 中国区域账户 (在Global区域请忽略这步)

2)    进入 console 后配置 VPC,本文使用默认 VPC 配置

3)    子网设置,本文使用默认子网设置,对安全有要求的用户,请使用堡垒机方式与独立私有子网部署主节点与计算节点

4)    安全组:一般配置请参考。这里请建立 TorqueSG,Inbound 加入2条规则:为您的 IP 开放SSH (TCP 22) 端口,为 TorqueSG 这个安全组内部开放所有流量

5)    建立置放群组(Placement Groups)- TorquePG,在 EC2 服务界面的左边导航条选择 Placement Groups,并建立 TorquePG 群组,置放群组内部的实例可受益于低网络延迟、高网络吞吐量等特点。

请注意:由于置放群组不能跨 AZ,所以请在计算节点的跨 AZ 高用性与置放群组的高性能之间进行平衡选择,本文使用置放群组配置。

6)    建立密钥对(Keypair)TorqueKP 后续部分需要无密码互相登陆,需要 Keypair。建立之后一定要妥善保存密钥对,丢失之后 难恢复。

7.    Torque Resource Manager 构建步骤

1)    以下步骤在 Torque Server  (Masternode), Torque MOM Host, Torque Client Host 都需要安装,下面以 Masternode 为例:

a)    服务器名配置:

本文假设环境为3台服务器,一台主节点(masternode),两台计算节点(computenode1, computenode2),如上节点架构图。服务器名与 IP 地址假设如下:

172.31.1.30 masternode

172.31.1.41 computenode1

172.31.1.42 computenode2

b)    启动EC2实例做为 Masternode,启动一般步骤请点击这里。这里要特殊配置几个参数:

AMI 系统镜像:选择 Amazon Linux

实例类型:请参考该链接 进行选择,由于 TORQUE 多用于 HPC 场景,而 HPC 场景对于 CPU 配置要求比例比较高,所以推荐 C 系列,测试环境可以使用 T 系列,但 T 系列使用 CPU 积分方式,所以不推荐生产环境使用

  • 详细配置:置放群组选择 TorquePG,其它可以保留默认配置
  • 存储配置:根据需要配置本地存储,后面本文会提到另外建立一个EBS卷做NFS共享
  • 添加标签:加入 Key 值 Name,Value 为 Masternode,便于在控制台区分
  • 安全组:选择刚刚建立的 TorqueSG
  • 选择“启动”之后,会提醒密钥对,选择已经建立的 “TorqueKP”

c)     待控制台提醒启动完成之后进行登陆,修改服务器名,以 masternode 为例,computenode1, computenode2 类似,ssh 登陆 masternode之后,步骤如下:

登陆:参考。使用刚刚建立的密钥对文件 TorqueKP.pem

登陆后步骤如下:

[ec2-user@]$ sudo su

[root]#vi /etc/hosts

加入如下内容,IP 地址以实际环境中节点实际 IP 为主,环境内有 DNS,则 computenode1, computenode2 放到 DNS 中解析,不改在此修改。

127.0.0.1 masternode

172.31.1.30 masternode

172.31.1.41 computenode1

172.31.1.42 computenode2

[root]#vi /etc/sysconfig/network

修改 HOSTNAME=masternode

2)    安装依赖包

安装 EC2 开发包与 Torque Server Host 需要的编译工具

[ec2-user]$ sudo su

后面的安装将都使用 root 权限进行。

[root]# yum groupinstall “Development Tools”

[root]# yum install openssl-devel libxml2-devel boost-devel

安装 hwloc(Portal Hardware Locality),  hwloc 提供一组命令行工具和 C 语言的开发包,用来获取系统中层次化的关键计算元素,例如 NUMA 内存节点、共享缓存、处理器套接字、处理器核心以及处理器线程等等。

[root]# wget https://www.open-mpi.org/software/hwloc/v1.9/downloads/hwloc-1.9.1.tar.gz

[root]# tar -xzvf hwloc-1.9.1.tar.gz

[root]# cd hwloc-1.9.1

[root]# ./configure

[root]# make

[root]# make install

[root]# echo /usr/local/lib >/etc/ld.so.conf.d/hwloc.conf

[root]# ldconfig

3)    Torque Server (Masternode)配置

a)    安装并编译 Torque Server,本文以6.1.1为例, 系统已经默认安装了 git,使用 git 从 GITHUB 下载最新的 Torque 源码

[ec2-user@masternode]$cd /home/ec2-user && sudo su

[root@masternode]# git clone https://github.com/adaptivecomputing/torque.git -b 6.1.1 6.1.1

[root@masternode]# cd 6.1.1

[root@masternode]# ./autogen.sh

安装+编译:

[root@masternode]# ./configure –enable-cgroups –with-hwloc-path=/usr/local # add any other specified options

[root@masternode]# make

[root@masternode]# make install

当前 Shell 路径下执行 torque.sh,加入 PATH 变量

[root@masternode]# . /etc/profile.d/torque.sh

b)    初始化 Torque Resource Manager serverdb

[root@masternode]# ./torque.setup root # 这里如果报错如下: 一般是机器没有没有设置好, 请参考开始设置机器名步骤 qmgr obj= svr=default: Bad ACL entry in host list MSG=First bad host: ip-172-31-1-30

c)     以服务方式开机运行:

[root@masternode] cp contrib/init.d/pbs_server /etc/init.d/pbs_server

[root@masternode] chkconfig –add pbs_server

d)    masternode服务设置与启动

[root@masternode]# chkconfig –add pbs_server

[root@masternode]# service pbs_server restart

显示如下,启动成功:

Shutting down TORQUE Server: [ OK ]

Starting TORQUE Server: [ OK ]

e)    确认/var/spool/torque/server_name内容是masternode,如果不是的话,请修改为masternode

f)     Torque Server 安装与初步设置到此完成。

使用如下命令在当前路径下生成 Torque MOMs 安装脚本 torque-package-mom-linux-x86_64.sh

[root@masternode]#make packages

4)    文件共享配置:为了实现 Masternode 与 computenode 之间的文件共享与数据同步,本文使用 Masternode卷空间做为节点间文件共享,这里直接使用在 MasterNode上建立卷并提供NFS 方式共享,步骤如下,同时也可以参考 AWS Storage Gateway 文档,使用 Storage Gateway 加 S3 方式实现共享

a)    为 masternode 创建 EBS 卷/public并在实例上挂载,之后在 Linux 系统中挂载

b)    NFS 客户端和服务器端需要安装 nfs-utils,nfs-utils-lib,Amazon LINUX 已经默认安装,可以直接开始配置

开机启动:

[root@masternode]# chkconfig –levels 235 nfs on

[root@masternode]# /etc/init.d/nfs start

权限与共享,注意 ip 和括号中间没有空格,修改 /etc/exports文件

[root@masternode]# vi /etc/exports

/public (rw,sync,no_root_squash)

/public (rw,sync,no_root_squash)

/public (rw,sync,no_root_squash)

[root@masternode]# exportfs -a

[root@masternode]# chmod 777 /public

将刚刚需要在 computenode 上面安装的脚本 torque-package-mom-linux-x86_64.sh 拷贝到 /public下确认 NFS 配置成功

[ec2-user@masternode]$ cp torque-package-mom-linux-x86_64.sh /public/

5)    Computenode 启动与配置:

a)    启动一台 EC2,步骤参考 Masternode 启动过程,几点注意:

子网,安全组,置放群组配置,密钥对与Masternode配置一致。

b)    修改机器名如下:并安装基础依赖包,参考 masternode 过程

[root]#sudo su

[root]#vi /etc/hosts

加入127.0.0.1 computenode

加入172.31.1.30 masternode 这是本例中Masternode假设IP,有DNS无需此步骤

[root]#vi /etc/sysconfig/network

修改 HOSTNAME=computenode1

重启 computenode1 使之生效,同时 ping masternode 看是否连通

确认在 masternode 实例上同时也修改 /etc/hosts,加入 computenode 的 IP 如:172.31.1.41 computenode1,然后 ping computenode1 进行测试

c)     使用 root 权限,并启动 cgconfig

[ec2-user@computenode1]$ sudo su

[root@computenode1]# service cgconfig start

[root@computenode1]# chkconfig cgconfig on

[root@computenode1]# lssubsys -am 进行查看,查看是否有/cgroup/项目

d)    在 computenode 上下载 torque-package-mom-linux-x86_64.sh并安装配置

[root@computenode1]# cp /public/torque-package-mom-linux-x86_64.sh /home/ec2-user/ && cd /home/ec2-user

[root@computenode1]# ./torque-package-mom-linux-x86_64.sh –install

把 pbs_mom 加入到启动服务当中

[root@computernode1]# chkconfig –add pbs_mom

[root@computernode1]# service pbs_mom start

e)    参考上面步骤可以部署 computenode2

f)     Computenode访问 NFS 共享目录:

在客户端测试挂载与读写(在 computenode 上面运行)

[root@computenode1]#mkdir /public

[root@computenode1]#chmod 777 /public

[root@computenode1]#mount -t nfs masternode:/public /public

设置开机挂载

[root@computenode1]#vi /etc/fstab

加入如下行:

masternode:/public /public nfs4 hard,timeo=600,retrans=2 0 0

6)    配置无密钥 ec2-user 节点间登陆,需要分别在 masternode, computenode上面运行

a)    由于 EC2 默认都是 ec2-user 使用 pem 登陆,所以在 ssh 认证的公钥文件~/.ssh/authorized_keys里面已经有 ec2-user 的登陆.如果不使用 ec2-user 登陆,请参考,先加入请用户

b)    使用之前保存的 ec2-user 密钥 TorqueKP.pem 文件,生成 .ssh/id_rsa文件

cat TorqueKP.pem >> ~/.ssh/id_rsa

c)     使用 ssh 进行测试,例如在 computernode1 上

[ec2-user@computenode1]提示符由 sshmasternode 提示符由[ec2−user@computenode1] 显示为[ec2−user@masternode]$ 则登陆成功。exit 退出

d)    依次类推在 masternode, computenode1, computenode2上互相进行登陆测试

e)    这里请注意,请保持登陆各实例用户名一致,如果 id_rsa 都由 ec2-user 密钥建立,则登陆也应该在 ec2-user 环境下

7)    Torque 客户端配置(可以在同一子网内再启动一台机器,由于与 Maternode, Computenode 互操作比较少,在此不多描述):

a)    在 masternode 上面拷贝客户端安装脚本到共享盘

cp torque-package-clients-linux-x86_64.sh /public/

cp contrib/init.d/trqauthd /public/

b)     拷贝到要配置客户端的主机上并运行

cp /public/torque-package-clients-linux-x86_64.sh .

cp /public/trqauthd /etc/init.d/

./torque-package-clients-linux-x86_64.sh –install

8)    加入 computenode 到 masternode 配置文件当中

a)    将 computernode 的名称(computenode1, computenode2)加入到/var/spool/torque/server_priv/nodes中,如下:

computenode1

computenode2

b)    重新启动 PBS Server(在 Masternode 上运行)与 PBS MOM(在 Computenode 上运行)

[root@masternode] service pbs_server restart

[root@computenode1] service pbs_mom restart

[root@computenode2] service pbs_mom restart

在 PBS Master Node 上验证:

[root@masternode] qnodes -a

显示如下则配置成功:

computenode1

state = free

power_state = Running

computenode2

state = free

power_state = Running

9)    Torque Resource Manager 群集相关测试

a)    测试提交一个基础任务

[ec2-user@masternode]$ echo ` sleep 30 ` | qsub

b)    查看任务状态

[ec2-user@masternode]$ qstat

8.    第三方参考资料:

张洋

张洋是AWS中国团队的解决方案架构师,负责基于AWS的云计算方案架构咨询和设计。同时致力于AWS云服务在国内的应用和推广。现专注于HPC超算与物联网相关领域的研究。在加入AWS之前,他曾服务于EMC, Oracle, Flextronics等跨国IT公司。张洋乐于分享,并且是一名业余游泳教练,热爱游泳和跑步,已经完成5次马拉松比赛。