Ubuntu搭建计算集群

计算机硬件和技术的发展使得高性能模拟和计算在生活和工作中的作用逐渐显现出来,无论是计算化学,计算物理和当下的人工智能都离不开高性能计算。笔者工作主要围绕计算化学和物理开展,亦受限于自身知识和技术所限,文中只是浅显地尝试了整个搭建工作的步骤,很多细节没有深入,还望大家多指导,参考《计算化学集群构建入门》张鋆博士。同时集群搭建可以分为硬件和软件两部分,硬件可以参考北京科音自然科学研究中心内容,这里仅是在软件部分的尝试,记录下来也有个参考。本次采用VituralBox虚拟机,Ubuntu16.04系统,虚拟机采用VMware也是可以,系统亦可采用CentOS,这里相对真实的搭建缺少了交换机,两者还是有所不同的。

1.操作系统安装

可以采用U盘或者移动光驱来进行安装,较为简单。需要注意的是网络设置,要自主设定IP、子网掩码、默认网关(/etc/network/interfaces)、DNS(/etc/resolv.conf),主机名(/etc/hostname)和域名(/etc/hosts)。而虚拟机和真实搭建也有所不同,网络设定可以参考之前内容。使用ping命令尝试,是否各节点间是否能够ping通,与外网是否连通。

一定要注意后面是在哪些节点(控制节点,用control指代,计算节点,用compute指代)、是采用什么账户(root或非root用户)进行。还需要及时删除所有计算节点的非root用户账户(增删用户尽量采用adduser/deluser,相对useradd/userdel更为方便省去删除用户的主目录、用户的邮件箱以及其他用户相关的文件步骤)。

一些关于虚拟机和Ubuntu使用技巧:虚拟机可以采用复制的方式,相对节约安装系统的时间;Ubuntu可以采用'ctrl+alt+F*'的方式切换图形界面(F7)与命令行模式;dpkg --list可以查看已经安装的软件;使用apt update/upgrade/install/autoremove更新、安装和删除相关软件;/etc/init.d/networking restart,此文件夹内主要是为了设置系统自启动相关项目,现在已被systemd取代;为避免依赖关系混乱,安装命令一定要统一,

2.网络通信系统

前一步中的网络设置也可以算在这里面的“前奏”,这里面也可分为三部分:a.SSH主机间无密码登陆;b.NFS主机间文件共享;c.NIS主机间用户同步

a.SSH主机间无密码登陆

SSH为了实现远程登陆,数据加密。需要在所有节点(控制节点和计算节点)安装OpenSSH,并在控制节点采用非root用户(用norootuser替代)登陆执行命令

ssh-keygen -t rsa
cd /home/norootuser/.ssh
cat id_dsa.pub >> authorized_keys

之后在控制节点ssh本机主机名即可,具体配置也可以自己修改

b.NFS主机间文件共享

NFS为了实现各节点间文件保持同步。在控制节点安装nfs-kernel-server,在计算节点安装nfs-client,如果控制节点就是计算节点可以省去相关步骤。使用root用户在控制节点修改/etc/exports文件将需要共享的文件夹添加进去

/home      192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)
/opt       192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)
/usr/local 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)

依次为共享文件夹、挂载IP范围、挂载配置,具体配置也可以查阅相关资料按需设定

使用root用户在计算节点修改/etc/fstab文件

control:/home      /home      nfs rw,defaults 0 0
control:/opt       /opt       nfs rw,defaults 0 0
control:/usr/local /usr/local nfs rw,defaults 0 0

在控制节点和计算节点执行或者重启节点为好,使用df命令在计算节点查看是否成功

control node:
/etc/init.d/nfs-kernel-server restart
compute node:
/etc/init.d/networking restart

c.NIS主机间用户同步

NIS起到用户管理工作。

在所有节点(控制节点和计算节点)使用root用户安装nis,要求输入域名时必须采用控制节点域名,此处为control。如果控制节点就是计算节点亦可省去相关步骤。

在所有节点(控制节点和计算节点)使用root用户编辑/etc/defaultdomain填入控制节点域名(默认已填入)

