用 xCAT 和 TORQUE 进行动态服务器供应

红薯 发布于 2010/05/13 13:35
阅读 2K+
收藏 0

本文将探讨如何使用 Extreme Cloud Administration Toolkit (xCAT) 和 Tera-scale Open-source Resource and QUEue Manager (TORQUE) 开源包构建一个动态供应的高性能计算(HPC)集群系统。xCAT 是针对动态供应计算、存储以及网络资源的一种领先解决方案。TORQUE 是一种工作负载和资源管理系统,可用于管理批量作业和计算节点并调度这些作业的执行。

我们所构建的这个集群,其中的节点由 xCAT 供应,并且其上的批量作业由 TORQUE 管理和执行。在 xCAT 和 TORQUE 之上,我们构建了一个供应代理来使此集群成为自适应 的,即集群的计算节点按作业要求的执行环境动态供应。

自适应集群的架构

我们所构建的这个动态集群的架构如 图 1 所示,其中的 xCAT 集群包括了一个管理节点 和几个计算节点。计算节点是由运行在管理节点上的 xCAT 服务器供应的。管理节点还运行了 TORQUE 服务器和调度器守护程序,以及用 xCAT 管理计算节点所需的几个服务,包括 DNS、DHCP、TFTP 和 NFS。

若计算节点运行 TORQUE 服务器分派的作业,运行在每个计算节点上的 TORQUE 作业执行守护程序就会启动。供应代理检查工作负载和节点配置并决定为了提供作业所需的执行环境需要供应哪些节点。


图 1. 自适应集群
此图显示了动态集群的结构

对于一个小的集群,单一一个管理节点就能提供供应所有的计算节点所需的带宽。对于一个较大的集群,则需要一个分层的方式,且管理节点要连接到 两个或多个服务节点,计算节点要从这些服务节点得到供应。

对于本文,我们使用的是一个小的集群,该集群有一个管理节点 — xcat1 — 和两个计算节点 — xcat2xcat3 — 二者通过 Ethernet 交换机 xcat-switch 连接到 xcat1,如 图 2 所示。所使用的服务器均具有一个双处理器 Intel® Xeon® x86_64 架构、2 GB 内存、73 GB 磁盘容量和支持 Preboot eXecution Environment (PXE) 引导的 Ethernet 接口。管理节点运行的是 CentOS 版本 5.4。


图 2. 集群组件和联网
此图显示了集群组件和联网

对计算节点的供应采用的是无磁盘 的方法,计算节点从管理节点引导。具体地说,是使用了基于 PXE 的网络引导。

配置管理节点

在安装 xCAT 之前,先配置管理节点,以便 xCAT 能被正确安装并能获得有关此集群的正确信息。本节给出了在安装 xCAT 之前,在管理节点上应该执行的配置操作。

设置联网和主机定义

管理节点 xcat1 连接到公共网络 192.168.17.0(称为 extnet)以及集群网络 192.168.112.0(称为 cluster)。我们为两种接口均使用了静态 IP 地址:公共网络接口 eth0 的 IP 地址为 192.168.17.201;集群网络接口 eth1 的 IP 地址为 192.168.112.1。清单 1 显示了所配置的网络接口,其中的 virbr0 对于虚拟化很有用,但对于本文中所讨论的设置却用处不大。


清单 1. 网络接口

				
xcat1 # ifconfig -a | egrep -A1 '^[a-z]' | grep -v "\--"
eth0 Link encap:Ethernet HWaddr 00:11:43:DF:0E:A8
inet addr:192.168.17.201 Bcast:192.168.17.255 Mask:255.255.255.0
eth1 Link encap:Ethernet HWaddr 00:11:43:DF:0E:A9
inet addr:192.168.112.1 Bcast:192.168.112.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0

 

清 单 2 中显示了定义主机名的文件 /etc/sysconfig/network 以及定义本地主机查找表的文件 /etc/hosts,其中这两个计算节点的 Intelligent Platform Management Interfaces (IPMI) 分别为 xcat2 和 xcat3。IPMI 被 xCAT 用来进行功率循环和引导计算节点。使用 hostname 命令可以查看本地主机的缩短名和全名,如如下清单所示。


清单 2. 主机定义

				
xcat1 # more /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=xcat1

xcat1 # more /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.17.201 xcat1.extnet
192.168.17.202 xcat1i.extnet
192.168.112.1 xcat1.cluster xcat1
192.168.112.100 xcat-switch
192.168.112.102 xcat2
192.168.112.103 xcat3
192.168.112.202 xcat2i
192.168.112.203 xcat3i

