[TOC]
Docker容器安装-多节点PbsPro
名称 | 版本 | 下载 |
---|---|---|
系统 | CentOS-7-x86_64-DVD-1708 | 点我 |
镜像 | pbspro/pbspro | docker pull pbspro/pbspro |
1 简介:
1.1 Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
1.dockerClient客户端
2.Docker Daemon守护进程
3.Docker Image镜像
4.DockerContainer容器
Docker总架构
1.2 PBS简介
PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需要,如集群系统、超级计算机和大规模并行系统。
PBS是功能最为齐全, 历史最悠久, 支持最广泛的本地集群调度器之一。PBS的主要特点有:代码开放,免费获取;支持批处理、交互式作业和串行、多种并行作业,如MPI、PVM、HPF、MPL。
PBS的目前包括:openPBS, PBS Pro和Torque三个主要分支.
OpenPBS:是最早的PBS系统, 目前已经没有太多后续开发
PBS pro:是PBS的商业版本, 功能最为丰富
Torque:是Clustering公司接过了OpenPBS, 并给与后续支持的一个开源版本
应用PBS提交任务则会形成任务队列,依次执行,有效分配资源,避免资源竞争。否则CPU时间片会轮流分配给各个人的任务,从而影响所有人的正常作业。
torque主要由三个主要部件组成:
PBS服务守护进程: pbs_server 负责接收作业提交,位于服务节点
PBS调度守护进程: pbs_sched 负责调度作业,位于服务节点
PBS MOM守护进程: pbs_mom 负责监控本机并执行作业,位于所有计算节点
2 安装Docker
网上的安装资料很多:centos7 安装docker
#卸载老版本的 docker 及其相关依赖
$sudo yum remove docker docker-common container-selinux docker-selinux docker-engine
#安装 yum-utils,它提供了 yum-config-manager,可用来管理yum源
$sudo yum install -y yum-utils
#添加yum源
$sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#更新yum索引
$sudo yum makecache fast
#安装 docker-ce
$sudo yum install docker-ce
#启动 docker
$sudo systemctl start docker
#验证是否安装成功
$sudo docker info
#通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
$vi /etc/docker/daemon.json
#添加
{
"registry-mirrors": ["https://w5z91a3d.mirror.aliyuncs.com"]
}
#开放管理端口映射
$vi /lib/systemd/system/docker.service
#修改ExecStart=/usr/bin/dockerd为以下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654
#将管理地址写入 /etc/profile
$echo 'export DOCKER_HOST=tcp://0.0.0.0:2375' >> /etc/profile
$source /etc/profile
$systemctl daemon-reload && service docker restart
#测试docker
$sudo docker run hello-world
#若成功,显示:
Hello from Docker!
This message shows that your installation appears to be working correctly.
#安装OK!
Docker 安装完成后,下载pbspro/pbspro镜像,此镜像中已经安装了pbspro
$Docker pull pbspro/pbspro
下一步,运行此镜像创建三个容器建立SSH互信。
3 建立SSH互信
使用pbspro/pbspro镜像创建三个容器,分别指定镜像名称、hostname、自定义网络、IP并且添加互信的hostname到/etc/hosts中,如下表:
容器名称 | 容器hostname | ip |
---|---|---|
pbs1 | pbs1 | 172.18.0.3 |
pbs2 | pbs2 | 172.18.0.4 |
pbs3 | pbs3 | 172.18.0.5 |
镜像创建三个容器,pbs1作为主节点进行管理,pbs2和pbs3作为计算节点进行计算
$docker run -tid --name pbs1 -h pbs1 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.3 pbspro/pbspro bash
$docker run -tid --name pbs2 -h pbs2 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.4 pbspro/pbspro bash
$docker run -tid --name pbs3 -h pbs3 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.5 pbspro/pbspro bash
查看刚刚创建的三个制定镜像,如下图所示:
分别进入这三个容器,参考使用ssh在容器间建立互信.md
进行建立ssh互信
建立完毕后,在分别进行配置PbsPro
4 安装配置PbsPro
因为下载的这个镜像已经安装有了Pbspro,所以只需要配置,如果想制作自己的PbsPro,请参考:使用RPM包安装PBS Pro
4.1 配置管理节点
登录管理节点pbs1,然后以root用户运行,修改/etc/pbs.conf
$vi /etc/pbs.conf
#修改PBS_SERVER和PBS_START_MOM
PBS_SERVER=pbs1
PBS_START_MOM=0
备注:如果是单机安装pbspro,要将PBS_START_MOM改为1
修改/var/spool/pbs/mom_priv/config
$vi /var/spool/pbs/mom_priv/config
#修改clienthost为pbs1
clienthost pbs1
4.2 配置计算节点
分别登录计算节点pbs2和pbs3,然后以root用户运行,修改/etc/pbs.conf
$vi /etc/pbs.conf
#修改PBS_SERVER和PBS_START_MOM
PBS_SERVER=pbs1
PBS_START_MOM=1
修改/var/spool/pbs/mom_priv/config
$vi /var/spool/pbs/mom_priv/config
#修改clienthost为pbs1
clienthost pbs1
4.3 启动PBS添加计算节点
分别在pbs1和pbs2、pbs3节点上运行以下命令启动pbs,第一次启动会创建数据库
$/etc/init.d/pbs start
备注:
$/etc/init.d/pbs start #启动pbs
$/etc/init.d/pbs stop #停止pbs
$/etc/init.d/pbs restart #重启pbs
$/etc/init.d/pbs status #查看pbs状态
在管理节点添加计算机节点pbs2、pbs3
$. /etc/profile.d/pbs.sh
$qmgr -c "create node pb2"
$qmgr -c "create node pb3"
查看添加的计算节点,节点的状态显示为free
即就是计算节点添加成功
$pbsnodes -a
4.3 测试
在管理节点pbs1创建用户,进行提交作业,状态显示R为任务正在运行,同时也需要在其他计算节点也添加相同的用户,使其UID个GID一样
$useradd user1
$su user1
$cd
$qsub -- /bin/sleep 10
$qstat -a
#使用tracejob JobID查看作业的进度
$tracejob 13.pbs1
备注:**pbs任务提交脚本及查看任务状态
#B 只用于任务向量,表示任务向量已经开始执行
#E 任务在运行后退出
#H 任务被服务器或用户或者管理员阻塞
#Q 任务正在排队中,等待被调度运行
#R 任务正在运行
#S 任务被服务器挂起,由于一个更高优先级的任务需要当前任务的资源
#T 任务被转移到其它执行节点了
#U 由于服务器繁忙,任务被挂起
#W 任务在等待它所请求的执行时间的到来(qsub -a)
#X 只用于子任务,表示子任务完成
5 PBS命令
5.1 qsub 命令
qsub 命令:用于提交作业脚本
#命令格式:
$qsub -a date_time [-C directive_prefix]
-e path -j join -l resource_list
-M user_list -o path -q destination
-S path_list-v variable_list
-W additional_attributes
参数说明:因为所采用的选项一般放在pbs 脚本中提交,所以具体见PBS 脚本选项。
例:# qsub aaa.pbs 提交某作业,系统将产生一个作业号
5.2 qstat 命令
qstat 命令:用于查询作业状态信息
#命令格式:
$qatat -f-i-s -Q-B
参数说明:
参数 | 作用 |
---|---|
-f | jobid 列出指定作业的信息 |
-a | 列出系统所有作业 |
-i | 列出不在运行的作业 |
-n | 列出分配给此作业的结点 |
-s | 列出队列管理员与scheduler 所提供的建议 |
-R | 列出磁盘预留信息 |
-Q | 操作符是destination id,指明请求的是队列状态 |
-q | 列出队列状态,并以alternative 形式显示 |
-au userid | 列出指定用户的所有作业 |
-B | 列出PBS Server 信息 |
-r | 列出所有正在运行的作业 |
-Qf queue | 列出指定队列的信息 |
-u | 若操作符为作业号,则列出其状态。 |
例:# qstat -f 211 查询作业号为211 的作业的具体信息。
5.3 qdel 命令
qdel 命令:用于删除已提交的作业
#命令格式:
$qdel [-W 间隔时间] 作业号
例:# qdel -W 15 211 #15秒后删除作业号为211 的作业
5.4 qmgr 命令—用于队列管理
qmgr 命令—用于队列管理
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"
5.5 基本脚本写法和选项
当多个用户使用同一个计算资源时,每个用户用PBS脚本提交自己的任务,由PBS对这些任务进行管理和资源的分配。下面是一个简单的PBS脚本:
#!/bin/bash
#PBS -l nodes=20
#PBS -N snaphu
#PBS -j oe
#PBS -l walltime=24:00:00
#PBS -l cput=1:00:00
#PBS -q dque
$cd $PBS_O_WORKDIR
$cat PBS_NODEFILE PBS_NODEFILE> NODEFILE
$mpirun -np ./mpitest
将这个脚本保存成submit然后qsub submit就将这个mpitest的任务提交给了系统。脚本中#PBS为脚本选项,用于设置一些参数。
#PBS -l 表示资源列表,用于设定特定任务所需的一些参数。这里的nodes表示并行环境下可以使用的节点数,而walltime表示任务最大时限,而cput表示cpu时间的最大时限,运行时间和cpu使用时间超过对应的时限,任务就会以超时退出。这三个参数不是PBS脚本参数,而是并行环境所需的参数。
#PBS -N 表示任务名称。
#PBS -j 表示系统输出,如果是oe,则标准错误输出(stderr)和标准输出(stdout)合并为stdout,如果是eo,则合并为stderr,如果没有设定或设定为n,则stderr和stdout分开。
#PBS -q 表示当前任务选用的队列。在并行环境下,一个系统中往往有多个队列,任务提交后,将在所选的队列中排除等候。系统中有哪些队列可以用qstat -q查看。
PBS脚本文件由脚本选项和运行脚本两部分组成。
PBS作业脚本选项 (若无-C选项,则每项前面加‘#PBS’)
运行脚本同LINUX下一般的运行脚本文件格式如下:
mpirun –np 进程数 ./可执行程序名
6 可能出现的问题
1 防火墙
出于简单,可以关闭防火墙
$systemctl stop firewalld.service #停止firewall
$systemctl disable firewalld.service #禁止firewall开机启动
2 下载源
更换 CentOS 7 的下载源为阿里云
$yum install -y wget
#备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除YUM缓存
yum clean all
#重建数据库
rpm --rebuilddb
#生成缓存
$yum makecache
3 IPv4 forwarding is disabled
若出现WARNING IPv4 forwarding is disabled. Networking will not work
#解决办法:
$vi /usr/lib/sysctl.d/00-system.conf
#添加如下代码:
net.ipv4.ip_forward=1
#重启network服务
$systemctl restart network
#查看是否修改成功
$sysctl net.ipv4.ip_forward
#如果返回为net.ipv4.ip_forward = 1则表示成功了
4 yum 安装时错误 Errno 14 Couldn't resolve host
修改一下 /etc/resolv.conf,添加一个nameserver 8.8.8.8完成
$vi /etc/resolv.conf
nameserver 8.8.8.8
7 总结
待续。。。
参考资料
1 :Using Docker to Instantiate PBS
3:How to install PBS Pro using the configure script
2017/11/16-Boy