在所有节点(控制节点和计算节点)使用root用户编辑/etc/default/nis,控制节点设置为NISSERVER=master,NISCLIENT=true,计算节点设置为NISSERVER=false,NISCLIENT=true

在所有节点(控制节点和计算节点)使用root用户编辑/etc/yp.conf,写入ypserver control

在控制节点编译用户库,而且以后无论控制节点对/etc/passwd或group或shadow做任何修改,都应进行这一操作,以同步服务器和客户端用户信息

cd /var/yp
make

在计算节点对passwd,group,shadow编辑,写入“伪用户”信息

/etc/passwd 最后一行加入(一个+六个:):
+::::::
/etc/group  最后一行加入(一个+三个:):
+:::
/etc/passwd 最后一行加入(一个+八个:):
+::::::::

在所有节点(控制节点和计算节点)重启nis服务

/etc/init.d/nis restart

这样的话,ssh就可以正常登陆其他节点了

3.作业管理系统

之前的作业管理系统是通过Torque+Maui来完成的,随着其商用化,多数用户已经逐渐采用Slurm来管理作业进程,亦可参考内容。这里我们也使用Slrum来进行管理,具体来说Munge+Slurm来进行管理,前者在集群中能够实现本地或者远程主机进程的GID和UID验证。

a.MUNGE安装

所有节点都要安装和执行

apt install munge#获取为随机数据生成munge.key (推荐给没有耐心的人):
dd if=/dev/urandom bs=1 count=1024 >/etc/munge/munge.key#修改目录属主
chown -R munge:munge /var/{lib,log,run}/munge
chown -R munge:munge /etc/munge#修改目录模式
chmod 711 /var/lib/munge
chmod 700 /var/log/munge
chmod 755 /var/run/munge
chmod 700 /etc/munge
chmod 400 /etc/munge/munge.ke

这里有些地方提到关于munge权限的问题,本次直接生成了用户名为munge的用户,没有将其修改为root(在这里修改/lib/systemd/system/munge.service),有些攻略提到权限问题,这里没有遇到,如若需要,可以新建一个munge的用户或修改为root用户权限

#拷贝主节点密钥到其余节点
scp /etc/munge/munge.key munge@ip:/etc/munge

如若单节点上面步骤可以省略

systemctl start munge  # 启动munge服务
systemctl enable munge # 设置munge服务为开机自启
# systemctl另外也支持停止服务stop,取消开机自启disable,重启服务restart,查看服务状态status
# 还碰到过munge被防火墙mask了,这时候我没有关防火墙服务,直接systemctl unmask munge就行了

测试安装是否成功

munge -n                       #本地查看凭据: 
munge -n | unmunge             #本地解码
munge -n | ssh node01 unmunge  #验证compute node,远程解码(这一步验证不过,报错unmunge: Error: Invalid credential 重启对端munge服务即可

后记:配合slurm一起使用,修改/etc/slurm/slurm.conf:AuthType=auth/munge

b.Slurm安装

Slurm也分为三部分,slurmctld 完成管理节点的任务(故障切换、资源监控、队列管理、作业调度),slurmd完成计算节点的任务(启动任务、监控任务、分层通信),slurmdbd对于数据库管理应该也在控制节点,本次没有进行配置。

按照相应作用只在对应节点安装对应软件

b.1.安装软件

apt install slurm-wlm slurmctld  #控制节点执行
apt install slurm-wlm slurmd     #计算节点执行

如果是单节点,即控制节点就是计算节点,将以上软件在同一节点进行安装,slurm会自动创建用户名为slurm的账户,后续可以通过登录slurm用户启动服务,这里均使用root用户来操作。

b.2.配置文件

$ cd /usr/share/doc/slurmctld          #此为默认位置,如果不是,使用dpkg+grep查找
$ chmod +r slurm-wlm-configurator.html
$ python3 -m http.server               #前提安装python3
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

打开浏览器填入相应地址http://<your_ip>:8000, 点击进入 slurm-wlm-configurator.html 按照自己的需求填写设置,主要就是Control Machines,Compute Machines,也要注意Process Tracking,可能会遇到类似问题。填写完毕后,点击submit,将生成的内容拷贝进 /etc/slurm/slurm.conf 

