15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 通过虚拟机搭建集群

通过虚拟机搭建集群

时间:2023-06-28 21:39:01 | 来源:网站运营

时间:2023-06-28 21:39:01 来源:网站运营

通过虚拟机搭建集群:

虚拟机与系统安装

虚拟机采用 Oracle VM VirtualBox,系统采用 CentOS-7-x86_64-DVD-1810.iso 镜像文件。 安装 CentOS 系统前,首先在虚拟机中新建虚拟电脑和系统名称,以计算节点cu03为例,新建虚拟电脑名为cu03,配置选项如图所示。

随后启动虚拟机,安装操作系统。在安装时需要指定系统镜像的位置,如图所示。

系统安装与配置

系统安装

启动后进入系统安装界面,选择系统安装。

在系统自检完成后进入安装系统配置界面,在此界面中进入 Software Selection 选项,选择最后一个选项进行安装,如图所示。

除此之外,还需要指定安装位置,将对应安装硬盘进行刷新。

点击下一步,即可进入安装过程,此时可以同时对root和user账户密码进行配置。

安装完毕后,重新启动系统,即可进入虚拟系统中进一步配置,包括关闭防火墙,修改IP地址,修改节点名,配置yum源等。

关闭防火墙

进入系统后,修改 /etc/selinux/config 文件,将变量修改为 SELINUX=disabled。 随后调用 systemctl 命令,关闭防火墙

systemctl stop firewalld

IP 地址修改

使用 root 账户进入 /etc/sysconfig/network-scripts 目录下对网络配置文件进行修改。如下图显示了目录下所有配置文件和脚本,普通以太网配置文件名为 ifcfg-enp0s3,IB网络配置文件名为 ifcfg-ib0。

修改目录内 ifcfg-enp0s3 文件,包括

ONBOOT=yes #系统启动时是否自动加载 BOOTPROTO=static #启用地址协议 --static:静态协议 --bootp协议 --dhcp协议 IPADDR=10.59.0.4 #网卡IP地址 NETMASK=255.255.255.0 #网卡网络地址 GATEWAY=10.59.0.254 #网卡网关地址注意虚拟系统的 IP 地址设置为 10.59.0.1 ,这个地址与其他节点地址不能重复,并且网关地址需要与其他节点相同。

在修改网络配置文件前可能需要用ifup和ifdown来开启或关闭网络配置文件。以上图为例,当对ifcfg-enp0s3文件进行修改后,运行如下命令重启对应文件内网络设置参数。

$ ifdown enp0s3 Device 'enp0s3' sucessfully disconnected. $ ifup enp0s3 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

节点名修改

在 /etc/hosts 文件内添加节点名称,包括

# /etc/hosts 10.59.0.1 mu01 10.59.0.2 cu01 10.59.0.3 cu02 10.59.0.4 cu03更新 hosts 文件后,使用ifdown和ifup命令重启网络服务,随后输入 hostname 检查节点名,查看节点名修改是否正确。

为了使虚拟机之间能够互相通信,需要将虚拟机的网络设置改为内部网络,如图所示。 但是这种情况会使虚拟系统无法连接外网,为保证正常访问,可以关闭虚拟系统后,在网络选项卡内勾选多个网卡,使用其他网卡连接外网即可。

yum 源设置

yum 源可以分为本地yum源,局域网yum和外网yum等。 在集群中,一般仅在管理节点配置本地yum源,随后在其他节点上使用基于httpd服务的局域网yum源。

首先介绍管理节点本地yum源配置。通过VirtualBox的设备选项按钮将系统镜像加载到虚拟系统内,如图所示

使用df查询镜像挂载点

可以看出其挂载点为/dev/sr0,路径为/run/media/li12242/CentOS/ 7/ x86_64/。 由于路径包含空格,因此无法直接使用此路径。 新建目录 /rhel7.3/,并使用mount命令将镜像挂载在此位置。

& mount /dev/sr0 /rhel7.3在yum源配置目录 /etc/yum.repos.d/ 下新建新的配置文件 rhel7.3.repo,其内容为

[rhel7.3] name=rhel7.3 baseurl=file:///rhel7.3/ gpgcheck=0输入命令清空本地 yum 源,并列出可用 yum 仓库,看到 rhel7.3 即完成了本地 yum 配置。