xcat1 # hostname -s
xcat1

xcat1 # hostname -f
xcat1.cluster

 

设置 DNS

清 单 3 中所示的 resolver 配置文件 /etc/resolv.conf 定义管理节点 192.168.112.1 (xcat1) 作为主服务器,定义了一个外部服务器作为次服务器。(在 “配 置 DNS 和 DHCP” 一节中我们使用 xCAT 设置名称服务器 192.168.112.1。) CentOS V5.4 上的命名服务的默认设置是使用 bind-chroot。由于 xCAT 期望此命名服务不使用 chroot, 所以需要删除包 bind-chroot,如如下的清单所示。


清单 3. DNS 设置

				
xcat1 # more /etc/resolv.conf
search cluster extnet
nameserver 192.168.112.1
nameserver 130.236.101.9

xcat1 # rpm -q bind-chroot
bind-chroot-9.3.6-4.P1.el5_4.2

xcat1 # rpm -e bind-chroot

 

安装所下载的工具

解压缩所 下 载 的这个 ZIP 文件并运行 install.sh 脚本来安装本文剩余部分引用到的这些程序。

其他设置

Security-enhanced Linux® (SELinux) 功能应该禁用。此外,如果安装了 tftp-server 包,请删除它,因为 xCAT 需要的是 atftp 包,它与 tftp-server 是冲突的。为了运行 TORQUE 作业,创建一个常规用户,然后 NFS-导出该用户的主目录。清单 4 显示了如何执行这些操作。


清单 4. 其他设置

				

xcat1 # rpm -q tftp-server
tftp-server-0.49-2.el5.centos
xcat1 # rpm -e tftp-server

xcat1 # grep SELINUX= /etc/sysconfig/selinux | grep -v ^#
SELINUX=disabled

xcat1 # useradd -m -s /bin/bash -d /home/gabriel -u 101 -g users gabriel

xcat1 # grep /home /etc/exports
/home *(rw,no_root_squash,sync)

xcat1 # exportfs -a
xcat1 # showmount -e | grep /home
/home *

安装和配置 xCAT

为了简化安装,xCAT 为常见的 Linux 发行版提供了 RPM。由于 xCAT 是一个数据库驱动的包,所以可以通过设置 xCAT 数据库内的表来配置其动作。

用 yum 安装 xCAT

要安装 xCAT,需要为 xCAT 存储库安装 yum 配置文件,然后运行 yum 来安装 xCAT 包及其依赖项,如清单 5 所示。这里配置了两个存储库:核心存储库以及特定于平台的存储库。


清单 5. 用 yum 安装 xCAT

				
xcat1 # cd /etc/yum.repos.d
xcat1 # wget http://xcat.sourceforge.net/yum/xcat-core/xCAT-core.repo
xcat1 # wget
http://xcat.sourceforge.net/yum/xcat-dep/rh5/x86_64/xCAT-dep.repo

xcat1 # yum clean metadata
xcat1 # yum install xCAT.x86_64
[...]
Complete!

xcat1 # source /etc/profile.d/xcat.sh

 

在安装完成后,xCAT 以及 TFTP 服务均应配置完毕并运行。通过运行清单 6 内所示的命令可以验证这一点。


清单 6. xCAT 服务

				
xcat1 # chkconfig --list xcatd
xcatd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

xcat1 # service xcatd status
xCAT service is running

xcat1 # chkconfig --list tftpd
tftpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

xcat1 # service tftpd status
atftpd service is running

 

安装所下载的工具

解压缩所 下 载 的 ZIP 文件并运行其内包含的 install.sh 脚本,这会安装在本文剩余部分将会引用到的如下程序:

  • 映像配置工具 gen_config_torque(安装于 /opt/provisioner/bin 内)和 install_torque-mom(安装于 /install/postscripts 内),在为 TORQUE 调优映像时需要
  • setup_torque_config 脚本,用来设置 TORQUE 对象和执行节点(安装于 /opt/provisioner/bin 内)
  • setup_users 脚本,被作为 xCAT postscript(安装于 /install/postscripts 内)运行
  • 供应代理 prov_agent,用来执行动态供应(安装于 /opt/provisioner/bin 内)

设置 xCAT 数据库表

xCAT 在一个数据库内存储了集群配置(默认的数据库类型是 SQLite)。作为安装过程的一部分,xCAT 数据库表也会被创建和初始化。要更改它们,使用 tabeditchtab 命令;要查看它们,使用 tabdump 命令。

本节给出了 xCAT 表内的一些重要设置。这些表的全部内容可在本文的 下 载 部分找到。