b.3.创建服务并启动

$ sudo mkdir /var/spool/slurmd
$ sudo mkdir /var/spool/slurmctld
$ sudo systemctl start slurmd # 启动 slurmd, 日志文件路径为 `/var/log/slurmd.log`
$ sudo systemctl start slurmctld # 启动 slurmctld, 日志文件路径为 `/var/log/slurmctld.log`

启动后无法正常使用 slurm 的话,先查看slurmd和slurmctld的状态,打开日志查看报错。

$ sudo systemctl status slurmd # 查看 slurmd 的状态
$ sudo systemctl status slurmctld # 查看 slurmctld 的状态

这里需要注意slurm.conf后三行,也可以用

slurm -C

不建议手动修改其中SlurmUser=root

给个脚本模板

#!/bin/bash
#SBATCH --job-name=test
#SBATCH -N 2
#SBATCH --ntasks-per-node=2
#SBATCH --output=%j.out
#SBATCH --error=%j.err#srun --mpi=pmi2 ./cpmd.x ntroma01_wft.inp /home/vbox_share/pseudo-extlib > ntroma01_wft.out
#mpirun -n $SLURM_NTASKS ./cpmd.x ntroma01_wft.inp /home/vbox_share/pseudo-extlib > ntroma01_wft.out
mpirun ./cpmd.x ntroma01_wft.inp /home/norootuser/CPMD-v4.3/pseudo-extlib > ntroma01_wft.out

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS class类对象基础使用

