课题需要研究分布式计算,为此我学习在 Linux 集群上运行 MPI 程序。为了先熟悉一下过程,我在 VirtualBox 搭建的 4 台 CentOS 7 虚拟机上构建了一个集群。
这里涉及的知识有:
- 虚拟机静态 ip 分配和网络互联的设置
- SSH 免密登陆
- NFS 文件共享系统
- MPICH 的安装,和在集群上运行
文章目录
1 虚拟机分区
master 采用 40 GB 的空间,按如下分配:
- BIOS Boot:2MB
- /boot:1GB
- /:10 GB
- /var:5 GB
- /tmp:3 GB
- Swap:2 GB ( 因为我每部 Linux 虚拟机上面都有 1GB 的内存 )
- /mpi_cloud:19 GB(仅仅 master 虚拟机有这个分区)
2 虚拟机网络设置
首先要设置宿主机和虚拟机的静态 ip,并且要实现 3 个方向能够 ping
成功:
1 宿主机 ping
虚拟机
2 虚拟机1 ping
虚拟机 2
3 虚拟机 ping
因特网
VirtualBox 的网络设置的特点(来自 VirtualBox 的帮助文档):
根据我们要实现的目标我们可以使用 Bridged 方式设置一张网卡,或者使用 Host-only 和 NAT 方式设置两张网卡。
这里我采用第二种。
设置静态 ip
主机名和静态 ip:
- 宿主机:192.168.0.1
- master.cluster:192.168.0.2
- node1.cluster:192.168.0.3
- node2.cluster:192.168.0.4
- node3.cluster:192.168.0.5
① 宿主机
为了设置静态 ip,操作 VirtualBox 管理器:管理 -> 主机网络管理器
默认的 Adapter 不知道为什么无法修改成自动配置网卡,因此我就创建了一个新的 Adapter #2,不启用 DHCP 服务器,设置手动配置网卡,IPv4 地址和掩码使用了默认值。设置完成之后,在 Window 中打开 cmd:
C:\WINDOWS\system32>ipconfig
...
以太网适配器 VirtualBox Host-Only Network #2:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::70dc:fbfc:8eb2:d37d%62
IPv4 地址 . . . . . . . . . . . . : 192.168.1.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
设置成功,宿主机的静态 ip 为 192.168.1.1。
② 虚拟机
点击虚拟机:设置 -> 网络
添加网卡 1 为 Host-Only,采用刚刚添加的 Adapter #2。
打开虚拟机后,设置虚拟机的网络属性:
[root@p1 mindle]# nmcli connection show
NAME UUID TYPE DEVICE
enp0s3 86605a09-7b00-44a0-9107-573c20084c7b ethernet enp0s3
[root@p1 mindle]# nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 192.168.1.2/24
[root@p1 mindle]# nmcli connection up enp0s3
通过 nmcli 命令发现网卡的名称为 enp03,进一步修改了网卡的静态地址为 192.168.1.2。
到这里,宿主机就可以用 ping 上虚拟机,虚拟机之间也可以 ping 通。下一步解决虚拟机连上互联网。
NAT
这一步很简单,再增加一张 NAT 的网卡就可以了,虚拟机也不需要设置。
这下虚拟机就可以访问互联网了。
3 SSH 免密连接
关于 SSH 的设置建议参考鸟哥的官网,写得非常详细,图文并茂,不习惯繁体字的朋友可以使用谷歌翻译插件将页面翻译成中文简体。
为方便登陆时知道在哪一个主机上,我修改了主机的 hostname
[mindle@localhost ~]$ hostname node1.cluster
[mindle@localhost ~]$ sudo /etc/hostname
node1.cluster
这样登陆成