分享

搭建slurm...

 玄远书志 2022-05-07 发布于广东省

搭建slurm

本地环境

  1. 系统:centos7.6

  2. VMwareWrok Station Pro15.1.0

  3. 3台虚拟机配置

    control:cpu=1,mem=1G
    compute1:cpu=1,mem=1G
    compute2:cpu=1,mem=1G
    
  4. slurm版本19.05.2-1

  5. NFS服务端、NIS服务端、slurmctldslurmdbdslurmd部署在control节点,slurmd部署在compute[1-2],数据库部署在compute2节点。

配置centos环境

配置网卡开机自启,以及DNS

配置网卡开机自启

$ vim etc/sysconfig/network-scripts/ifcfg-ens33 # 将ONBOOT=no这一项改为ONBOOT=yes
$ service network restart

配置DNS

$ vim /etc/NetworkManager/NetworkManager.conf 
# 在[main]下,添加dns=no

添加DNS地址

$ vim /etc/resolv.conf
# 添加 namesever 8.8.8.8
# 添加 nameserver 114.114.114.114

关闭防火墙,包括firewalld和selinux

关闭firewalld

$ systemctl disable firewalld

关闭selinux

$ vi /etc/selinux/config
# 将SELINUX的值设置为disabled,下次开机则不会自启

检测selinux状态

getenforce

配置ssh免密登录

安装ssh服务

$ yum install openssl openssh-server -y

配置ssh服务

$ vim /etc/ssh/sshd_config
# 设置PermitRootLogin=yes
# 设置PasswordAuthentication=yes
# 设置PubkeyAuthentication=yes

生成密钥对

$ ssh-keygen -t rsa

导入公钥

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

注意.ssh文件夹700权限和文件.ssh/authorized_keys的600权限

重启sshd服务

$ systemctl restart sshd

克隆机器、配置ip、hostname、hosts

克隆2台机器作为compute[1,2],克隆的机器注意mac要不一样,否则会出现不能上网问题。

配置固定ip

$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改BOOTPROTO=static
# 修改IPADDR=192.168.145.100
# 修改NETMASK=255.255.255.0
# 修改GATEWAY=192.168.145.2

配置hosts文件

$ vim /etc/hosts
# 增加 192.168.145.100 control
# 增加 192.168.145.101 compute1
# 增加 192.168.145.102 compute2

配置主机名

$ vim /etc/hostname
# 修改主机名

重启生效

$ reboot

配置NFS环境

服务端部分

安装

$ yum install nfs-utils rpcbind -y

自动启服务

$ systemctl enable rpcbind
$ systemctl enable nfs-server
$ systemctl enable nfs-lock
$ systemctl enable nfs-idmap

启动服务

$ systemctl start rpcbind
$ systemctl start nfs-server
$ systemctl start nfs-lock
$ systemctl start nfs-idmap

配置共享目录

$ vim /etc/exports
# 添加 /home 192.168.145.0/24(rw,sync,no_root_squash) 

使其生效

exportfs -a

客户端部分

安装

$ yum install nfs-utils -y

检查服务端共享目录

$ showmount -e 服务器地址

配置NFS开机自动挂载

$ vim /etc/fstab
# 添加 服务器地址:目录 客户端目录 nfs defaults 0 0

手动临时挂载

$ mount -t nfs 服务器地址:目录 客户端目录

配置NIS环境

NIS服务端环境

安装以及添加域名

安装

$ yum install ypserv ypbind yp-tools rpcbind -y

添加NIS域名

$ vim /etc/rc.d/rc.local
# 添加nisdomainname nisdomain

不重启则需要执行

$ nisdomainname nisdomain
添加用户

创建域用户

$ useradd -s /bin/bash nisuser

设置密码

$ passwd nisuser

创建用户组

$ groupadd nisgroup

将用户添加到组中

$ usermod -G nisgroup nisuser
配置NIS客户端权限

在配置文件中添加权限

$ vim /etc/ypserv.conf
# 添加 192.168.145.0/24:*:*:none
初始化NIS数据库以及启动NIS服务

自启动NIS服务

$ systemctl enable rpcbind
$ systemctl enable yppasswdd
$ systemctl enable ypserv

启动NIS服务

$ systemctl start rpcbind
$ systemctl start yppasswdd
$ systemctl start ypserv

初始化NIS数据库

$ /usr/lib64/yp/ypinit -m

每次修改用户后,更新数据库

$ make -C /var/yp

初始化数据库后重启服务

$ systemctl restart rpcbind
$ systemctl restart yppasswdd
$ systemctl restart ypserv

检查服务是否启动

rpcinfo -p localhost

NIS客户端环境

安装客户端
$ yum install ypbind yp-tools rpcbind -y
添加NIS域

在网络中添加NIS域,同NIS服务器配置方法