site 表内,将 dhcpinterfaces 属性设为 eth1 并确保 masterdomainnameserversforwarders 属性的设置如清单 7 所示。


清单 7. site 表

				
xcat1 # chtab key=dhcpinterfaces site.value=eth1

xcat1 # tabdump site | egrep "dhcp|domain|master|server|forward" | sort
"dhcpinterfaces","eth1",,
"domain","cluster",,
"forwarders","130.236.101.9",,
"master","192.168.112.1",,
"nameservers","192.168.112.1",,

 

noderes 表内定义计算节点组,在 nodetype 表内定义计算概要文件 — 一个概要文件 定义了在一个根映像内所含的包 —,如清单 8 所示。


清单 8. noderes 和 nodetype 表

				
xcat1 # chtab node="compute" \
noderes.netboot=pxe \
noderes.tftpserver=192.168.112.1 \
noderes.nfsserver=192.168.112.1 \
noderes.installnic=eth0 \
noderes.primarynic=eth0 \
noderes.discoverynics=eth0

xcat1 # chtab node=compute \
nodetype.os=centos5 \
nodetype.arch=x86_64 \
nodetype.profile=compute \
nodetype.nodetype=osi

xcat1 # chtab node=xcat2 nodetype.os=centos5
xcat1 # chtab node=xcat3 nodetype.os=centos5

 

mac 表内定义节点的 MAC 地址,然后在 nodelist 表内定义节点。在 nodehm 表内定义节点的硬件管理,如清单 9 所示。


清单 9. mac、nodelist 和 nodehm 表

				
xcat1 # chtab node=xcat2 mac.interface=eth1 mac.mac="00:11:43:df:0f:09"
xcat1 # chtab node=xcat2i mac.interface=eth1 mac.mac="00:11:43:df:0f:0b"
xcat1 # chtab node=xcat-switch mac.interface=eth1
mac.mac="00:10:83:8d:5a:42"
xcat1 # chtab node=xcat3 mac.interface=eth1 mac.mac="00:11:43:df:0d:1d"
xcat1 # chtab node=xcat3i mac.interface=eth1 mac.mac="00:11:43:df:0d:1f"

xcat1 # chtab node=xcat2 nodelist.groups="compute,all"
xcat1 # chtab node=xcat3 nodelist.groups="compute,all"
xcat1 # chtab node=xcat2i nodelist.groups="bmc,all"
xcat1 # chtab node=xcat3i nodelist.groups="bmc,all"
xcat1 # chtab node=xcat-switch nodelist.groups="switch,all"

xcat1 # chtab node=xcat2 nodehm.power=ipmi nodehm.mgt=ipmi
xcat1 # chtab node=xcat3 nodehm.power=ipmi nodehm.mgt=ipmi

 

networks 表内,为网络 192.168.112.0 和 192.168.17.0 设置 netnamegatewaydhcpserver 属性,如清单 10 所示,并为 192.168.122.0 网络删除此行。


清单 10. networks 表

				

xcat1 # chtab net=192.168.112.0 networks.netname=cluster
xcat1 # chtab net=192.168.112.0 networks.gateway=192.168.112.1
xcat1 # chtab net=192.168.112.0 networks.dhcpserver=192.168.112.1

xcat1 # chtab net=192.168.17.0 networks.netname=extnet
xcat1 # chtab net=192.168.17.0 networks.gateway=192.168.17.1
xcat1 # chtab net=192.168.17.0 networks.tftpserver=""

xcat1 # tabdump networks | grep -v "192.168.122.0" > networks.csv
xcat1 # tabrestore networks.csv

 

将 setup_users 脚本添加到 postscripts 表,如清单 11 所示。这个脚本的作用是设置计算节点上的 users 数据库,并会在节点引导后执行。


清单 11. postscripts 表

				
xcat1 # chtab node=compute postscripts.postscripts=setup_users

xcat1 # tabdump postscripts
#node,postscripts,postbootscripts,comments,disable
"xcatdefaults","syslog,remoteshell,syncfiles","otherpkgs",,
"service","servicenode",,,
"compute","setup_users",,,

 

配置 DNS 和 DHCP

使用 xCAT makednsmakedhcp 命令可以生成 DNS 和 DHCP 配置。由于 makedns 命令要求管理节点只能是一个域的一部分,所以需要暂时修改 /etc/hosts 文件,然后运行 makedns。恢复 /etc/hosts 文件,如清单 12 所示。此外,请确保 /install 目录是 NFS 导出的,如以下清单所示。


