最近在研究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 restart
    就可以了。我们可以输入showmount -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测试集群性能相关推荐

  1. 为什么引入验证集来评估机器学习模型?只用训练集和测试集可以吗?

    评估模型的重点是将数据划分为三个集合:训练集.验证集和测试集.在训练数据上训练模型,在验证数据上评估模型.一旦找到了最佳参数,就在测试数据上最后测试一次.你可能会问,为什么不是两个集合:一个训练集和一 ...

  2. 【转载】15分钟搭建Linux操作系统+Oracle数据库的环境

    2019独角兽企业重金招聘Python工程师标准>>> 一直想学习下Linux下Oracle数据库方面的运维,但从头安装Linux操作系统,再装Oracle数据库的过程确实非常繁琐, ...

  3. linux firefox xvfb,持续集成:采用Xvfb+Selenium+Firefox搭建linux服务器下的自动化测试环境...

    自动化测试属于软件测试的一部分,QTP.LoadRunner等都可以编写自动化测试脚本,但是QTP.LoadRunner等工具毕竟还需要人工操作,在持续集成思想下,软件应该自动发布并且自动测试,这样可 ...

  4. 红帽linux lnmp搭建,Linux(redhat5.4)下lnmp环境的搭建

    在前面我们已经实现了lamp架构的创建,今天就让我们来看一看lnmp架构是如何实现的.计划的实验步骤如下: 1. 数据库mysql的安装 2. Nginx的安装,libevent(编译库代码)的安装, ...

  5. Virtualbox+Vagrant搭建linux虚拟机并搭建easySwoole框架

    首先是官网下载 VirtualBox Downloads – Oracle VM VirtualBox Vagrant Downloads | Vagrant by HashiCorp 一路next安 ...

  6. linux 6 服务搭建,Linux CentOS6.8搭建sftp服务

    开始搭建sftp服务 第1歩,添加sftp用户并制定根目录: useradd -d  /ygsoft/sftp  -s /bin/bash sftpuser 第2歩,修改密码:执行passwd sft ...

  7. linux ftp web服务器搭建,Linux系统下搭建Web服务器和FTP服务器

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Apache2和php组件的安装 使用如下命令来安装Apache2和php的组件 Ps:如果只安装Apache2,将会导 ...

  8. Elasticsearch集群搭建、优化及实践

    文章目录 一.Elasticsearch集群 1.Elasticsearch集群概念 2.Elasticsearch集群安装 3.安装Kibana 4.测试集群状态 二.Elasticsearch优化 ...

  9. 云服务器 Redis 集群搭建

    云服务器 Redis 集群搭建 主从复制架构搭建 集群架构介绍 环境准备 安装 配置及启动 测试 Sentinel (哨兵)架构搭建 集群架构介绍 环境准备 Sentinel 配置 Sentinel ...

  10. 天池比赛 Docker 解决无法读取测试集,提交成功

    Docker 提交 一 制作 Dockerfile 二 制作 run.sh 三 制作推送镜像 3.1 登录 build 3.2 进入容器中配置环境 3.3 本地测试 3.4 推送镜像 四 提交 五 改 ...

最新文章

  1. 微信小程序无法获取UnionId的情况及处理
  2. java基础1--继承
  3. 记sentinel里防止多并发下读取脏数据的操作
  4. elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解
  5. mysql终端_MySQL之终端(Terminal)管理MySQL
  6. 采用Angular勾画SVG圆环形进度条
  7. 01.C(Linux命令)
  8. dos怎么退出debug_电脑主板坏了怎么办?浅谈主板常见的故障以及应对办法
  9. python利器能下载库吗_python利器
  10. java sun包无法引用_关于java包的问题,自己创建一个包,里面放了源文件,却包外无法引用:具体见问题补充...
  11. linux 开启ahci_AHCI (简体中文)
  12. vfp python_2018年VisualFoxPro
  13. 对打字练的小键人的网站91xjr.com站资源打包,gulp独立分文件夹打包
  14. Scala中名词的解释
  15. 如何零基础创建自己的微信小程序
  16. java上课听不懂怎么办_上课听不懂怎么办?我们告诉你解决办法!
  17. ams1117-3.3v三端稳压芯片低压差线性稳压器
  18. 【STM32】 电解电容
  19. 隐私保护的数据挖掘综述
  20. Android6.0 源码修改之Settings音量调节界面增加通话音量调节

热门文章

  1. 热血江湖Java_热血江湖源码+教程
  2. Win7重装后修复Ubuntu引导项
  3. 一元函数拐点与驻点的区别
  4. 2019年网络工程师考试大纲
  5. 3D-06-打飞碟(物理运动)
  6. 第十二章 WebService框架CXF
  7. 浅析DDD领域驱动设计——一种很厉害的架构思想
  8. 华为odjava机试题_华为机试题及答案
  9. HCIA物联网初级考试-第二章物联网常用的通信技术
  10. 骑士人才linux伪静态,骑士CMS人才系统伪静态的设置方法