Openpbs centos7集群安装配置心得
- 写在前面
- 准备工作
- 1.安装虚拟机
- 2.创建虚拟机集群
- SSH免密登陆
- 网络环境配置
- ssh免密登陆
- 建立NFS共享目录
- 关闭各节点防火墙和Selinux
- 服务端(master)
- 客户端(host1)
- 安装配置mpich
- 安装编译器
- 解压编译
- 配置环境
- Openpbs安装
- 配置环境
- 安装
写在前面
本文参考,感谢原创:
https://blog.csdn.net/weixin_45606067/article/details/109962484
https://blog.csdn.net/secyb/article/details/78697976
https://blog.csdn.net/smart9527_zc/article/details/85174102
https://blog.csdn.net/weixin_45842014/article/details/108779004
https://blog.csdn.net/zqwzlanbao/article/details/83987570
http://thisis.yorven.site/blog/index.php/2020/12/06/openpbs-install-instructions/
版权声明:以上文章为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
此外还有openpbs的官方手册,地址: https://www.altair.com/pbs-works-documentation/
涉及到的安装包:
MPICH:
https://www.mpich.org/static/downloads/3.3/mpich-3.3.tar.gz
Openpbs:https://github.com/openpbs/openpbs/releases/download/v19.1.3/pbspro_19.1.3.centos_7.zip
准备工作
1.安装虚拟机
这里我使用的Linux版本是centos7,其他linux操作系统比如Ubuntu、Fredora等和centos类似,但是有一些命令和文件的位置不同,比如说安装命令。下载系统镜像iso文件可以到清华镜像网站https://mirrors.tuna.tsinghua.edu.cn/
我使用的虚拟机平台是VMware Workstation Pro ,也可以使用免费的VMware Player进行安装,具体安装步骤可参考
VM中安装Centos7详细步骤(图文)
建议将虚拟机和虚拟硬盘放在同一个自己能找到的文件夹下,例如D:/centos7/,以便后续复制虚拟机。
在配置虚拟机网络时可直接查看虚拟机设置里的DHCP选项,直接勾选即可。如果DHCP是打开的, 那虚拟机应该是已经连上网的,可以在终端ping一下百度能不能连接上,或者直接打开Firefox试试。
ping www.baidu.com
2.创建虚拟机集群
下面表格是我在创建集群时的配置
主机 | IP | 备注 |
---|---|---|
master | 192.68.45.131 | 主节点 |
host1 | 192.68.45.132 | 子节点 |
host2 | 192.68.45.133 | 子节点 |
搭建pbs集群时我选择了一个主节点和两个子节点,可以在vm上创建多个虚拟机来模拟集群,这里我用的是复制虚拟机。
复制虚拟机的具体步骤可以参考
复制虚拟机相关文章
(也可以在VM里直接克隆虚拟机,克隆后需要更改的配置和上面这个文章相同。)
需要注意的是,本文上面提到将虚拟机和虚拟硬盘放在同一文件夹下,可以直接复制该文件夹再按照上面的文章进行虚拟机复制。
按照上述文章,发现不能同时打开被复制和复制后的虚拟机,原因是两台虚拟机占用了同一个虚拟硬盘。可以通过更改虚拟机的虚拟硬盘来解决这个问题。
- 关闭虚拟机master和host1
- 打开host1的虚拟机设置
- 移除现有的虚拟硬盘
- 添加新硬盘
选择SCSI(S)
选择使用现有虚拟磁盘
选择后缀名没有s00x的这个vmdk文件,完成。
SSH免密登陆
网络环境配置
两个子节点的配置操作是一样的,下面的操作就以master和host1为例。由于后面有些操作不能使用root用户,建议全程用普通用户登陆,在图形界面下打开两个终端,一个su root登陆比较方便。
分别配置两台机器的hosts文件。之前虚拟机网络设置采用的是DHCP,用ifconfig命令能够查到的机器IP地址但不是固定的。通过修改ifcfg-ens33文件可以“固定”IP。(之前我一直弄不好虚拟机固定IP,导致虚拟机连不上网,索性就忽略了,直接改系统的配置文件,没想到这样既能保持联网,还能保证后面的安装进行)
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
#在文件尾添加
IPADDR=192.68.45.131
DNS1=114.114.114.114
#同样在host1上配置,IP地址改为192.68.45.132
#重启网络
sudo systemctl restart network
#查看是否更改成功
ifconfig
在重启网络后查看IP地址有时可能会发现inet与文件中添加的IPADDR不同,但是没有影响我后面的安装,可以先不管。
分别在master和host1中编辑hosts文件。
sudo vim /etc/hosts
#在文件中写入所有节点的IP和机器名,例如
192.68.45.131 master
192.68.45.132 host1
更改机器名可以用
hostnamectl set-hostname <机器名称>(命令中不包括尖括号)
#设置好hosts和host那么之后最好重启
此时两台机器应该能ping通(master ping host1)
ssh免密登陆
(1)在每个节点安装ssh服务
sudo yum install openssh
sudo systemctl start sshd
#启动ssh
(2)各节点(主节点和子节点)生成私钥和公钥
ssh-keygen -t rsa
#生成的的钥匙文件在~/.ssh/下
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#认证,执行该步后可以本机免密登陆,使用ssh master测试
(3)把各子节点的id_rsa.pub传到主节点
scp id_rsa.pub <用户名>@master:~/.ssh/id_rsa.pub.host1
(4)在主节点操作认证
cat ~/.ssh/id_rsa.pub.host1 >> ~/.ssh/authorized_keys
cd ~/.ssh/
(5)将主节点的认证文件传回子节点
scp authorized_keys <用户名>@host1:~/.ssh/authorized_key
sudo systemctl restart sshd
注意,ssh免密登陆是用户对用户式的,所以在操作中要保证主节点终端和子节点的终端是对应的。
建立NFS共享目录
关闭各节点防火墙和Selinux
关闭防火墙
启动: systemctl start firewalld
关闭: systemctl stop firewalld
开机禁用: systemctl disable firewalld
开机启用: systemctl enable firewalld
关闭Selinux
临时关闭
开启: setenforce 1
关闭: setenforce 0
服务端(master)
yum install nfs-utils rpcbind
#安装软件
mkdir -p /home/mpi_share
#创建共享目录
chmod 777 /home/mpi_share -R
#授予权限
vim /etc/exports
#修改配置
写入:
/home/mpi_share 192.68.45.132(rw,sync,no_root_squash) <其他子节点地址>(rw,sync,no_root_squash)
#192.68.45.132是子节点的地址,也可以是主机名,权限选项中的rw表示允许读写;ro为只读;sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限。
systemctl start rpcbind
systemctl start nfs
#启动nfs,或者设置为开机启动
systemctl enable rpcbind
systemctl enable nfs
showmount -e
#查看NFS服务器端的共享目录
客户端(host1)
yum install nfs-utils rpcbindmkdir -p /home/mpi_share
#将各个节点的共享目录位置和名字设置成一样的systemctl start rpcbindsystemctl start nfs
#同样可以设置开机启动
showmount -e 192.68.45.131
#显示服务端的共享目录
mount -t nfs 192.68.45.131:/home/mpi_share /home/mpi_share
#前者是服务端的共享目录,后者是客户端的目录
#将共享目录挂载到本地文件夹测试:
cd /home/mpi_share
touch test.txt
#创建txt文件在服务端上:
cd /home/mpi_share
ls
#查看是否生成txt文件
mount命令是暂时的,机器重启后失效,永久挂载可以用下面的方法:
vim /etc/fstab
添加
192.68.45.131:/home/mpi_share /home/mpi_share nfs rw 0 0
这样设置的是在开机自动挂载,每次使用的时候需要先将服务端开启,否则客户端挂载不上共享目录,有1分35秒的尝试时间,可以在开机页面摁下Ctrl+Alt+2转到命令行下查看,能开机但是共享目录不可用。
安装配置mpich
安装编译器
yum install gcc g++
#mpich默认的编译器是gcc,g++和gfortran,但是yum命令找不到gfortran的安装包
#可以自行查找安装gfortran编译器的方法
解压编译
这里我将安装包放在了~/download/下
cd ~/download
tar -zxvf mpich-3.3.tar.gz
#解压压缩包
cd ./mpi-3.3
#进入解压后的目录,有一个README文件有详细的安装步骤
./configure --disable-fortran
#这里的后缀会取消掉Fortran的配置,在README中有介绍
make
make install
#配置编译的时间比较长
#可以自行设置安装路径
在每个节点下都安装mpich,可以将tar压缩包放在之前设置好的共享目录下。
配置环境
- 新建配置文件
在/home/mpi_share下新建一个文件:servers,它注明每台机器有几个核。
cd /home/mpi_sharesudo vim mpi_config_file
写入:
master:4
host1:4
host2:4
- 测试案例程序
在之前解压的mpich-3.3目录下的examples目录下有可执行文件cpi,我们运行它即可。
将可执行文件复制到共享目录/home/mpi_share/中,切换到共享目录下
cd /home/mpi_sharempiexec -n 8 -f ./servers ./cpi
#-n 表示人物需要的核数,-f表示参考的配置文件,最后是可执行文件
成功结果如下:
[cjx@master mpi_share]$ mpiexec -n 8 -f servers ./cpi
Process 4 of 8 is on host1
Process 5 of 8 is on host1
Process 6 of 8 is on host1
Process 7 of 8 is on host1
Process 0 of 8 is on master
Process 3 of 8 is on master
Process 1 of 8 is on master
Process 2 of 8 is on master
pi is approximately 3.1415926544231247, Error is 0.0000000008333316
wall clock time = 0.001251
Openpbs安装
配置环境
这里我将压缩文件pbspro_19.1.3.centos_7.zip放在~/download/下
unzip pbspro_19.1.3.centos_7.zip
解压后的目录下有四个rpm安装包,根据名字即可推断其用途,这里我们只需要两个包
pbspro-server-19.1.3-0.x86_64.rpm是服务器节点(主节点)所需要安装的包
pbspro-execution-19.1.3-0.x86_64.rpm是计算节点(子节点)所需要安装的包
安装前需要配置一些环境,下面是官方手册给出的环境变量图,不过我设置半天也没整明白,下面给出我试成功的办法。
在主节点上不需要设置这些环境变量
在子节点上需要在安装前先设置环境变量
export PBS_SERVER=master
export PBS_EXEC=/opt/pbs
export PBS_HOME=/var/spool/pbs
安装
- 主节点
进入解压后的目录
yum install pbspro-server-19.1.3-0.x86_64.rpm
安装后生成一个配置文件/etc/pbs.conf
用vim打开后在里面找到PBS_START_MOM,它表示当前机器是否承担计算任务,1表示承担,0表示不承担。
下面开启pbs并查看状态
systemctl start pbs/etc/init.d/pbs status
#查看运行状态
会有以下类似输出:
pbs_server is pid 6661
pbs_mom is pid 6270
pbs_sched is pid 6282
pbs_comm is 6242
如果有错误的话可以su root后再试试
在server上使用root 用户还需要输入以下命令
qmgr -c"set server flatuid=true"
qmgr -c "set server schduling=true"
qmgr -c "set server job_history_enable=1"
至此,server的配置安装完成。
- 子节点
进入解压后的目录
export PBS_SERVER=master
export PBS_EXEC=/opt/pbs
export PBS_HOME=/var/spool/pbsyum install pbspro-execution-19.1.3-0.x86_64.rpmsystemctl start pbs/etc/init.d/pbs status
显示以下类似内容
pbs_mom is pid 6270
- 添加节点
此时主节点server还不能调用子节点进行运算,需要在主节点中添加计算节点
su root
#用root用户操作
qmgr -c "create node host1"
#host1就是想要添加的计算节点
pbsnodes -a 或者 pbsnodes -aSj
#输出所有节点的信息
#节点state显示free,说明节点可用
- 测试
在一般用户下,在master上提交任务
echo "sleep 600" | qsub
#提交一个最简单的任务
qstat -a
#查看运行的任务状态
qstat -H
#查看历史任务
实际使用中,经常以脚本方式提交命令,
在脚本中用mpiexec或者mpirun运行mpich.