计算化学公社
标题:
记录一个集群的搭建过程
[打印本页]
作者Author:
Accelerator
时间:
2021-4-26 17:13
标题:
记录一个集群的搭建过程
本帖最后由 Accelerator 于 2021-4-26 21:19 编辑
最近采购了20台E5-2683v3机器,搭建集群,以下为过程记录。初次搭集群,多有折腾,或许能给后来者带来一定帮助。这个过程中参考了坛友coolrainbow的pdf版集群搭建指南,基本思路一致,不过由于年代久远,书中一些命令已经不能在当前流行的软件版本上使用了。
这个集群叫做sibyl(来自psychopass里由众多大脑构成的系统),各运算节点依次叫做sibyl1到20。每个机柜放10台机器,分2台机柜,sibyl1-10和11-20各自接到一台交换机上,通过uplink连到一台总的交换机并接外网。另外有一台控制节点叫做sibyl。每台机器只使用一个网卡接口。全部节点使用CentOS 7系统。
1. 将所有机器拆包装,搬运到机柜上,然后打扫卫生,扔掉垃圾。事实证明这是整个过程中最费力的一步,如有条件务必多叫些人来帮忙。各机器连接好电源线和网线,这里注意机柜里的PDU插座的允许功率可能非常小,需要多买几个大功率插排,合理规划如何走线。如果很多机器都接到PDU插座上,可能分分钟跳闸。
2. 由于CentOS默认不联网,每个节点要挨个接上显示器和键盘鼠标,手动联网,并且修改/etc/sysconfig/network-scripts/ifcfg-eno1使得开机能够自动联网,并且记录每个节点的ip。(注意点:IP分配,见后文)
最后得到这样一张hosts表,把XX适当修改后写到每个节点中去:
<blockquote>127.0.0.1 sibylXX localhost localhost.localdomain localhost4 localhost4.localdomain4
复制代码
这个过程并不需要挨个ssh到每个节点,只要在控制节点写好/etc/hosts,结合for循环很容易自动修改sibyl1-20的相应文件。
3. 在我的操作过程中,为了方便管理,首先安装了puppet,结果发现对于计算化学的常见应用场合,并不需要复杂的版本控制、集中运维等,使用puppet是杀鸡用牛刀,不如手写scp、ssh等用着舒适,因此略过。比如可以准备这样一个run.sh:
for i in {1..20}; do ssh sibyl$i $1; done
复制代码
想要给所有节点统一执行什么命令,就sh run.sh "XXX"就好了,运行时看着一条一条的输出也赏心悦目。
4. 无密码登录
在管理节点:
ssh-keygen
for i in {1..20}; do ssh-copy-id -i sibyl$i; done
复制代码
在这里要输入(复制粘贴)20次密码,是比较令人劳累的重复性劳动。
5. 配置NFS,让所有计算节点都能访问控制节点的/home, /opt, /usr/local. (不知道为什么之前发帖时这段命令缺了一大段,现更新)
systemctl stop firewalld.service; setenforce 0
复制代码
接下来进入客户端。可以先ssh sibyl1去试试,一旦搞明白之后就可以用for循环推广到全部节点。
showmount -e sibyl, 此时应当可以看到先前设置共享的三个目录。
这个时候mount sibyl:/home /home,就会使得这个节点的/home被sibyl的相应目录取代。如果想要开机自动挂载,原则上可以写/etc/fstab。但事实发现这样写会带来严重的问题,例如如果在/etc/fstab里加入如下内容:
sibyl:/home /home nfs defaults,noatime,_netdev,nofail 0 0
sibyl:/opt /opt nfs defaults,noatime,_netdev,nofail 0 0
复制代码
就会发现系统会概率性无法启动!有时是直接黑屏,有时是卡在内核输出一堆Succeeded的时候,有时是能进入桌面但要求初始化设置,并且ssh也连不上。网上还有说法是在rc.local中加入相应mount命令也能起到相似效果,结果表明这样做带来的问题比编辑/etc/fstab更加严重,写fstab无法启动还只是概率事件,而在rc.local中写任何与mount有关的命令都会导致100%无法正常启动。猜测是由于网络设备与系统加载存在时间差,导致系统想要挂载时网络还没准备好所致。在这里花了很大力气,最终决定放弃自动挂载的尝试,/etc/fstab里什么也不写,计算节点如果有重启的,就手动去执行mount让它挂载就好了。
我在这里写了个remount.sh:
umount /dev/mapper/centos-home
mount /dev/mapper/centos-home /tmp
mount sibyl:/home /home
mount sibyl:/opt /opt
mount sibyl:/usr/local /usr/local
复制代码
将计算节点原有的/home改成/tmp(记得在控制节点sh run.sh "chmod -R 777 /tmp",否则无法读写),计算节点有重启时就run.sh执行remount.sh就好了,也不费事。
这样之后,每个节点都能共享/home, /opt, /usr/local.
注意点: IP分配
由于过去使用的设备连在交换机上后即使长期关机,重启后IP也不会变,一开始没有留意IP的问题,结果发现这次只要有机器重启,IP就变了,导致整个网络都乱成一锅粥。因此将每个节点都弄成静态IP:
vi /etc/sysconfig/network-scripts/ifcfg-eno1
# TYPE=Ethernet
# PROXY_METHOD=none
# BROWSER_ONLY=no
# BOOTPROTO=none
# IPADDR=
# ONBOOT=yes
# GATEWAY=
# DNS1=
# DNS2=
# PREFIX=24
复制代码
(只列出需要改动的)
根据实践,bootproto必须是none,不能是static。如果是static,虽然一时也能成功联网,但过几分钟后就会自动断开。网关和DNS必须设置(在设置静态IP之前让它自动联网获取,然后查出来填上去就行),否则也会在几分钟后自动断网。
网络的问题也极为折腾,一开始设置了NFS后重启机器,IP一变所有机器都不能正常挂载,全部无法进入系统也无法ssh连接,只能挨个接显示器重新配置,然后摸索怎么才能既保证静态IP又不会断网,从22点弄到4点才搞好。
设置静态IP之后,新接入的设备(包括笔记本、手机等)可能会与它们有冲突,因此需要登录路由器管理页面,在DHCP设置里把自动分配IP的范围改成不和它们冲突的。
6. 配置NIS共享用户
相比之下NIS的配置非常简单,这里照搬
https://blog.csdn.net/weixin_44097910/article/details/91863717
的操作。一点区别在于这篇网文里计算节点需要借助图形界面进行配置,这显然十分低效,因此在sibyl1里用图形界面配置好之后,不要再去配置其他节点,而将它的
/etc/nsswitch.conf,
/etc/sysconfig/authconfig,
/etc/pam.d/system-auth,
/etc/yp.conf通过for循环scp直接推送给所有计算节点就行了。
接下来每次增减用户,或者修改用户组等操作,都需要再执行一遍
/usr/lib64/yp/ypinit -m。
7. 安装队列系统
这里照搬
http://bbs.keinsci.com/thread-20943-1-1.html
的操作(当然前两步已经早就做好了)。在执行./torque.setup root一步时可能会报错称找不到hostname,此时执行./torque.setup root sibyl即可解决。接下来安装计算软件等都十分容易,不再赘述。
作者Author:
abin
时间:
2021-4-26 19:37
粘贴密码那里,
可以使用
sshpass
看一下就晓得如何使用。
IP设定方面,一定需要使用静态的, 否则死的很惨。
使用nmtui设定一下就可了。
或者采用启动后自动执行的方式,使用ifconfig设定。 当然,这仅是我采用的方案,我认为很可靠。
可以for循环一下,给每一个节点写一份到/etc/rc.local。
我还是建议,
master 和所有slave 通过一个交换机,建立一个局域网;
master另一个网卡,单独访问互联网。
不建议所有的slave都可以访问互联网。
如果slave需要互联网, 可以在master运行NAT网关就可以。
NAT设定可以参考
https://gitee.com/hpc4you/linux
仅供参考。
作者Author:
Accelerator
时间:
2021-4-27 10:03
不知道为什么NFS那里的命令只显示了systemctl stop firewalld.service; setenforce 0这一句,剩下的编辑了很多次还是显示不出来。这部分命令比较标准,网上有很多教程,大致就是在关闭防火墙后在所有节点安装nfs-utils和rpcbind,依次启动服务,再在管理节点编辑/etc/exports设置共享的目录。
作者Author:
abin
时间:
2021-5-9 14:14
Slurm调度并行计算搭建实录
https://b23.tv/jIF9Kh
虚拟机演示。
真实情形中,需要交换机,还有给每台机器安装系统。
机器启动之后,后续的配置流程都是一样的。
仅供参考。
视频中部分yum install有加速, 部分文字解说打字环节有删减。
我打字慢,还老打错,这种写错字的部分,基本都剪掉了。
大概有60分钟。
实际调试下来,时间更长,
所以不要问我,能否免费调试集群。
作者Author:
xiaofeng_hpc
时间:
2021-11-26 02:11
批量设置ssh无密码访问可以用expect实现。首先安装expect:
yum install expect -y
复制代码
然后保存下边这个脚本:
#!/usr/bin/expect
set hostname [lindex $argv 0]
spawn ssh-copy-id $hostname
expect {
#first connect, no public key in ~/.ssh/known_hosts
"Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
expect "password:"
send "YOUR_PASSWORD\r"
}
#already has public key in ~/.ssh/known_hosts
"password:" {
send "YOUR_PASSWORD\r"
}
"Now try logging into the machine" {
#it has authorized, do nothing!
}
}
expect eof
复制代码
把上边的脚本保存为“ssh-single.sh”文件。然后在每个节点都运行下边的脚本:
for i in localhost master node1 node2 node3 node4 ;
do
sh ssh-single.sh $i ;
done
复制代码
作者Author:
独孤天血
时间:
2021-12-23 17:28
这两段脚本是否可以整合到一个shell脚本内,如果这样可以可能更直观
作者Author:
zhouxj
时间:
2022-1-20 22:24
你好,问个小白问题,您这20台机器系统是一个个装的么?还是有什么自动安装方法?
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3