热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用Beowulf让普通PC变集群

利用Beowulf让普通PC变集群--Linux企业应用-Linux服务器应用信息,下面是详情阅读。
  现在,Linux在IT业里已经有着非常重要的影响,除了其具有免费、高效、可靠等优势外,对于计算机科学家和那些需要进行大量运算的科学家来说,它还是一个非常强大的工具。自从Donald Becker发起了Beowulf集群计算以后,在NASA的Goddard Space Flight Center工作的Thomas Sterling又扩展了Linux在高性能并行计算领域的应用。

现在,Linux在IT业里已经有着非常重要的影响,除了其具有免费、高效、可靠等优势外,对于计算机科学家和那些需要进行大量运算的科学家来说,它还是一个非常强大的工具。自从Donald Becker发起了Beowulf集群计算以后,在NASA的Goddard Space Flight Center工作的Thomas Sterling又扩展了Linux在高性能并行计算领域的应用。今天,大量以普通PC为基础的集群出现在了各个级别的实验室、工业科技中心、大学甚至是一些小的学院中。如果有人问你是否一个有关科学计算的问题可以通过一些松散的计算资源来解决?答案是当然可以。我们可以使用Beowulf集群,它可以使用很多普通的PC做成一个集群来解决我们所面临的问题,并且这种集群所具有的价格优势是传统的并行计算机所无法比拟的。

如何创建一个Beowulf集群

事实上,使用现有的PC或者不用的旧PC,任何人都可以构建一个自己的并行系统来练习并行编程或者进行并行运算。在一个计算机实验室里,我们可以将PC机做成双启动系统(可以根据需要进入Windows或者Linux),将其用作两种用途。此外,对于那些已经不再使用的机器则可以像Stone SouperComputer一样做成一个并行的运算系统。

没有两个Beowulf集群是完全相同的。事实上,这种系统的硬件和软件的配置是如此的灵活,以致于其可以被轻松定制成为不同的组合。虽然每一个Beowulf集群系统都是不同的,并且其配置也是根据应用程序的需要来进行的,但还是有一些基本要求是相同的。下面我们就来看一看在创建一个集群时需要考虑的一些基本问题。

创建一个集群的最低需求

要创建一个集群,每一个节点至少应该包含有一个Intel 486 CPU和主板。虽然Intel 386也可以正常工作,但其性能将不值得我们为之付出劳动。内存的需求则取决于目标应用程序的需求,但每一个节点至少需要16MB的内存。大部分应用程序都会要求每一个节点具有32MB以上的内存。通过使用集中式的磁盘空间,节点可以从软盘、小容量的硬盘或者网络文件系统启动。启动以后,节点可以通过网络访问文件系统中属于自己的Root分区,这种访问一般都是通过NFS(网络文件系统)来实现的。在一个具有高带宽和高性能服务器的环境中,这种配置的工作状态将非常不错。要想获得更好的性能,应该在本地磁盘上安装有操作系统、交换分区,并且数据可以在每一个节点获得。每一个节点应该至少有200MB的磁盘空间用于存放操作系统组件和用作交换空间,还应该有400MB或者更多的空间保留用于程序运行中使用。每一个节点至少要包含有一个网卡(最好是高速网卡)。最后,每一个节点都需要一个显卡,一个硬驱和一个电源。键盘和显示器则只有在进行系统安装和配置时需要。

需要注意的是,所有选择使用的硬件在Linux中都要有驱动程序或者相应的模块,一般来说,除非这些硬件非常陈旧,否则都不是问题。对于需要对整个集群进行管理的主节点来说,为了方便起见,最好安装一个X服务器。安装过程中,如果某一个特定的组件出现问题或者没有驱动程序,可以到论坛中寻求帮助。

网络连接

如果可能,每一个节点最好处于一个单独的局域网中,并且拥有一个自己的Hub.这样可以保证网络通信能够顺畅进行。集群中的第一个或者主节点应该具有两个网卡,其中一个与内部网络相连,另外一个与公共网络相连。这对于用户登录和文件传输尤为有用。在内部网络中,需要使用不在 Internet上使用的IP地址。一般来说,最简单的办法就是A类10.0.0.0地址,因为这些地址是专门为那些没有路由的网络保留的。在本例中,每一个节点的/etc/hosts文件看起来如下所示:

10.0.0.1 node110.0.0.2 node210.0.0.3 node310.0.0.4 node4

每一个节点的/etc/hosts.equiv文件应该如下所示:

node1node2node3node4.

一个节点号为2,使用Red Hat Linux的ifcfg-eth0配置文件如下所示:

DEVICE=eth0IPADDR=10.0.0.2NETMASK=255.0.0.0NETWORK=10.0.0.0BROADCAST=10.255.255.255OnBOOT=yes

此外,我们还经常需要一个DNS,对于那些节点名字和地址经常变化的内部网络更是如此。DNS可以运行在第一个节点来为内部网络的节点提供名字/地址的解析。

本地存储