按我们之前的写法 就是 Entry Component struct Dom {p:Object {name: "小猫猫",age: 21,gf: {name: "小小猫猫",age: 18,}}build() {Row() {Column() {// ts-ignoreText(this.p.gf.name)}.width(100%)}.height(100%)} }直接用 Object 一层一层往里套 这…

C++进阶(十三)异常

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C语言传统的处理错误的方式二、C异常概念三、异常的使用1、异常的抛出和捕获2、异常的重新…

java之spring AOP

AOP 面向切面编程&#xff0c; 切入点&#xff0c;就是你写的函数&#xff0c;装饰器&#xff0c;装饰到那些函数上 在哪里生效 引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifact…

网络学习:数据链路层VLAN原理和配置

一、简介&#xff1a; VLAN又称为虚拟局域网&#xff0c;它是用来将使用路由器的网络分割成多个虚拟局域网&#xff0c;起到隔离广播域的作用&#xff0c;一个VLAN通常对应一个IP网段&#xff0c;不同VLAN通常规划到不同IP网段。划分VLAN可以提高网络的通讯质量和安全性。 二、…

MySQL进阶查询篇(5)-事务的隔离级别与应用

数据库事务(Transaction)是指作为一个单元执行的一系列操作&#xff0c;要么全部成功完成&#xff0c;要么全部失败回滚。数据库事务具有四个特性&#xff0c;即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。本文将重点介绍MySQL数据库中的…

2024年华为OD机试真题-螺旋数字矩阵-Java-OD统一考试(C卷)

题目描述: 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m(0 < n ≤ 999,0 < m ≤ 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成一个m行矩阵。 小明对这个矩阵有些要求: 1.每行数字的…

跟着小德学C++之TCP基础

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

红队打靶练习:GLASGOW SMILE: 1.1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、gobuster 2、dirsearch WEB web信息收集 /how_to.txt /joomla CMS利用 1、爆破后台 2、登录 3、反弹shell 提权 系统信息收集 rob用户登录 abner用户 penguin用户 get root flag 信息收集…

flutter 国内源

Flutter 在中国由于网络原因&#xff0c;从官方默认的国外源下载Dart包和Flutter SDK可能会比较慢或者不稳定。为了加速依赖包的获取与Flutter SDK的安装&#xff0c;可以使用国内镜像源。以下是一些国内常用的Flutter和Dart包镜像源&#xff1a; 清华大学开源软件镜像站 Flu…

计算机网络(第六版)复习提纲29

第六章&#xff1a;应用层 SS6.1 域名系统DNS 1 DNS被设计为一个联机分布式数据库系统&#xff0c;并采用客户服务器方式&#xff08;C/S&#xff09; 2 域名的体系结构 3 域名服务器及其体系结构 A 域名服务器的分类 1 根域名服务器 2 顶级域名服务器&#xff08;TLD服务器&a…

Gitlab和Jenkins集成 实现CI (一)

版本声明 部署时通过docker拉取的最新版本 gitlab: 16.8 jenkins: 2.426.3 安装环境 可参考这篇文章 停止防火墙 由于在内网&#xff0c;这里防火墙彻底关掉&#xff0c;如果再外网或者云上的悠着点 systemctl stop firewalled systemctl disable firewalledsystemctl sto…

K8S之运用亲和性设置Pod的调度约束

亲和性 Node节点亲和性硬亲和实践软亲和性实践 Pod节点亲和性和反亲和性pod亲和性硬亲和实践 pod反亲和性 Pod 的yaml文件里 spec 字段中包含一个 affinity 字段&#xff0c;使用一组亲和性调度规则&#xff0c;指定pod的调度约束。 kubectl explain pods.spec.affinity 配置…

【代码】Processing笔触手写板笔刷代码合集

代码来源于openprocessing&#xff0c;考虑到国内不是很好访问&#xff0c;我把我找到的比较好的搬运过来&#xff01; 合集 参考&#xff1a;https://openprocessing.org/sketch/793375 https://github.com/SourceOf0-HTML/processing-p5.js/tree/master 这个可以体验6种笔触…

ubuntu22.04安装部署03: 设置root密码

一、前言 ubuntu22.04 安装完成以后&#xff0c;默认root用户是没有设置密码的&#xff0c;需要手动设置。具体的设置过程如下文内容所示&#xff1a; 相关文件&#xff1a; 《ubuntu22.04装部署01&#xff1a;禁用内核更新》 《ubuntu22.04装部署02&#xff1a;禁用显卡更…

简单聊聊go语言中引用模块的版本控制以及invalid: should be v0 or v1, not v2问题的解决

文章目录 前言具体示例手动升级依赖库should be v0 or v1, not v2总结 前言 如果你接触go语言比较早&#xff0c;一定有过当年所有go源码全部放入 GOPATH 下的混乱经历&#xff0c;不过发展到今天&#xff0c;go的包管理使用 go.mod 和 go.work 已经能得心应手&#xff0c;满足…

macos安装local模式spark

文章目录 配置说明安装hadoop安装Spark测试安装成功 配置说明 Scala - 3.18 Spark - 3.5.0 Hadoop - 3.3.6 安装hadoop 从这里下载相应版本的hadoop下载后解压&#xff0c;配置系统环境变量 > sudo vim /etc/profile添加以下两行 export HADOOP_HOME/Users/collinsliu/…

Unity类银河恶魔城学习记录4-4 4-5 P57-58 On Hit Impactp- Attack‘direction fix源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic;…

排序算法---快速排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 快速排序是一种常用的排序算法&#xff0c;采用分治的策略来进行排序。它的基本思想是选取一个元素作为基准&#xff08;通常是数组中的第一个元素&#xff09;&#xff0c;然后将数组分割成两部分&#xff0c;其中一部分的…

苹果mac电脑如何优化系统?保持不卡顿呢

再强悍的性能和优秀的操作系统&#xff0c;但长时间使用后&#xff0c;有时也会出现卡顿的情况。为了让你的苹果电脑保持高效运行&#xff0c;我们将深入探讨导致电脑卡顿的原因&#xff0c;并提供苹果电脑如何优化系统的解决方案&#xff0c;帮助你优化系统。 过多的启动项 …

【ChatGPT】如果说数据结构统治着整个计算机程序的世界,那么算法就可以被看作是程序员的全部装备。一般的来看的话,计算机本质就是信息的存储和处理的技术。

文章目录 第一章:算法和数据结构的概述第二章:数据结构数组链表栈队列树图第三章:算法排序算法搜索算法图算法第四章:算法和数据结构的应用数据库网络人工智能第五章:总结第