$ yum clean all $ yum repolist对于其他节点,则需要配置局域网yum源,来直接使用mu01上加载yum源。 在mu01节点上安装并启动httpd服务

$ yum insall httpd $ systemctl start httpd启动httpd服务默认目录是 /var/www/html,因此在此目录下也新建文件夹 YUM,并使用mount命令将镜像也挂载在此目录下

$ mkdir /var/www/html/YUM $ mount /dev/sr0 /var/www/html/YUM在计算节点cu03中,修改对应的yum源配置文件 rhel7.3.repo 文件为

[rhel7.3] name=rhel7.3 baseurl=http://10.59.0.1/YUM gpgcheck=0其中 10.59.0.1 为 mu01 管理节点 IP 地址。

NFS 服务

NFS 即为网络文件系统 (Network File System),NFS服务允许网络之间计算机可以读写本地文件。首先使用如下命令,在管理节点 mu01 上安装并启动 NFS 服务

$ yum install nfs-utils $ systemctl restart nfs.service随后编辑配置文件 /etc/exports/,内容包括共享目录以及权限等,配置内容包括

/home *(rw,insecure,async,no_root_squash) /opt *(rw,insecure,async,no_root_squash)启动后即可在计算节点上挂载对应目录,命令为

$ mount -t nfs mu01:/home /home $ mount -t nfs mu01:/opt /opt

NIS 服务

NIS 服务是局域网中账号管理装置,可以将用户账号保存在管理节点上,登录其他节点不必再新建账号。 NIS 服务通过将账户制作成数据库,当账户存在变动或存在新用户时,需更新数据库。 NIS 服务在管理节点和客户端配置不同,首先介绍管理节点配置方法。

在管理节点上,安装 yumserv 软件,并修改 /etc/sysconfig/network 文件,添加域名 NISDOMAIN=TS10K。 随后启动主服务其并对NIS映射表进行初始化

$ /usr/lib64/yp/ypinit -m ​ ...... gmake[1]: Leaving directory `/var/yp/master.example.com' ​ master has been set up as a NIS master server. ​ Now you can run ypinit -s master on all slave server.输入完成后启动 ypserv 和 yppasswdd 服务

$ systemctl start ypserv $ systemctl start yppasswdd随后在客户端,在 /etc/yp.conf 文件中添加如下命令

$ echo "domain TS10K server mu01" >> /etc/yp.conf最终使用 systemctl 命令启动 ypbind 服务即可。

ssh 免密登录

在主节点处首先使用 ssh-keygen 命令生成私钥与公钥文件

$ ssh-keygen -t rsa使用 ssh-copy-id 将生成的公钥上传至计算节点

$ ssh-copy-id cu01输入账号密码,下次登录cu01节点时即可实现无密码访问。

MPI 跨节点测试

在配置好上述全部内容后,我们可以对MPI程序进行编译,并测试多进程程序在建立好的多节点集群运行情况。

为简单起见,使用系统自带的 openmpi 编译 MPI 程序,安装 openmpi 指令为

$ yum install gcc gcc-c++ gcc-gfortran openmpi-devel安装好后,还需要安装 enviroment-modules 软件,以便于加载 openmpi 模块

$ yum install openmpi-x86_64 $ source /etc/profile.d/modules.sh # 加载 module 环境 $ module load mpi/openmpi-x86_64 # 加载 openmpi 模块此时输入 which mpicc 等即可查看 openmpi 编译器路径。

编写 MPI 测试文件,参考 openMPI多节点无法执行的问题,将其 MPI 测试函数修改为

$ cat hello_mpi.c #include <stdio.h> #include <mpi.h> int main(int argc, char *argv[]) { int myrank, nprocs; char name[10]; int name_len; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Get_processor_name(name, &name_len); printf("core[%3d] of [%3d] in {%s} says hello./n", myrank, nprocs, name); MPI_Finalize(); return 0; }使用 mpicc 编译器对其进行编译,并增加 housts 文件指定 MPI 程序运行时节点和进程数

$ mpicc hello_mpi.c -o main $ cat hosts mu01 slots=1 cu01 slots=1使用两个进程运行编译好的程序进行测试,得到如下结果说明测试成功

$ mpirun -n 2 -machinefile hosts ./main core [ 0] of [ 2] in {mu01} says hello. core [ 1] of [ 2] in {mu01} says hello.



关键词:虚拟,通过

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