在加载操作系统的问题上,创建Beowulf集群需要预先做一些存储方面配置的决定。因为一旦安装完成后要进行更改就要重新安装所有的节点,所以一定要进行非常细致的考虑。虽然大部分基于Linux的Beowulf集群运行的是都是Red Hat Linux发行版,但事实上,基本上所有的Linux发行版都支持基本的集群。Red Hat的安装非常简单,我们可以使用光盘或者通过集群的第一个节点进行安装(前提是在节点上已经有一份发行版拷贝)。在实际的使用过程中,很多人发现从主节点通过FTP把操作系统加载到每一个节点要比通过NFS挂载Root分区好。这种方法避免了一些不必要的网络通信,在应用程序运行时保留带宽用于信息的传送。

Red Hat Linux运行环境只需要每一个节点有大约100MB的磁盘空间,不过,在实践中发现在每一个节点包含一个编译和一些其它的工具还是非常必要。因此,在配置中,每一个操作系统需要大约175MB的磁盘空间。虽然有一些集群将交换分区配置在了普通的文件系统上,但在本地磁盘上使用一个专门的交换分区才是一个更高效的选择。一般而言,节点的交换空间的大小应该是内存的2倍,而当内存大于64MB时,交换空间应该等于内存的大小。在实际中,当内存为64MB至 128MB时,我们通常将交换分区设为128MB.因此,如果某一个节点有32MB内存,有2个硬盘,那么我们就应该将Linux系统加载至主驱动上,而将另外一个硬盘用作交换空间(64MB)和本地运行空间(138MB)。

集群管理

系统管理和维护是一件非常乏味的工作,对于大型的集群更是如此。不过,我们可以从网上找到一些工具和脚本来简化这些工作。比如,一个节点必须在时间和系统文件(/etc/passwd、/etc/group、/etc/hosts、/etc/hosts.equiv等)上与其它的节点保持同步,那么一个简单的可以被cron定时执行的脚本将可以来完成这个同步过程。

一旦所有的节点都加载和配置完成后,我们就可以来开发和设计并行应用程序来充分利用新系统的运算能力。

为集群计算开发并行应用程序

在Linux下,我们可以使用商业编译器,也可以使用免费的编译器。GCC、g++和FORTRAN(g77)编译器被包含在了大部分的Linux发行版中。其中C和C++编译器已经非常优秀,而FORTRAN编译器也在不断的进步之中。商业编译器则可以从Absoft、 Portland Group、The Numerical Algorithms Group等公司获取。如果配置适当,一些商业的FORTRAN-90编译器可以自动实现并行计算。一般来说,开发并行代码需要在处理器之间使用PVM (并行虚拟机)、MPI(信息传送接口)或者其它的通信库来进行清晰的信息传递。PVM和MPI都是免费的,并且可以在计算的过程中通过简单的库调用来实现节点的之间的信息传递。

当然,并不是所有的计算任务都适合用并行计算来实现。一般而言,为了充分利用并行计算的优势,通常要对针对任务进行一些开发工作。很多科学问题都可以进行细分,也就是可以将其分解为相对独立的模块,以使其可以在各个独立的节点进行处理。比如,图像处理任务通常可以再细分,让每一个节点都可以处理某一部分的图像。当某一图像可以被独立处理时(比如处理这部分图像不需要其它部分的信息),效果更好。

对于并行计算来说,最危险的缺陷就是将一个计算问题变成了一个通信问题(不管是使用现有的并行运算代码还是自己新开发代码)。这种问题一般发生在将任务过分细化,从而使得各个节点为了保持同步而传输数据的时间超过了CPU进行计算的时间。在这种情况下,使用更少的节点反而可能会获得更多的运行时间和更充分地利用资源。这就是说,对于不同的并行应用程序而言,要根据本地节点计算的负载和通信来进行调整和优化。

最后要说的是,在开发并行算法时,如果所使用的集群环境的节点各不相同,那么就要充分考虑到这个问题。事实上,在运行并行应用程序时,各个节点间CPU的速度是非常关键的,因此,在一个配置不同的集群中,只简单地将任务平均分配,那么速度比较快的CPU就必须要等待速度比较慢的 CPU完成自己的任务,这显然是不合理的。因此,设计适当的算法可以很好地处理这种情况,当然,不管采用什么样的算法,一定要充分考虑到通信过载问题。

并行处理可以以很多种方式来组织,但是master/Slave的组织方式是最易于理解和编写程序的。在这种模式中,一个节点作为master,而另外一个则作为Slave.Master节点通常决定如何分割任务,以及指挥信息的传送,而Slave节点则只负责处理分配到的任务,并在任务完成的时候向master报告。

总结

事实上,在开发并行代码时,并没有严格的规定,而是要根据实际情况来进行。优化硬件配置和算法的前提是要知道所要运行的应用程序的细节。在各个节点配置不同的集群中,在各个节点中进行负载平衡以及各个节点中的通信都取决于硬件的具体情况。在通信速度快的环境里,可以将任务分得更细,反之则不宜将任务过分细化。

应该说“Beowulf运动”将并行计算大众化了。在Beowulf系统中使用标准信息传送库开发的并行代码可以不经过任何更改就直接运行在商业级的超级计算机之上。因此,Beowulf集群可以作为一个入门的切入点,在需要时再将其过渡到大型机上。此外,廉价、通用的集群意味着并行计算机环境可以用于特定的任务,而大型的商业超级计算机由于其过于昂贵,故不可能使其专注于某个单一的应用程序。很显然,随着并行环境越来越多地被应用到现实工作,将会更进一步促进其在各个领域的应用。
推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
author-avatar
阿连AND王进_893_799
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有