清单 12. DNS、DHCP 和 NFS 配置

				
xcat1 # diff /etc/hosts /etc/hosts.orig
7,8c7,8
< #192.168.17.201 xcat1.extnet
< #192.168.17.202 xcat1i.extnet
---
> 192.168.17.201 xcat1.extnet
> 192.168.17.202 xcat1i.extnet

xcat1 # makedns

xcat1 # service dhcpd stop
xcat1 # rm /var/lib/dhcpd/dhcpd.leases
xcat1 # makedhcp -n
xcat1 # makedhcp -a

xcat1 # cp -p /etc/hosts.orig /etc/hosts

xcat1 # host xcat2
xcat2.cluster has address 192.168.112.102
xcat2.cluster mail is handled by 10 xcat2.cluster.

xcat1 # grep /install /etc/exports
/install *(rw,no_root_squash,sync)

xcat1 # showmount -e | grep /install
/install *

 

设置 TORQUE

TORQUE 的安装可以通过使用二进制 RPM 包完成,也可以从源代码构建。在本文中,管理节点运行的是 CentOS V5,计算节点运行的是 CentOS V5 或 Fedora V10。由于 CentOS V5 和 Fedora V10 的二进制包面向的是 TORQUE 的不同版本,并且互不兼容,所以需要进行少许额外的工作才能在 Fedora 10 上从源代码构建 TORQUE。

TORQUE 的组件

TORQUE 系统包含三个守护进程:服务器、调度器和作业执行器。服务器进程称为 pbs_server,创建 并管理作业并将作业进行排队和分配以便执行,而作业执行器 — 称为 pbs_mom — 用来启动这些作业。为了决定在何时以及在何地分派这些作业,在每个调度循环,服务器都会检查可被执行的暂挂作业并与调度器守护进程 pbs_scheduler 进行通信,以决定哪些作业应被分配到哪些计算节点。

在本文中,管理节点 xcat1 运行所有的 TORQUE 守护进程,而计算节点只运行作业执行器守护程序。

在管理节点上安装 TORQUE

Extra Packages for Enterprise Linux (EPEL) 项目提供了 TORQUE 包。为了安装这些 EPEL TORQUE 包,首先需要安装 EPEL 存储库配置文件 epel.repo,如清单 13 所示。


清单 13. 安装 EPEL 存储库配置

				
xcat1 # rpm -Uvh \

http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rp
m

xcat1 # rpm -qf /etc/yum.repos.d/epel.repo
epel-release-5-3

 

现在,用 yum 安装这些 TORQUE 包。在运行 yum 之前,先更改文件 /etc/yum.conf 以设置 keepcache=1, 以便安装后 TORQUE RPM 文件会保存在此 yum 缓存存储库内。(稍后,需要将 torque-momlibtorque 包添加到此根映像。)然后运行清单 14 内所示的命令。


清单 14. 安装 TORQUE 包

				
xcat1 # yum -q install torque
xcat1 # yum -q install torque-server
xcat1 # yum -q install torque-scheduler
xcat1 # yum -q install torque-mom
xcat1 # yum -q install torque-pam.x86_64
xcat1 # yum -q install torque-client
xcat1 # yum -q install torque-docs

 

确认 TORQUE RPM 文件位于 /var/cache/yum/epel/packages 下,然后更改文件 /etc/yum.conf 以便设置 keepcache=0

在管理节点上设置 TORQUE

设置 TORQUE 服务器名,然后安装包含在 xCAT 内的 TORQUE 启动脚本。接下来,配置并启动 TORQUE 服务,如清单 15 所示。


清单 15. 配置 TORQUE 服务

				
xcat1 # more /var/torque/server_name
xcat1

xcat1 # cp -p /opt/xcat/share/xcat/netboot/add-on/torque/pbs /etc/init.d

xcat1 # chkconfig --level 345 pbs_server on
xcat1 # chkconfig --level 345 pbs_sched on
xcat1 # chkconfig --level 345 pbs_mom on

xcat1 # service pbs start
Starting TORQUE Mom: [ OK ]
Starting TORQUE Scheduler: [ OK ]
Starting TORQUE Server: [ OK ]

 

TORQUE 系统管理器 qmgr 对于配置一个 TORQUE 集群的行为非常有用,比如队列、作业调度和执行节点。运行 setup_torque_config,它会用 qmgr 配置这个集群,如清单 16 所示。


清单 16. 配置 TORQUE 服务器和队列

				
xcat1 # setup_torque_config
WARNING: this program will overwrite the Torque server configuration
Continue ? [y/N] y

# Initialize Torque server configuration
Shutting down TORQUE Server: [ OK ]
Starting TORQUE Server: [ OK ]

