|
本帖最后由 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即可解决。接下来安装计算软件等都十分容易,不再赘述。
|
评分 Rate
-
查看全部评分 View all ratings
|