虚拟化集群系统
在虚拟化技术得到广泛使用后,人们为了实现计算机(服务器)资源的充分利用和切分,将一台计算机(服务器)利用虚拟化技术分割为多台独立的虚拟机使用,并通过管理软件实现虚拟资源的分配和管理,从而显著提高计算机的工作效率。
虚拟机与Docker
虚拟机是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在windows系统里运行Linux系统。
但是由于虚拟机,资源占用多、冗余步骤多、启动慢,这些缺点,Linux发展出了另一种虚拟化技术,Linux容器。
Linux容器,不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆包一整套操作系统,只需要软件工程所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一的工作。
因此,对于大规模的数据运算,我们可以基于docker容器虚拟化技术,构建多个容器,采用MPI多节点并行计算,从而充分利用计算机软硬件计算资源,实现高效计算。
在VMware安装虚拟机Centos 7,网络可设置为桥接模式,可参照我的博客中3.1.3进行配置网络。
#sudo yum remove docker docker-engine docker.io
#sudo yum update
#yum install -y docker
#yum list installed | grep docker
#systemctl start docker
#systemctl status docker
#docker version
#docker run hello-world
第一阶段,完成了docker的安装部署
#docker pull centos:7
#docker images
docker images可查看image id
#docker run -it ${image id} /bin/bash
#docker exec -it ${container id} /bin/bash
container id为之前新建的容器id,可通过docker ps -a进行查看
#yum install -y openssh-clients openssh-server nano net-tools gcc gcc-c++ sudo passwd make nfs-utils
#mkdir mpi
#查看该目录是否创建成功
#ls
https://www.mpich.org/static/downloads/3.3.1/
#docker cp ./下载/mpich-3.3.1.tar.gz ${container id}:/mpi
移动成功则会有mpich-3.3.1.tar.gz压缩包文件
#mkdir /mpi/mpich
#tar -xzvf mpich-3.3.1.tar.gz -C /mpi/mpich
#cd /mpi/mpich/mpich-3.3.1
#./configure --disable-fortran --prefix=/mpi/mpich
#make
#make install
编辑用户的.bashrc文件添加两行:
PATH=$PATH:/root/mpi/mpich/bin
export PATH
#cd bin
#vi ~/.bashrc
#cat ~/.bashrc
#source ~/.bashrc
source执行生效后使用mpirun执行cpi检测是否成功
#mpirun -n 6 /mpi/mpich/mpich-3.3.1/examples/cpi
1.给root用户设置密码
#passwd
2.依次执行
# mkdir -p /var/run/sshd
# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
#一直Enter即可
3.直接使用vi编辑
将UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no
#vi /etc/ssh/sshd_config
使用sed命令把UsePAM yes 改为 UsePAM no
#sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
#sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
4.启动ssh命令
#/usr/sbin/sshd -D &
#输入这个命令无反应,可继续在上述执行文本中黏贴“检测是否成功的代码后”Enter即可
5.检测是否成功:
#netstat -apn | grep ssh
6.提交配置好的centos7容器为镜像
#docker commit ${container id} ${image_name}
docker commit ${container id} centos7_mpi,只需要更换中间容器id
1.在docker宿主机,创建多节点连接的子网
注意:这里的ip是docker内部网络,所以不用更改,直接执行
#docker network create --subnet=192.168.10.0/16 network_mpi
#docker network ls
2.以之前制作的镜像启动容器node1
#docker run -it --name node1 -h node1 --net network_mpi --ip 192.168.10.11 --add-host node2:192.168.10.12 ${cento7_mpi image id} /bin/bash
3.在新的窗口启动容器node2
注意在这里需要用管理员权限 su 输入密码后在执行以下命令
#docker run -it --name node2 -h node2 --net network_mpi --ip 192.168.10.12 --add-host node1:192.168.10.11 ${cento7_mpi image id} /bin/bash
4.配置两个容器的ssh免密登录:
首先两个容器启动ssh,注意node1与node2都要执行
#/usr/sbin/sshd -D &
#直接Enter即可
其次依次在node1和node2上配置免密ssh登录对方
#ssh node1/node2
最后,在每个节点下执行如下操作
#cd ~/.ssh
#ls
#显示出known_hosts后,继续执行
#ssh-keygen -t rsa
#一直Enter,再次ls,会出现三个文件
最后,分别在两个节点执行如下命令,设置结点间的免密登录
#ssh-copy-id -i ./id_rsa.pub root@node2
#ssh-copy-id -i ./id_rsa.pub root@node1
5.最后编辑servers文件,使用mpirun执行多节点测试。
首先,进入mpich目录,编辑servers文件,使用mpirun执行多节点测试。
vi servers
#在该文件输入如下信息:
node1:3
node2:3
#mpirun -n 6 -f ./servers ./mpich-3.3.1/examples/cpi
至此,已完成Centos 7+Docker+MPI+NFS基础环境的搭建,利用docker容器虚拟化,实现了单机多节点运行MPI程序,实现并行化计算,极大地提升了并行计算的效率。
记得点个赞噢!!!