# Set up Torque server
Max open servers: 4
set server scheduling = True
set server scheduler_iteration = 60
set server query_other_jobs = True
set server default_queue = dque
set server acl_hosts = xcat1

# Set up Torque queue
Max open servers: 4
create queue dque
set queue dque queue_type = Execution
set queue dque enabled = True
set queue dque started = True

# Set up Torque nodes
Max open servers: 4
create node xcat1
set node xcat1 properties = management
Max open servers: 4
create node xcat2
set node xcat2 properties = centos5
Max open servers: 4
create node xcat3
set node xcat3 properties = centos5

为无磁盘引导生成根映像

本节将会探讨如何生成用来供应服务器的根映像。如 图 3 所示,对于每个受支持的操作系统,根映像的创建是通过使用一个包含了基础包的存储库和一个包含了额外包(比如 TORQUE 发行版的那些包)的存储库完成的。


图 3. 创建根映像
此图显示了根映像的创建

要为无磁盘供应创建根映像:

  1. 使用 xCAT copycds 工具解包这个操作系统发行版的 ISO 映像。
  2. 使用 xCAT genimage 工具生成一个无状态的根映像,以便从此管理节点联网引导此操作系统。
  3. 可选地,可以修改此无状态映像内的某些文件以便调优执行环境。比如,更改 /etc/fstab 文件来安装额外的文件系统。
  4. 使用 xCAT packimage 工具将这个无状态的根映像打包成一个压缩文件供这些联网引导的节点获取。

接下来的这些小节详述了在 CentOS V5 和 Fedora V10 操作系统下的具体操作步骤。

解包 ISO 映像

使用 copycds 工具可从一个 DVD — 或从一个包含了此发行版的 ISO 映像 — 创建针对此操作系统发行版的存储库。要创建针对 CentOS V5.4 和 Fedora V10 发行版的本地存储库,获得 ISO 映像并运行 copycds 命令,如清单 17 所示。


清单 17. 创建 CentOS 和 Fedora 存储库

				
xcat1 # iso=CentOS-5.4-x86_64-bin-DVD.iso
xcat1 # repos=centos/5.4/isos
xcat1 # wget http://mirrors.se.kernel.org/$repos/$iso

xcat1 # copycds $iso
Copying media to /install/centos5/x86_64/
Media copy operation successful


xcat1 # iso=Fedora-10-x86_64-DVD.iso
xcat1 # repos=pub/archive/fedora/linux/releases/10/Fedora
xcat1 # wget http://archives.fedoraproject.org/$repos/x86_64/iso/$iso

xcat1 # copycds $iso
Copying media to /install/fedora10/x86_64/
Media copy operation successful

 

这里,CentOS 和 Fedora 存储库分别位于目录 /install/centos5/x86_64 和 /install/fedora10/x86_64 内;oosimagelinuximage 表均用映像名进行了更新以便进行 diskfull 供应。copycds 工具从 site 表的 installdir 键 — 其值为 /install — 以及此 ISO 映像所含的 .discinfo 文件内定义的操作系统和架构属性构建这些路径。

添加 CentOS 包

添加 parted 包和 TORQUE 客户机以及执行守护进程包,如下所示:

  1. 将这个 parted 包添加到包列表文件 compute.pkglist。
  2. 制作一个供 genimage 查找额外包的目录并将这些 TORQUE 包复制到这个目录。
  3. 使用 createrepo 命令创建 yum 存储库元数据。
  4. 为额外的包创建包列表文件 compute.otherpkgs.pkglist 以告诉 genimage 该安装哪些包。

这些步骤如清单 18 所示。


清单 18. 向 CentOS 添加包

				
xcat1 # diff /opt/xcat/share/xcat/netboot/centos/compute.pkglist \
/opt/xcat/share/xcat/netboot/centos/compute.pkglist.orig
11,13d10
< vim-minimal
< rpm
< yum

xcat1 # mkdir -p /install/post/otherpkgs/centos5/x86_64

xcat1 # cp -p /var/cache/yum/epel/packages/*torque*.rpm \
/install/post/otherpkgs/centos5/x86_64

xcat1 # createrepo /install/post/otherpkgs/centos5/x86_64

xcat1 # more /opt/xcat/share/xcat/netboot/centos/compute.otherpkgs.pkglist
TORQUE-mom

 

添加 Fedora 包

添加 Fedora 包的步骤类似于添加 CentOS 包的步骤,只不过必须要下载要添加的这些 RPM,因为它们不在 yum 缓存存储库内。全部步骤如清单 19 所示。


