《云计算基础教程》实验指导书目录实验一 MPI的搭建及OpenMP的配置 (3)实验二集群系统的管理与任务 (9)实验三 PBS (17)实验四 MAUI (25)实验五 Ganglia (26)实验六 Nagios (32)实验七VMware虚拟机 (49)实验八VirtualBox的安装与配置 (62)实验九 Xen的安装与配置 (65)实验十KVM与QEMU (78)实验十一 GNBD环境下的冗余磁盘阵列 (87)实验十二 GFS的安装与配置 (90)实验十三 NFS的安装与配置 (94)实验十四LVM的安装与创建 (95)实验十五 LVM环境下的RAID镜像 (99)实验十六 VCL (103)实验十七 Proxmox的使用 (128)实验十八 OpenNebula (136)实验一MPI的搭建及OpenMP的配置1.MPI简介消息传递接口(Message Passing Interface,MPI)是目前应用较广泛的一种并行计算软件环境,是在集群系统上实现并行计算的软件接口。
为了统一互不兼容的的用户界面,1992年成立了MPI委员会,负责制定MPI的新标准,支持最佳的可移植平台。
MPI不是一门新的语言,确切地说它是一个C和Fortran的函数库,用户通过调用这些函数接口并采用并行编译器编译源代码就可以生成可并行运行的代码。
MPI的目标是要开发一个广泛用于编写消息传递程序的标准,要求用户界面实用、可移植,并且高效、灵活,能广泛应用于各类并行机,特别是分布式存储的计算机。
每个计算机厂商都在开发标准平台上做了大量的工作,出现了一批可移植的消息传递环境。
MPI吸收了它们的经验,同时从句法和语法方面确定核心库函数,使之能适用于更多的并行机。
MPI在标准化过程中吸收了许多代表参加,包括研制并行计算机的大多数厂商,以及来自大学、实验室与工业界的研究人员。
1992年开始正式标准化MPI,1994年发布了MPI的定义与实验标准MPI 1,相应的MPI 2标准也已经发布。
MPI吸取了众多消息传递系统的优点,具有很好的可以执行、易用性和完备的异步通信功能等。
MPI事实上只是一个消息传递标准,并不是软件实现并行执行的具体实现,目前比较著名的MPI具体实现有MPICH、LAM MPI等,其中MPICH是目前使用最广泛的免费MPI系统,MPICH2是MPI 2标准的一个具体实现,它具有较好的兼容性和可扩展性,目前在高性能计算集群上使用非常广泛。
MPICH2的使用也非常简单,用户只需在并行程序中包含MPICH的头文件,然后调用一些MPICH2函数接口将计算任务分发到其他计算节点即可,MPICH2为并行计算用户提供了100多个C和Fortran函数接口,表1-1列出了一些常用的MPICH2的C语言函数接口,用户可以像调用普通函数一样,只需要做少量的代码改动就可以实现程序的并行运行,MPICH并行代码结构如图1-1所示。
表 0-1常用的MPICH2函数接口04 MPI_Bcast 广播方式发送数据05 MPI_Reduce 组合数据到主进程06 MPI_Finalize 终止MPI图 0-1 MPICH并行代码结构在Linux集群环境下,MPICH2运行并行程序需要借助于网络文件系统(Network File System,NFS)共享工作区和使用SSH(Secure SHELL)通过网络发送共享工作区中的并行可执行代码,其中NFS需要编译内核使Linux支持网络文件系统。
NFS的内核选项在File System→Network File System下,服务器端要变异NFS Server Support,客户端编译NFS Client Support。
下面以在Red Hat Enterprise Linux 5上安装MPICH2为例简述在IBM Blade集群环境下搭建MPI并行运行环境的过程。
2.MPI的搭建1)服务器的配置(1)编译安装MPICH2MPICH2的安装可以使用根用户root安装也可以使用普通用户权限安装,这里我们以root用户安装为例,首先创建MPICH2的安装目录,如/user/local/mpich2-install,然后指定mpich2-1.1.0al.tar.gz安装包,切换到该目录下运行./configure-prefix=/user/local/mpich2-install指定MPICH2安装目录,执行命令make && make install将MPICH2的可执行程序及库文件安装到/user/local/mpich2-install目录下。
(2)设置NFS服务器端修改/etc/exports,在文件中加入/user/local/mpich2-install*(rw,no_root_squash,sync)指定将MPICH2的安装目录(这里我么将MPICH2安装目录作为工作区)通过NFS服务器共享给所有客户机。
(3)设置SSH更改/etc/hosts文件,添加主机名IP地址,例如:127.0.0.1 localhost.Localdomain localhost192.168.0.1 bcln1192.168.0.2 bcln2192.168.0.3 bcln3……配置host.conf文件完成后,为了使节点相互通信不需要输入密码,还要进行安全验证的配置,使用ssh-keygen-trsa命令生成SSH密钥对。
切换到/root目录下,cp id_rsa.pub authorize_keys将公钥拷贝为授权钥匙,并将在/root目录下生成的.ssh文件夹拷贝到所有节点。
这里我们使用了IBM集群管理软件XCAT 的并行拷贝命令pscp-r/root/.ssh bcln1-bcln14:/root/一次性地将.ssh目录并行拷贝到所有的计算节点上,避免重复多次运行scp命令的麻烦。
(4)修改环境变量profile在/etc/profile中加入MICH2可执行文件的环境变量export PATH=”$PATH:/user/MPICH-install/bin”,用命令source/etc/profile是新增加的环境变量生效。
(5)添加mpd.conf文件#echo “secretword=myword” >/etc/mpd.conf#echo /etc/mpd.conf#echo 600 /etc/mpd.conf(6)添加主机名称集合文件mpd.hosts文件在mpd.hosts文件中加入如下主机名:bcln1bcln2……2)客户端的配置(1)挂载网络文件系统在/user/local目录下创建mpich2-install文件夹,然后在/etc/fstab中加入需要挂载的网络文件系统,将服务器端共享的工作区挂载到本地,内容如下。
Server:/user/local/mpich2-install /user/local/mpich2-install nfs defaylts 0 0(2)添加环境变量类似于服务器端,在/etc/profile中加入MPICH2可执行文件的环境变量ecport PATH=”$PATH:/user/MPICH-install/bin”,,使用命令source/etc/profile 是新增加的环境变量生效。
3)MPICH2测试切换到工作区,运行mpdboot-n <number if hosts> -f mpd.conf启动mpi的守护程序,,该守护程序通知所有参加并行计算的计算节点,接下来运行mpiexec-n <number of procesess> cpi命令测试由MPICH2提供的计算圆周率的并行程序,若运行完毕未出现错误提示,则表示MPICH2的环境配置成功。
3.OpenMP简介OpenMP是一种针对共享内存的多线程编程技术(SMP是配合OpenMP进行多线程编程的最佳硬件架构),是由一些具有国际影响力的大规模软件和硬件厂商共同定义的的标准。
它是一种编程指导语句,指导多线程、共享内存并行的应用程序编程接口,OpenMP是一种能被用于显示指导多线程、共享内存并行的应用程序编程接口。
其规范由SGI发起。
OpenMP具有良好的可移植性,支持多种编程语言。
OpenMP能够支持多种平台,包括大多数的类UNIX及Windows NT系统。
OpenMP 最初是为了共享内存多处理的系统结构而设计的并行编程方法,与通过消息传递进行并行编程的模型有很大的区别。
这是用来处理多处理器共享的一个内存设备的情况。
多个处理器在访问内存的时候使用的是相同的内存编址空间。
SMP是一种共享内存的体系结构,分布式共享内存将多及的内存资源通过虚拟化的方式形成一个统一的内存空间提供给多个机器上的处理器使用,OpenMP对这样的机器也提供了一定的支持。
OpenMP的编程模型以线程为基础,通过编译指导语句来显示地指导并行化,为编程人员提供了对并行化的完整控制。
OpenMP使用Fork-Join(派生连接,见图1-2)并行执行模型。
一个OpenMP程序从一个单个线程开始执行,在程序某点需要并行时程序派生(Fork)出一些额外的线程组成线程组,被派生出来的线程称为组的从属线程,并行区域中的代码在不同的线程中并行执行,程序执行到并行区域末尾,线程将会等待直到整个线程组到达,然后将它们连接(Join)在一起。
在该点处线程组中的从属线程终止而初始主线程继续执行直到下一个并行区域到来。
一个程序中可以定义任意数目的并行块,因此,在一个程序的执行中可Foek-Join若干次。
使用OpenMP在编译器编译程序时,会识别特定的注释,而这些特定的注释就包含着OpenMP程序的一些语句。
在C/C++程序中,OpenMP是以#pragma omp开始,后面跟具体的功能指令。
在OpenMP中编译指导语句是用来表示开始并行运算的特定注释,在编译器编译程序时,编译指导语句能够被并行编译程序识别,串行编译程序则忽略这些语句。
并行编译程序根据这些指导语句将相关代码转换成在并行计算机中运行的代码。
一条编译指导语句由directive(命令/指令)和clause list(子句列表)组成。
OpenMP的编译指导语句格式为:#pragma omp directive-name[clause[[, ]Clause]…]new-lineStructured-blockOpenMP的所有编译指导语句由#pragma omp开始,其中directive部分包含OpenMP的主要命令,包括parallel、for、parallel for、section、sections、single、master、critical、flush、ordered、barrier和atomic。