使用authconfig-tui配置客户端
$ authconfig-tui
# 选中NIS, Shadow Passwords ,Local authorization is sufficient
# 设置NIS Settings

启动服务

$ systemctl enable rpcbind
$ systemctl enable ypbind
$ systemctl start rpcbind
$ systemctl start ypbind
检测
yptest
注意点
  1. /etc/ypserv.confNIS服务端配置文件,可以控制NIS客户端是否可以访问NIS服务器。
  2. /etc/hosts记录主机和IP地址对应关系,如果没有DNS系统,则NIS服务器的hosts文件需要存放每一台NIS客户端的主机记录。

安装slurm

安装epel-release

yum install -y epel-release 

安装配置munge

安装

$ yum install munge munge-libs munge-devel -y

生成munge.key

$ create-munge-key

分发key给客户端,可以使用md5sum工具校验各个节点key是否一致

$ scp /etc/munge/munge.key root@compute1:/etc/munge
$ scp /etc/munge/munge.key root@compute2:/etc/munge

启动munge服务

$ systemctl enable munge
$ systemctl start munge

测试

munge -n | ssh 客户端主机名 unmunge

安装slurm

这里使用的是slurm rpm包,版本19.05.2-1

$ yum --nogpgcheck localinstall slurm-*

创建目录

$ mkdir -p /var/spool/slurm/d

配置slurm.conf文件,参考官网在线配置。

服务端开启服务

$ systemctl enable slurmctl
$ systemctl enable slurmd
$ systemctl start slurmctl
$ systemctl start slurmd

客户端开启

$ systemctl enable slurmd
$ systemctl start slurmd

不成功可以使用slurmd -Dcv切换前台模式查看原因

$ slurmd -Dcv

搭建slurmdbd环境

mysql服务端安装

这里使用mysql,但是建议用mariadb

下载

$ wget https://dev./get/Downloads/MySQL-8.0/mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

解压缩

$ 解压缩 tar -xvf mysql-8.0.16-2.el7.x86_64.rpm-bundle.tar

安装commonlibsclientserver

$ rpm -ivh mysql-community-client-8.0.16-2.el7.x86_64.rpm --nodeps --force
$ rpm -ivh mysql-community-libs-8.0.16-2.el7.x86_64.rpm --nodeps --force
$ rpm -ivh mysql-community-common-8.0.16-2.el7.x86_64.rpm --nodeps --force
$ rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64.rpm --nodeps --force

查看安装好的mysql

$ rpm -qa | grep mysql

初始化mysql服务端

初始化mysql,需要root账户

$ mysqld --initialize

更改所有者,所属组

$ chown mysql:mysql /var/lib/mysql -R

启动服务

$ systemctl enable mysqld
$ systemctl start mysqld

设置mysql远程账户

查看初始密码

$ cat /var/log/mysqld.log | grep password

登录

$ mysql -u -root -p

修改初始密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

创建远程账号

create user 'mouse'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

为远程账户授权

grant all privileges on *.* to 'mouse'@'%' with grant option;

刷新生效

flush privileges;

配置客户端

安装

$ rpm -ivh mysql-community-client-8.0.16-2.el7.x86_64.rpm --nodeps --force

检查

rpm -qa | grep mysql

为slurmdbd创建数据库

create database slurm_acct_db;

配置slurmdbd

修改slurmdbd.conf文件,参考官方文档。

启动slurmdbd服务

$ systemctl enable slurmdbd
$ systemctl enable slurmdbd

将集群加入作业

$ sacctmgr add cluster 集群名

OpenMPI

什么是MPI

MPI 的全称是 Message Passing Interface,即消息传递接口。它是一种用于编写并行程序的标准,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性,有 MPICH、OpenMPI 等一些具体的实现,提供 Fortran、C、C++ 的相应编程接口。MPI 的目标是高性能,大规模性,和可移植性。MPI 在今天仍为高性能计算的主要模型。

MPI 的工作方式很好理解,我们可以同时启动一组进程,在同一个通信域中不同的进程都有不同的编号,程序员可以利用 MPI 提供的接口来给不同编号的进程分配不同的任务和帮助进程相互交流最终完成同一个任务。

安装OpenMPI

$ yum install openmpi3.x86_64 openmpi3-devel.x86_64 gcc gcc-c++ make

测试

# 当前账户要有各个节点ssh公钥
# 不建议用root账户,若使用,则需要--allow-run-as-root参数
$ mpirun  -H compute1,compute2,control hostname

例子hello_c.c

#include <stdio.h>
#include "mpi.h"

int main(int argc, char* argv[])
{
    int rank, size, len;
    char version[MPI_MAX_LIBRARY_VERSION_STRING];

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Get_library_version(version, &len);
    printf("Hello, world, I am %d of %d, (%s, %d)\n",
           rank, size, version, len);
    MPI_Finalize();

    return 0;
}

编译并执行

$ make
$ ./hello_c

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多