清单 19. 向 Fedora 添加包

				
xcat1 # mkdir -p /install/post/otherpkgs/fedora10/x86_64
xcat1 # cd /install/post/otherpkgs/fedora10/x86_64

xcat1 #
repos=pub/archive/fedora/linux/releases/10/Everything/x86_64/os/Packages

xcat1 # wget \

http://archives.fedoraproject.org/$repos/busybox-anaconda-1.10.3-3.fc10.x86_
64.rpm \
http://archives.fedoraproject.org/$repos/torque-2.1.10-6.fc10.x86_64.rpm
\

http://archives.fedoraproject.org/$repos/libtorque-2.1.10-6.fc10.x86_64.rpm
\

http://archives.fedoraproject.org/$repos/torque-mom-2.1.10-6.fc10.x86_64.rpm

xcat1 # createrepo /install/post/otherpkgs/fedora10/x86_64

xcat1 # diff /opt/xcat/share/xcat/netboot/fedora/compute.pkglist \
/opt/xcat/share/xcat/netboot/fedora/compute.pkglist.orig
13,14d12
< rpm
< yum

xcat1 # more /opt/xcat/share/xcat/netboot/fedora/compute.otherpkgs.pkglist
busybox-anaconda
torque-mom

 

生成根映像

genimage xCAT 命令可生成一个无状态映像,该映像将被用来供应这些计算节点。此命令使用了用 copycds 创建的存储库以便为一个具有受 xCAT 支持的概要文件的节点生成根映像。对于计算节点,使用的是 nodetype 表内定义的 compute 概要文件。

运行 genimage 命令,如 清 单 20 所示,为 CentOS 和 Fedora 分别在依赖于操作系统的根映像目录 /install/netboot/centos5/x86_64/compute 和 /install/netboot/fedora10/x86_64/compute 下创建根映像。此命令接受三个选项:操作系统名、处理器架构和概要文件。


清单 20. 生成根映像

				

