docker搭建linux集群,搭建mpi环境,并使用MTT benchmark测试集群性能
最近在研究docker,早些时候老板让做了一个open mpi的image,并在单机环境下,成功使用docker搭建了一个openmpi的集群,可以跑一些hello world的例子,后来,在ubuntu环境下,使用openvswitch搭建了一个多host的集群,在coreos环境下,使用etcd键值对服务和搭建了一个集群,并分别通过tunnel的方式,和flannel的方式,修改docker -d的参数,使得,在不同的host主机上,可以运行在同一个子网内的container,并且相互之间可以通信。(好像我还没有来得及记录下来怎么做的)。前几天老板说,你成功搭建了,跑hello world的例子也成功了,但是你这个性能怎么样,多host情况下,你是通过tunnel桥,或者flannel实现的,那么你这样的性能和单host肯定是不一样的,性能差多少呢?你要找个benchmark来检验一下,所以,我就找了个openmpi的mtt来测试一下,这里做个记录。
我们先来说说mtt是个什么东西,mtt是一个检验mpi环境的,不只是openmpi,包括别的版本的mpi也是可以的。第一,mtt会检验你是否正确安装了mpi,甚至mtt可以帮助你安装mpi。第二,mtt会检验你写的代码是否可以通过安装的mpi成功编译。第三,mtt会检验你写的程序是否可以正确在集群环境中运行,并返回集群中云心的结果,包括是否成功啊,花费的时间等。第三个特点,也正是我们需要的功能。
首先要明确的一个观点就是,肯定要搭建一个nfs,或者说,也可以使用别的方法,比如开个docker container作为data container,然后通过这种方式同步也可以,如果单节点当然可以,但是在多节点的时候就不可以了,因为data container不能跨节点共享数据。我们为什么要在不同节点之间共享数据呢?想象一下,我们在运行mtt的时候,他会运行我们的测试程序,那么这个测试程序,理论上只有在我们运行mtt的host才会有,那么怎么让那些slave节点也去运行这个程序呢?mtt并不帮助我们把测试程序传到slave节点上去,需要我们自己拷贝,或者通过别的简单方式,别如我们刚刚说的通过data container的方式,或者nfs。由于我们需要在不同的host节点上创建slave,所以我们这里肯定要搭建nfs服务。否则在运行mtt的时候,会报cannot find execute path file之类的错误。
搭建nfs服务
首先,在主host上安装nfs服务。
sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
注意一定要安装nfs-common服务,有的文章指出不需要安装,因为在安装nfs-kernel-server的时候,会自动安装nfs-common和nfs-portmap,我尝试后发现,portmap是自动安装了,但是,并没有安装nfs-common,会报
mount wrong nfs type, bad option, bad superblock on XXX
的错误。
然后,配置nfs共享目录。假如我们需要共享的目录是/home/monkey/nfs文件夹下的所有文档,那么我们就需要配置/etc/exports文件,在最后一行,加上这么一句。
"/home/monkey/nfs" *(rw,sync,no_subtree_check)
至于这句话什么意思,前面的路径肯定就是我们要共享的nfs文件,后面的的意思是,所有ip段的机器都可以共享这个路径,如果你要指定某个机器,可以直接把替换成那台机器的ip,比如114.212.87.52,或者你要指定某个子网段的机器,可以这样写,114.212.0.0/24,这种东西查查nfs配置就知道了,我们这里不作为重点。后面的rw是读写权限,ro是read only,sync是同步等,自己查查文档。
配置好后,重启服务,
sudo /etc/init.d/portmap resatrt
就可以了。我们可以输入
sudo /etc/init.d/nfs-kernel-server restartshowmount -e
来进行查看。
ok,这样nfs就配置完成了。docker配置多节点mpi cluster
这一步就比较简单了,因为我们之前已经做好了open mpi的image,在docker hub上也有,如果有同学不想自己做的话,可以自己去下载,名字是hmonkey/openmpi14.04:v3。启动的时候,一定要注意给container超级权限。否则会出现挂载nfs共享文件夹的时候报错的问题。
cannot mount on ip readonly
类似于这样的错误。
sudo docker run -ti --name master --privileged=true hmonkey/openmpi14.04:v3 /bin/bash
sudo docker run -ti --slave1 --privileged=true hmonkey/openmpi14.04:v3 /bin/bash
sudo docker run -ti --slave2 --privileged=true hmonkey/openmpi14.04:v3 /bin/bash
这样就起来了三个节点,其中我们把其中的一个座位master,另外的两个座位slave。起来之后,要做两件事,第一,我忘记在image里面自动启动ssh服务,所以,起来之后,要首先把ssh服务启动起来,分别运行sudo service ssh start
其次,要在master里面把slave的ip加到host列表里面去,这样才可以方便的访问。在master上vim /etc/hosts
,把slave1和slave2的地址加上去。
这样,就配置好集群环境了。由于我们这里已经设置好ssh进去的时候不需要输入密码,这一步就可以省略了。关于如何配置不需要密码就可以直接ssh进去,请查看我别的blog。
cd /
sudo mkdir nfs
sudo mount ip:/home/monkey/nfs /nfs
这样就可以了,这样就把宿主机的nfs文件夹,和当前container的nfs文件夹同步起来了,在三个container上都要这么做。下载mtt并运行
在master容器内,
cd /
git clone https://github.com/open-mpi/mtt
cd mtt/sample
cat developer.ini trivial.ini | ../client/mtt - hostlist=slave1,slave2 alreadyinstalled_dir=/usr --scratch=/nfs
最后一句命令比较难以理解。其中,developer.ini里面是检测你是否正确安装了mpi,trivial.ini是跑测试的程序的。../client/mtt是mtt的运行脚本,hostlist是要检验的集群中的机器,alreadyinstall_dir是你把mpi安装在哪里了,scratch是最重要的,是要写配置的nfs共享目录在container里的位置。
大功告成。
最后提醒一句,mtt的代码已经迁移到github上了,如果你使用svn checkout https://svn.open-mpi.org/svn/mtt/branches/ompi-core-testers这样的命令去下载mtt,那么他会一直让你输入username 和 passwd。
docker搭建linux集群,搭建mpi环境,并使用MTT benchmark测试集群性能相关推荐
- 为什么引入验证集来评估机器学习模型?只用训练集和测试集可以吗?
评估模型的重点是将数据划分为三个集合:训练集.验证集和测试集.在训练数据上训练模型,在验证数据上评估模型.一旦找到了最佳参数,就在测试数据上最后测试一次.你可能会问,为什么不是两个集合:一个训练集和一 ...
- 【转载】15分钟搭建Linux操作系统+Oracle数据库的环境
2019独角兽企业重金招聘Python工程师标准>>> 一直想学习下Linux下Oracle数据库方面的运维,但从头安装Linux操作系统,再装Oracle数据库的过程确实非常繁琐, ...
- linux firefox xvfb,持续集成:采用Xvfb+Selenium+Firefox搭建linux服务器下的自动化测试环境...
自动化测试属于软件测试的一部分,QTP.LoadRunner等都可以编写自动化测试脚本,但是QTP.LoadRunner等工具毕竟还需要人工操作,在持续集成思想下,软件应该自动发布并且自动测试,这样可 ...
- 红帽linux lnmp搭建,Linux(redhat5.4)下lnmp环境的搭建
在前面我们已经实现了lamp架构的创建,今天就让我们来看一看lnmp架构是如何实现的.计划的实验步骤如下: 1. 数据库mysql的安装 2. Nginx的安装,libevent(编译库代码)的安装, ...
- Virtualbox+Vagrant搭建linux虚拟机并搭建easySwoole框架
首先是官网下载 VirtualBox Downloads – Oracle VM VirtualBox Vagrant Downloads | Vagrant by HashiCorp 一路next安 ...
- linux 6 服务搭建,Linux CentOS6.8搭建sftp服务
开始搭建sftp服务 第1歩,添加sftp用户并制定根目录: useradd -d /ygsoft/sftp -s /bin/bash sftpuser 第2歩,修改密码:执行passwd sft ...
- linux ftp web服务器搭建,Linux系统下搭建Web服务器和FTP服务器
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Apache2和php组件的安装 使用如下命令来安装Apache2和php的组件 Ps:如果只安装Apache2,将会导 ...
- Elasticsearch集群搭建、优化及实践
文章目录 一.Elasticsearch集群 1.Elasticsearch集群概念 2.Elasticsearch集群安装 3.安装Kibana 4.测试集群状态 二.Elasticsearch优化 ...
- 云服务器 Redis 集群搭建
云服务器 Redis 集群搭建 主从复制架构搭建 集群架构介绍 环境准备 安装 配置及启动 测试 Sentinel (哨兵)架构搭建 集群架构介绍 环境准备 Sentinel 配置 Sentinel ...
- 天池比赛 Docker 解决无法读取测试集,提交成功
Docker 提交 一 制作 Dockerfile 二 制作 run.sh 三 制作推送镜像 3.1 登录 build 3.2 进入容器中配置环境 3.3 本地测试 3.4 推送镜像 四 提交 五 改 ...
最新文章
- 微信小程序无法获取UnionId的情况及处理
- java基础1--继承
- 记sentinel里防止多并发下读取脏数据的操作
- elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解
- mysql终端_MySQL之终端(Terminal)管理MySQL
- 采用Angular勾画SVG圆环形进度条
- 01.C(Linux命令)
- dos怎么退出debug_电脑主板坏了怎么办?浅谈主板常见的故障以及应对办法
- python利器能下载库吗_python利器
- java sun包无法引用_关于java包的问题,自己创建一个包,里面放了源文件,却包外无法引用:具体见问题补充...
- linux 开启ahci_AHCI (简体中文)
- vfp python_2018年VisualFoxPro
- 对打字练的小键人的网站91xjr.com站资源打包,gulp独立分文件夹打包
- Scala中名词的解释
- 如何零基础创建自己的微信小程序
- java上课听不懂怎么办_上课听不懂怎么办?我们告诉你解决办法!
- ams1117-3.3v三端稳压芯片低压差线性稳压器
- 【STM32】 电解电容
- 隐私保护的数据挖掘综述
- Android6.0 源码修改之Settings音量调节界面增加通话音量调节