xcat1 # genimage -i eth0 -o centos5 -p compute
os: centos5
profile: compute
interface: eth0
Which network drivers will you need? (press enter if you're not sure)
[igb,e1000e,e1000,bnx2,tg3] e1000
[ ... ]
Complete!

xcat1 # genimage -i eth0 -o fedora10 -p compute
os: fedora10
profile: compute
interface: eth0
Which network drivers will you need? (press enter if you're not sure)
[igb,e1000e,e1000,bnx2,tg3] e1000
[ ... ]
Complete!

 

调优映像

用 NFS 将主目录添加到 /etc/fstab 并运行 configure_torque 来将这些 TORQUE 配置文件添加到此映像,如清单 21 所示。


清单 21. 定制映像

				

xcat1 # diff /install/netboot/centos5/x86_64/compute/rootimg/etc/fstab \

/install/netboot/centos5/x86_64/compute/rootimg/etc/fstab.orig
5d4
< xcat1:/home /home nfs defaults 0 0

xcat1 # diff /install/netboot/fedora10/x86_64/compute/rootimg/etc/fstab \

/install/netboot/fedora10/x86_64/compute/rootimg/etc/fstab.orig
5d4
< xcat1:/home /home nfs defaults 0 0


xcat1 # gen_config_torque /install/netboot/centos5/x86_64/compute/rootimg
xcat1 x86_64
Setting up the pbs_mom configuration
Completed setting up the pbs_mom configuration

xcat1 # gen_config_torque /install/netboot/fedora10/x86_64/compute/rootimg
xcat1 x86_64
Setting up the pbs_mom configuration
Completed setting up the pbs_mom configuration

打包映像并引导节点

运行 packimage 将每个根映像转变成一个压缩文件,如 清 单 22 所示。这么做会在每个操作系统的根映像目录下创建文件 rootimg.gz 并会用新创建的映像的名称相应更新表 osimagelinuximage


清单 22. 打包根映像

				

xcat1 # packimage -o centos5 -p compute -a x86_64
Packing contents of /install/netboot/centos5/x86_64/compute/rootimg

xcat1 # ls /install/netboot/fedora10/x86_64/compute/rootimg.gz
/install/netboot/fedora10/x86_64/compute/rootimg.gz


xcat1 # packimage -o fedora10 -a x86_64 -p compute
Packing contents of /install/netboot/fedora10/x86_64/compute/rootimg

xcat1 # ls /install/netboot/centos5/x86_64/compute/rootimg.gz
/install/netboot/centos5/x86_64/compute/rootimg.gz

 

引导计算节点

引导计算组内的这些节点并检查它们的状态,如 清 单 23 所示,其中的 nodeset 命令更新 nodetypebootparamschain 表。


清单 23. 引导节点

				

xcat1 # nodeset compute netboot
xcat2: netboot centos5-x86_64-compute
xcat3: netboot centos5-x86_64-compute

xcat1 # rpower compute boot
xcat3: on reset
xcat2: on reset

xcat1 # nodestat compute
xcat2: ping netboot centos5-x86_64-compute
xcat3: ping netboot centos5-x86_64-compute

xcat1 # nodestat compute
xcat2: pbs,sshd
xcat3: pbs,sshd

 

将 pbs_mom 的正确版本添加到 Fedora 映像

运行在计算节点上的 TORQUE 作业执行守护程序 pbs_mom 与运行在管理节点上的 TORQUE 服务器守护程序 pbs_server 通信。不幸的是安装自 EPEL 存储库的服务器 V2.3.10 与安装自 Fedora V10 归档文件的 pbs_mom V2.1.10 不兼容,并且此二进制 RPM 的 V2.3.10 在 Fedora V10 内也不可用。在本节内,我们将在一个用 Fedora V10 引导的计算节点上从源代码构建 V2.3.10 并将它添加到管理节点上的 Fedora V10 根映像。

要在 Fedora 10 上从源代码构建 pbs_mom V2.3.10,可使用 xCAT postscript 机制和所提供的这个工具 install_torque-mom, 如清单 24 所示。构建了 pbs_mom 后,重新打包 Fedora 10 映像并删除此 postscript。


清单 24. 在 Fedora 上构建 pbs_mom 并将它添加到根映像

				
xcat1 # chtab node=xcat3 postscripts.postscripts=install_torque-mom
xcat1 # chtab node=xcat3 nodetype.os=fedora10

xcat1 # nodeset xcat3 netboot
xcat3: netboot fedora10-x86_64-compute

xcat1 # rpower xcat3 boot
xcat3: on reset

xcat1 # nodestat xcat3
xcat3: pbs,sshd

xcat1 # tabdump postscripts | grep xcat3

xcat1 # packimage -o fedora10 -p compute -a x86_64
Packing contents of /install/netboot/fedora10/x86_64/compute/rootimg

xcat1 # rpower xcat3 boot
xcat3: on reset

xcat1 # ssh xcat3 '/usr/sbin/pbs_mom --version'
version: 2.3.10

xcat1 # nodestat xcat3
xcat3: pbs,sshd

 

现在,所有计算节点均运行的是 TORQUE V2.3.10。

用 TORQUE 运行作业

至此,这个集群应该准备好可以运行作业了。若一个作业要求必须在某个特定操作系统上运行(通过作业 nodes 属性),那么这个作业将只能在支持该操作系统的节点上运行。

设置计算节点的大小

首先,设置计算节点的大小。当计算节点启动后,配置 TORQUE 来为每个计算节点设置当前的处理器或内核的数量,如清单 25 所示,其中的 pbsnodes 显示了所配置的执行节点。


清单 25. 设置计算节点的大小

				
xcat1 # nodels compute
xcat2
xcat3

xcat1 # nodes=$(nodels compute)

xcat1 # for node in $nodes; \
do \
np=$(psh $node cat /proc/cpuinfo | grep processor | wc -l); \
qmgr -c "set node $node np=$np" \
done

xcat1 # pbsnodes | grep -A3 "^xcat[23]$" | grep -v "\-"
xcat2
state = free
np = 2
properties = centos5
xcat3
state = free
np = 2
properties = centos5

 

运行作业

通过创建一个作业脚本 uname.pbs、提交它并检查作业输出可以核实作业调度和执行是否工作,如清单 26 所示。作业提交是作为一个非特权用户执行的。


清单 26. 运行 TORQUE 作业

				
xcat1 $ id -un
gabriel

xcat1 $ cd ~/TORQUE/jobs

xcat1 $ more uname.pbs
rel=/etc/redhat-release
if [ -f $rel ]; then
cat $rel
fi

xcat1 $ qsub -l nodes=centos5 uname.pbs
1.xcat1.cluster

xcat1 $ more uname.pbs.o1
CentOS release 5.4 (Final)

动态供应

之前的一节展示了当有 CentOS 节点时,TORQUE 若要运行一个作业将需要 CentOS 操作系统。但是,如果一个作业所需的操作系统没有在任何一个节点上运行,那么作业将不会运行。动态供应确保了所创建的节点均具有作业所要求的操作系统。

如下的机制被用来管理执行环境:

  • 可用执行环境的列表包含了每个操作系统的名称,在本文中为 centos5fedora10, 且对于每个操作系统,有一个联网引导的映像被安装在位于 /install/netboot 的管理节点上。
  • 每个作业通过作业 node 属性表明它所需的执行环境 — 比如,qsub -l nodes centos5 job.pbs
  • 每个节点通过此节点的 properties 属性声明当前安装的那个执行环境。
  • TORQUE 将一个作业调度到其 properties 属性与此作业的 nodes 属性的值相匹配的那个节点;供应代理确保这样的一个节点存在。

在节点被添加到 TORQUE 时,节点的 properties 属性被初始化并在供应代理重新供应此节点时被此代理更新。

由于 TORQUE 只允许提交其 nodes 属性匹配某执行节点的 properties 属性的作业,所以需要为此管理节点支持的每个执行环境创建一个伪(dummy)节点。TORQUE 还要求所有节点名均被解析成一个 IP 地址,所以可以使用这些节点的 IPMI 作为伪执行节点,如清单 27 所示。


清单 27. 伪节点

				
xcat1 # qmgr -c "create node xcat2i"
xcat1 # qmgr -c "set node xcat2i properties=centos5"

xcat1 # qmgr -c "create node xcat3i"
xcat1 # qmgr -c "set node xcat3i properties=fedora10"

xcat1 # pbsnodes | grep -A3 "^xcat[23]i" | grep -v "\-"
xcat2i
state = down
np = 1
properties = centos5
xcat3i
state = down
np = 1
properties = fedora10

 

供应代理

供应代理执行如下动作:

  1. 从 xCAT 获得计算节点的列表 C,并且对于 C 内的每个节点 n,若 n 具有供应给当前时间的资格,就设置时间 T(n)。在任何的时间 t,如果 t > T(n), 则节点 n 具有供应资格。
  2. 从 TORQUE 获得作业的列表以及作业所要求的操作系统。
  3. 为了满足一个暂挂作业的要求,决定需由另一个操作系统供应的计算节点列表 L。只有具有供应资格的节点才能在 L 内出现。
  4. 配置 L 内的每个节点 n,如下所示:
    1. 设置操作系统 OS(n),其中 n 是被供应的。
    2. C 删除 n
  5. 对于列表 L 内的每个节点 n,执行重新供应,如下所示:
    1. 指示 TORQUE 停止将作业调度给 n
    2. n 没有任何作业后,指示 xCAT 用 OS(n) 供应 n
    3. 当 xCAT 报告 n 以新操作系统引导时,指示 TORQUE 启用对 n 的调度作业,将 T(n) 设为当前时间外加停止时间 Q,并将 nL 移到 C
  6. 返回步骤 2。

此供应代理由 Perl 程序 prov_agent.pm 实现,该程序可从 下 载 部分得到。通过将此程序作为根用户运行可以启动此供应代理。

代理的简单用例

通过提交 清 单 26 内所示的这个作业脚本可以尝试动态供应,而同时指示执行环境 fedora10。此作业的结果所导致的节点配置的变化如清单 28 所示。


清单 28. 重新供应的例子

				
xcat1 $ id -un
gabriel

xcat1 $ pbsnodes | grep -A3 "^xcat[23]$" | grep -v "\-"
xcat2
state = free
np = 2
properties = centos5
xcat3
state = free
np = 2
properties = centos5

xcat1 $ cd ~/TORQUE/jobs
xcat1 $ qsub -l nodes=fedora10 uname.pbs
7.xcat1.cluster

xcat1 $ pbsnodes | grep -A3 "^xcat[23]$" | grep -v "\-"
xcat2
state = free
np = 2
properties = fedora10
xcat3
state = free
np = 2
properties = centos5

xcat1 $ more uname.pbs.o7
Fedora release 10 (Cambridge)

 

虽然此供应代理使用了很简单的规则来决定何时重新供应一个节点以及选择哪个节点进行重新供应,但它却展示了动态更改计算节点 “性质” 这一复杂理念。

结束语

在集群的管理中结合 xCAT 与 TORQUE 和一个供应代理会创建一个自适应的基础设施,其中计算节点基于作业的要求而被动态供应。这种自适应基础设施让您能够使用开源软件创建一个私有或公共的云服 务。

虽然本文探讨了 xCAT 与 TORQUE 工作负载和资源管理器的结合使用,但是您也可以结合 xCAT 与其他的开源或商业的工作负载和资源管理器。在本文中,我们选择 TORQUE 是因为它在 Linux 发行版内的广泛可用性以及配置的简便性。

加载中
0
w
wuGuangyu

如果要动态供应Windows/Linux混合环境呢?

返回顶部
顶部