Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2873036
  • 博文数量: 471
  • 博客积分: 10012
  • 博客等级: 上将
  • 技术积分: 5255
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-10 23:58
文章分类

全部博文(471)

文章存档

2011年(3)

2010年(61)

2009年(52)

2008年(212)

2007年(69)

2006年(74)

我的朋友

分类: LINUX

2007-12-28 22:53:10

openMosix集群探讨

两年前参加上海市计算机特长认定时做的课题,现在看来比较傻,不过谁都是从初级走向高级,从新手走向老手。这里将论文精简然后贴上来供大家参考。里面肯定有很多不足之处,望大家指出!


openMosix集群探讨

课题选定

一、集群简介
正如我们所看到的一样,你的机器在绝大多数的时候是空闲的,如果你在Windows下用任务管理器或其他的Linux工具(例如top, xload)观察CPU,你会看到CPU的使用率常见在1-2%。事实上,如果你有更多的计算机,这种浪费会加剧,在一个有300台计算机的部门里,CPU的空闲率是惊人的。然而这些部门还是需要极大的服务器用来编译或模拟计算,这样的情况还会加剧,不止需要一台,因为随着用户的啬,即使是个CPU的服务器,满负荷时也不能把任务交给另外的空闲服务器,因为用户很少会改变习惯去登陆另外一台服务器。如果能利用现有的计算资源,把空闲的CPU利用起来,或者能让服务器智能地迁移负荷,就是你看下去的理由。
集群的基本单位是单独的计算机,称为节点。它具有延展性,也就是很容易向集群中加入计算机。集群没有严格的定义,可以说就是许多利用高速联接的, 具有高速运算能力的,具有单一用户界面的计算机组合。这并不是集群的定义,而是表面现象的描述。集群中的节点需要硬件尽可能地一致,不一致的硬件集群称为异构集群,虽然这并不能改变集群的特性。但是异构导致集群会花费额外的时间来处理由于异构带来的延迟,另一方面这也是集群的优势,任何其他的多CPU系统都是严格要求CPU是一致的,集群就有足够的自由度增减节点,不受类型的限制。

集群分为三类:容错集群,负载均衡集群,高性能计算集群。容错集群是指两台主机通过两个或两个以上网络连接的系统,其中一个连接称为心跳线,利用每台主机上的服务进程监控对方主机的状态,一旦发现对方主机当机或出现不能正常工作的情况,心跳线会反映给互为备份的另外一台主机,该主机则会接替出问题的主机。典型的使用场景是空军的雷达追踪系统。
负载均衡集群一般用于相应网络请球的网页服务器,代理服务器。这种集群可以在接到请球时,检查接受请求较少,不繁忙的服务器,并把这些请求转到这些服务器上,从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。高性能计算集群是指具有响应大量计算的性能,可以作为数据中心使用的计算机的集合。比如压缩mp3,气象云图的分析等。
openMosix可以适用于需要强大计算的应用
财务与社会行为分析,使用数学模型模拟的计算。
音乐、图象等多媒体数据处理,例如mp3压缩、动画渲染、后期处理。
流体力学、有限元分析,例如乐高玩具的数字模拟强度分析。
编译、数据库挖掘。
医学研究,例如AIDS和DNA的结构分析,成功运作的有UD(United Diveces);
天文研究,例如SETI@home,在家寻找外星人项目;天气和海浪预报。

下面就对集群的一个伟大应用:SETI@home进行一下介绍。

SETI@home
在家找外星人计划,这是NASA全球计划之一,位于波多黎各西北的一个火山口中垂直对天的射电望远镜,用于收集来自宇宙的无线电信号,就像TCP/IP网中的嗅探器,这是宇宙中的一个嗅探器,通过收集信号,来分析由智慧生物发出的,有一定规律的无线电。比如,第一台电视的信号和猫王的歌曲在多年前通过收音机发送的无线电信号,至今还在宇宙中邀游,虽然可能很微弱了,但是还可以接收到。这个计划就是接收类似外星人的无线电信号,具体的步骤是让个人电脑的用户下载客房端程序,一个屏幕保护程序,或一个命令行程序,然后在连接互联网时下载大约330KB的数据包,然后利用处理器空闲时间计算。该数据包只是庞杂数据中的一小部分,但是全球目前加入的上亿台计算机就构成了最大的超级计算机。当计算完成后,再连接互联网上载结果,并下载新的数据包。根据其目前的计算形式,Intel称为P2P计算,其实是网格计算的一种。上载的数据不是最终数据,经过和其他人加工的数据整合,会产生新的结果。这时可能要继续计算,也可能就此产生阶段报告。每天SETI@home的主页上都会有新的成果,当然不一定是发现外星人的报告。

上面那些东西好像都离我们很远,那些十分专业的东西我们现在还涉及不到。那么对于我们,集群有什么重大的用处呢?学校可以不用花很多的钱去买一些功能很强的服务器,这样成本大太。相反可以用一些廉价的PC机组成一个集群,来模拟一台超级计算机。这样不但节约了成本,而且可以自由地扩展规模。即永不淘汰。需要的只是一个懂集群的专业人员。


二、主要集群系统

计算 Linux 中集群项目的数量就象计算硅谷中创业公司的数量一样。不象 Windows NT 已经受其自身的封闭环境阻碍,Linux 有大量的集群系统可供选择,适合于不同的用途和需要。但确定应该使用哪一个集群的工作却没有因此变得简单。
现在有很多已经投入应用的集群,包括:有Beowulf、Legion、openMosix等。 下面分别对这三种集群进行简单的介绍。
Beowulf 当谈到 Linux 集群时,许多人的第一反映是 Beowulf。那是最著名的 Linux 科学软件集群系统。没有一个包叫做 Beowulf。实际上,它是一个术语,适用于在 Linux 内核上运行的一组公共软件工具。其中包括流行的软件消息传递 API,如“消息传送接口”(MPI) 或“并行虚拟机”(PVM),对 Linux 内核的修改,以允许结合几个以太网接口、高性能网络驱动器,对虚拟内存管理器的更改,以及分布式进程间通信 (DIPC) 服务。公共全局进程标识空间允许使用 DIPC 机制从任何节点访问任何进程。Beowulf 还在节点间支持一系列硬件连通性选件。
我们所说的Beowulf首先是一个象史诗中英雄一样强大的集群系统。在1994年夏季,Thomas Sterling和Don Becker在CESDIS(The Center of Excellence in Space Data and Information Sciences)用16个节点和以太网组成了一个计算机集群系统,并将这个系统命名为Beowulf。Beowulf集群。Beowulf集群提供了一种使用COTS(Commodity off the shelf)硬件构造集群系统以满足特殊的计算需求的方法。这里的COTS是指象PC和以太网这种广为应用的标准设备,它们通常可以由多家厂商提供,所以通常有很高的性价比。Beowulf集群这种方法很快从NASA传遍了整个科研机构和社团。实际上,Beowulf集群现在已被人们看作高性能计算中的一个分支或流派。
Beowulf集群的分类
由于一些特殊的目的如系统性能,有些Beowulf集群系统也采用一些用户定制的设备(它们通常由一家厂商提供)。为了区分这些特殊的系统,通常把Beowulf分为两大类:
第一类Beowulf集群(CLASS I Beowulf)
这一类Beowulf集群全部由COTS设备组成。第一类Beowulf系统的优点是:
• 硬件设备由多个来源,通常具有廉价和易管理维护的特点。
• 不依赖于单个硬件供应商
• 所有设备驱动都由Linux开发社团提供
• 通常都是标准设备,例如,SCSI、以太网等等
当然第一类Beowulf集群的缺点也是非常显然的。由于所采用的硬件都没有经过性能优化,所以其很难达到很好的性能。比如,由于以太网的高延迟和低带宽使得集群系统中消息传递很难达到MIMD应用的需求,从而使整个集群系统的计算能力大打折扣。
第二类Beowulf集群(CLASS II Beowulf)
第二类Beowulf集群是指那些采用了用户定制设备的Beowulf集群。这类集群系统最大优点是具有很好的性能。例如,采用Myrinet作为集群系统的IPC网络可以极大地提供进程间消息传递延迟和速度。当然它的缺点就是依赖于单个硬件提供商而且价格高昂。
Legion Legion 试图构建一个真正的多计算机系统。这是一个群集,其中每个节点都是一个独立系统,但在用户看来,整个系统只是一台计算机。Legion 设计成支持一台世界范围的计算机,由上百万个主机以及数以万亿计的软件对象组成。在 Legion 中,用户可以创立他们自己的合作小组。
Legion 提供了高性能并行、负载均衡、分布式数据管理和容错性。
Legion 提供了高性能并行、负载均衡、分布式数据管理和容错性。它通过其容错管理和成员节点间的动态重新配置来支持高可用性。它还有一个可扩充核心,该核心可以在出现新的改进和进展时动态替换或升级。系统并不是只接受单一控制,而是可以由任意数量的组织管理,而每个组织都支持整体的自治部分。Legion API 通过其内置的并行性提供了高性能计算。
Legion 需要使用特别编写的软件,以使它可以使用其 API 库。它位于用户计算机操作系统之上,协调本地资源和分布式资源。它自动处理资源调度和安全性,还管理上下文空间以描述和访问整个系统中上亿种可能之外的对象。然而,在每个节点上运行时,不需要使用系统管理员特权,并且可以使用无特权的用户帐号进行工作。这将增加加入 Legion 的节点和用户的灵活性。
openMosix openMosix是一个Linux内核的工具,由适应的资源共享算法组成。它允许多台单cpu节点或smp(对称多处理器)节点运行相同的内核,紧密合作的工作。开发openMosix资源共享算法是用来响应节点间即时的、变化的资源使用。
资源共享通过进程从一个节点抢先地、透明地迁移到另一个节点来完成,达到负载均衡和防止过重的内存面页交换。这个目标增强集群整体的性能,并且建立一个方便的、多用户的分时共享的环境,用于执行连续的和并行的程序。openMosix的标准运行环境是一个每个节点都可以使用集群资源的计算集群
当前openMosix基于X86/Pentium工作站开发,包括UP和SMP环境,用标准的LAN连接。一般,它可以由10M局域网连接几台PC机构成,也可以由千兆以太网、ATM、或Myrinet连接大量基于Pentium的SMP的高端服务器构成。

以上这几种集群相比较而言,openMosix对于我们来说是最实际的一种方案。如果要做Beowulf这种重量级的东西,我们现在还没有那个能力以及时间。它是与整个Linux系统集成的。为了建立一个Beowulf集群,我们需要一些特殊的硬件以及为一些设备编写特殊的驱动程序等。而openMosix是与Linux内核相集成的,并且我们只要使用相对廉价的PC机,然后为内核打上一个补丁就可以拥有openMosix集群的功能。相对来说简单一些,因此我们选择了openMosix作为我们的研究课题。




openMosix原理介绍


在开始配置之前,我们先要对openMosix的工作原理有所了解,这样使安装配置工作有目的性。

openMosix算法由两部分组成:透明的抢先式进程迁移机制(PPM)和一组资源分配的算法。它们都运行在内核级,使用可调用模块,这样就省得修改内核,因此它们对应用级程序来说是完全透明的。



透明的进程迁移机制(PPM)

PPM(Preemptive Process Migration)能够在任何时候迁移进程到可用的节点上,通常,迁移进程所需的信息都由一个资源共享算法提供,但用户可以不管系统的决定而手工迁移他们自己的进程。
每个进程都有建立该进程的唯一头节点(UHN),通常用户从这个节点登录系统。OpenMosix的单系统映像(SSI)模块是一个连续的缓存集群,每个进程在这个缓存集群里看上去都运行在自己的UHN里,用户任务的所有进程分享UHN的运行环境。迁移到其他(远程)节点的进程无论何时只要可能,就使用本地(在远程节点上)资源,但通过UHN与用户环境相结合。
PPM是资源管理算法中的主要工具,只要有需要资源的请求,例如CPU和主存的使用都在允许范围之内,用户进程就被限制在UNH里,当资源的请求超出了允许范围,一些进程将被迁移到其它节点上,以使用远程节点上可以利用的资源。
它的目标是有效的利用网络资源以达到性能的最大化。在openMosix中工作发布的最小间隔尺寸是进程,用户可以在一个SMP的节点上运行并行程序,然后允许系统把进程迁移到有充足系统资源的节点上。
在进程运行时,资源共享算法可能重新指定它们迁移到有新的可用系统资源的节点上,以利用这些资源。指定和重新指定进程的能力明显地对易用性和提供有效的多用户、分时共享执行环境很重要。
openMosix集群没有中心控制节点或节点间的主从关系,每个节点都能作为自治的系统来操作,独立地做决定。这样的构思允许自由地增减节点而无需做太多的工作。这点充分显现了openMosix的灵活性。
  另外,openMosix还具有非常重要的可伸缩性,可伸缩性保证了系统会在复杂配置环境中像在简单配置环境中运行得一样好。可伸缩性是通过在系统控制算法中随意合并随机数来实现。在这种控制环境中,每个节点都自我决定,甚至不试图核实集群中的总体情况或某一节点的状况。比如,每个节点每隔一段时间向随机抽取的另一个节点发送它的可用资源信息。同时它保持一个接收最新信息的窗口。这种设计支持信息发布和动态配置。

资源分配算法
openMosix的主要资源分配算法是负载均衡和内存迁导(防止内存资源枯竭)。动态负载均衡算法通过将进程从高负载的节点迁移到低负载的节点来持续不断地尝试着降低节点间的负载差异。所有的节点均运行这一算法。而且负载的减轻是在两个节点之间独立进行的,每个节点上的处理器的数量和速度是影响负载均衡的重要因素。这种算法根据节点中负载的变动和进程运行时的特性进行响应。这个算法运行成功的标准是:没有空进程或资源的特别馈乏。

正面具体介绍openMosix的两种资源分配算法:

1、内存迁导算法。
集群应用了这种算法,就可以防止内存资源枯竭。当一个节点因缺少内存而启动了过多的页面文件的时候,此算法就会开始执行。在这种情况下,此算法会绕开负载均衡算法而强行把一个进程迁移到一个有足够多内存的节点上去,就算这会造成负载的不均衡。最近,openMosix又有了一种新算法用来选择哪个节点适合运行指定程序。这种调度算法的数学模型来自于经济研究领域。在集群中确定最佳位置是个复杂的问题。最棘手的问题是一个集群中各台Linux计算机的可用资源是不等同的。实际上,这涉及到内存、CPU、进程通讯等等一些不能拿来比较的东西。它们不能用同样的标准来度量。而openMosix的这种算法就巧妙地解决了这个问题。它的确很有趣!它是基于经济原则和经济分析来实现负载均衡的。
这种策略主要思想在于它把所有不用的节点的资源集中在一起,然后工作被分配到那些高效的机器上去,就像那些节点在一个面向市场的经济体制中竞争一样。
这种经济型策略为计算、通讯、内存和I/O资源的分配提供了统一的算法体制。它实现了分配资源的最优算法。


2、进程迁移
  openMosix支持PPM(透明的抢先式进程迁移机制)。迁移以后,不管一个进程的位置在哪儿,它都继续对它开始的运行环境起作用。也就是说,它只是把计算迁移到别的节点上,实际的工作效果跟它单独在初始节点上的工作效果是一样的。执行PPM时要迁移的进程会被分为两个部分:可迁移的用户部分和决定于头节点且不可移动的系统部分。用户部分也可以称为远程部分,因为它可以被迁移。它包含进程的代码、堆栈、数据和进程注册器。系统部分包含进程接收到的资源描述(这将在后面讲到)和进程系统代码的内核堆栈。当一个进程在内核级运行的时候,系统部分对其进行压缩。因此,它必然存在于进程的头节点里面,所以尽客进程可以在不同的节点之间多次迁移,但系统部分是永远不会被迁移的。系统部分和用户部分之间的接口做是很好,我们可以监听这两部分间的每一个动作,而且可以在整个网络上传送它。这个功能是通过一种特殊的通信渠道在网络的连接层上实现的。
为了成功在新节点上建立一个新进程的框架,迁移的时候并不是立即执行迁移的,而是有个所谓的“修正时间”。而且为了在内存页面文件的转换上保持均衡性,它有一种线性成分。为了使迁移的开支最小,只有进程的垃圾页面文件会被转换。
用openMosix执行进程的时候,openMosix会通过在头节点上向系统部分传递一种系统调用来实现位置的的完全透明。对于这种系统调用的执行,我们简单地说一下。我们可以在那些运行系统调用的节点网络应用层上监听它们。如果系统调用是与位置无关的,它就会在远程机上被远程执行。否则系统调用就会被传送到头节点中进程的系统部分。进程的系统部分会把结果传送回远程主机。接下来远程主机继续执行进程的用户部分。


这部分对openMosix的工作原理进行了介绍,这也许会在进行安装配置工作的时候对解决某些问题有些帮助。


openMosix集群组建全过程



一、使内核支持openMosix


这里选择Debian GNU/Linux 3.0 woody作为平台,因为它的软件管理系统apt非常强大,况且Debian在服务器方面是非常优秀的。不过为了照顾其它发行版,这里的下载、安装、配置均兼顾传统方法。
安装配置openMosix必须通用的kernel-2.4.20,因为openMosix-3是基于2.4.20版本的内核的,虽然Redhat9.0自带2.4.20版的内核,但通过参考openMosix的HowTo,可以发现不能使用任何发行版本定制的内核,因为它已经补打了太多的补丁,加上的openMosix补丁可能会不起作用。因此到下载通用2.4...取名为linux, 然后下载其openMosix-3的补丁程序,格式是.tgz的,用tar zvxf filename.tgz解压,然后把补丁文件拷入/usr/src/linux/。接下来运行以下命令将内核源码打上补丁:

# patch –Np1 < patch_filename

这里用重定向功能将内核的补丁嵌入内核源代码。接下来,就是熟悉的内核编译了,

进入/usr/src/linux/,在提示符下输入::

# make mrproper

# make menuconfig

执行失败!由于只安装了Debian的基本系统,因此内核编译程序提示缺少ncurses函数库。 于是apt-get install libncurses5-dev,其它系统可以装RPM或者到网上下载源码把ncurses装上。然后再运行上述命令,哈!成功!滚过几屏的文字后出现了熟悉的内核编译菜单.


内核配置:

1> 由于已经给内核打上了补丁, 因此, 在kernel菜单的第一项便是openMosix的选项,,回车进入,菜单如下:

1 openMosix process migration support
2 Support clusters with a complex network topolopy
3 Stricter security on openMosix ports
4 Level of process identity disclosure (0-3)
5 openMosix File System
6 Full/Select exceptions on pipes
7 Disable OOM killer
8 Load limit

这里需要的选择是:1,3,4,5,6.其中第4项的级别设为3.
然后进入主菜单中的File System  Network Fiile System,,激活其中的:

2> NFS File System support-  Root file system on NFS 和
NFS server support

3> 接下来添加块设备(Block devices)的内存虚拟盘的支持(RAM disk support)和使用初始化内存虚拟盘支持(Initial RAM disk (initrd) support)两项.

4> 在网络选项(Networking options)中增加对IP内存级自动配置(IP:kernel level oconfiguration),IP动态地址支持(IPHCP support),IP启动地址绑定支持(IP:BOOTTP support).

5> 建议除去SCSI支持,本例中没采用SCSi设备,并且可以避免内核编译失败,建议除去声卡支持.

6> 接下来,设置其它的内核选项,这要依据机器的硬件配置和需求.

7> 都配置完以后,在主菜单按下ESC,,提示保存设置,不会不知道怎么做吧?  “Yes”退出后.在提示符下键入如下命令:

# make dep && make clean && make bzImage

这里用”make bzImage”来编译压缩的内核,由于2.4.x版本的内核相对于以前版本的内核略显巨大,所以一般都要用这个命令取代原来的”make install”.
经过漫长的等待,终于编译完成,没看到任何错误.然后继续编译模块:

# make modules && make modules_install

完成后把内核文件拷入/boot/目录:


# cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage-2.4.20-openMosix-3

顺便给它做了个软链接:

# ln –s /boot/bzImage-2.4.20-openMosix-3 vmlinuz-2.4.20-openMosix-3

然后修改引导程序Lilo的配置文件,加入新内核的启动项。然后运行Lilo更新配置:

# lilo –v –v -v

现在”shutdown –r now”看一下辛苦配置的成果。

不幸的是,内核出现rcs错误!看来根本就没有编译成功,至于原因,要做出准备的判断十分不易。只好重编内核。
还好第二次的编译很成功,否则这台电脑就要遭殃了。:)

大功告成!现在我们正运行着有openMosix支持的内核。现在第一步的内核配置工作已经完成。,


二、服务器配置


(一)、安装openMosix


这里只需装一个openmosix-tools-0.34即可,可以到上...?依次执行:

# ./configure
# make
# make install


(二)、安装LTSP


Ltsp包含以下几个工具,有tftp、ltsp_core、ltsp_kernel、mknbi、ltsp_initrd_kit、ltsp_openmosix_userland。以下详细介绍配置过程。

(1) tftp

tfpt,用来让客户机从服务器上自动下载内核文件。apt-get install tftpd。RedHat上用发行版光盘里进行安装:

# rpm -ivh *.rpm

(2) ltsp_core

然后安装ltsp_core,,里面做得很奇怪,有几个针对不同发行版的安装程序,如redhat.sh、madrake.sh等等,然后它做了许多的链接,如redhat-6.2,redhat8.0,mandrake9.0等等,都是链接到对应发行版本的一个安装文件,不知道会有什么不同(望指教)。帮助文件只有短短的三四行,没给出任何有用的信息。因此执行名为”install.sh“文件:

# ./install.sh

屏幕提示如下,输入“y”继续:

About to install LTSP, using the following settings:

LTSP_DIR = /opt/ltsp
SWAP_DIR = /var/opt/ltsp/swapfiles
TFTP_DIR = /tftpboot
IP_NETWORK = 192.168.0.0
IP_SERVER = 192.168.0.254
IP_NETMASK = 255.255.255.0
IP_BROADCAST = 192.168.0.255

If you want to install LTSP using the above settings,
enter 'Y' and the installation will proceed. Any other
response will abort the installation, and you can modify
the CONFIG file and restart the installation.

Continue with installation (y/n)? y

Take a look in /tmp/ltsp.install.log for a complete log of the installation

You now need to change to the /opt/ltsp/templates directory and
run the ltsp_initialize script to complete the installation

它复制安装文件到/opt/ltsp/templates中,到此目录下并执行初始化脚本:

# cd /opt/ltsp/templates
# ./initialize

屏幕提示如下,按回车继续:

The Linux Terminal Server Project ()


About to update important system files. If you would like
to stop and review the changes that are about to be made,
you can cancel now and look at the replacement files that
are about to be installed.

然后安装程序列出了将要被安装和修改的文件:

The following files will be created/modified:

/etc/X11/xdm/Xaccess The access config file for xdm/kdm [Y]
/etc/X11/xdm/Xservers Config file for xdm to launch local Xse [Y]
/etc/X11/xdm/Xsetup_workstation Sets the logo of your login window [Y]
/etc/dhcpd.conf.example Example config file for dhcp [Y]
/etc/exports The config file for nfs [Y]
/etc/X11/gdm/gdm.conf The config file for gdm [Y]
/etc/X11/gdm/Init/Default The gdm startup script [Y]
/etc/hosts.allow Config file for tcp wrappers [Y]
xinetd Enable the tftp daemon [Y]
/etc/inittab Config file for init [Y]
/etc/X11/xdm/ltsp.gif The logo for your login screen [Y]
/etc/rc5.d/S60nfs Startup links for nfs [Y]
/etc/rc5.d/S11portmap Startup links for the portmapper [Y]
/etc/sysconfig/syslog Startup info for syslogd [Y]
/etc/X11/xdm/xdm-config The main config file for xdm/kdm [Y]

输入a并回车确定。然后安装程序将完成安装。

(3) ltsp_kernel

先对压缩包进行解压:

# tar zvxf ltsp_openmosix-2_kernel_2.4.20_Pentium3.tar.gz

进入解压出来的目录并执行安装脚本:

# ./install.sh

(4) mknbi

对压缩包进行解压:

# tar zvxf mknbi-1.4.2.tar.gz

然后编译安装:

# make
#make install

(5)ltsp_initrd_kit

解压:

# tar zvxf ltsp_initrd_kit-3.0.10-i386.tgz

运行安装脚本:

# ./buidk

屏幕提示如下:

You can prepare a kernel for the following type of workstation:

1 - PCI/ISA network card
2 - PCMCIA (laptop) network card

Enter option (1-2) [1]:

如果是PCI或ISA网卡就选1, 如果是PCMCIA网卡就选2. 回车确定。
然后屏幕提示:

Kernel source directory [/usr/src/linux-2.4.21-ltsp-lpp]:

输入内核源代码目录:/usr/src/linux. 回车确定。接下来“Size of initrd filesystem “和”Number of inodes to allocate in initrd filesystem“均取其默认值。

接下来安装程序可能会提示说环境变量中LANG不能有“_xxx”的后缀,于是编辑/root/.bash_profile,加入如下几行:

LANG=en
LANGUAGE=en
LC_ALL=C

export LANG LANGUAGE LC_ALL

为了使修改生效,重新登录:

# logout

重新执行安装程序,一路顺风。

(6) ltsp_openmosix_userland

对源码包进行解压,然后执行安装脚本:

# tar zvxf ltsp_openmosix_userland_0.2.4.tar.gz
# cd ltsp_openmosix_userland_0.2.4
# ./install.sh

安装程序很简单,它自动帮你完成了一切。屏幕将会出现如下所示:

Everything should be Ok now.
You must also install at least one of the ltsp_openmosix_kernel package.
You may then check files hosts and hpc.map and read
lts.conf.mosix.example...

Happy computing ^_^

William.



三、配置DHCP


到此,服务器的配置工作即将完成。接下来的工作既是最后的服务器配置工作,又在其中占有极大的地位,那就是客户端的IP分配问题。我们这里使用dhcp来自动分配IP地址,可以趁此机会熟悉一下dhcp的配置。一举两得!
观察dhcp的默认配置文件/etc/dhcp.conf,需要改动的并不多。
这里我们在文件开头加上一句:”ddns-update-sytle none;”。
然后把“Option routers”这一项设为自己服务器的IP。实验中设为:192.168.1.118.
在这里,为了简化工作,不做DNS服务器,因此把域名解析的相关选项去掉。
由于其配置文件dhcpd.conf中关于group的内容在这里用不到,于是把这些内容全部注释掉了。
最后在文件中加入一句“filename “/lts/vmlinuz-2.4.20-ltsp-openmosix-2-Pentium3(装ltsp_kernel时生成的)来指定客户端的内核下载。这里是不是有疑问了?对,内核文件明明在/tftpboot/ltsp/目录下,为什么是/ltsp/呢?这是因为/tftpboot是tftp的根目录,因此它是以/tftpboot为根目录算起的。这个问题曾困扰我了好长时间。因此这里特别指出。
在配置文件中有如下描述:

shared-network WORKSTATIONS{
subnet 192.168.0.0 network 255.255.255.0 {
}
}

其中应该有一句“range”语句来指定自动分配IP地址的范围。于是将其修改为:

shared-network WORKSTATIONS{
subnet 192.168.0.0 network 255.255.255.0 {
range 192.168.0.20 192.168.0.30; /*这里20-30只是举个例子,可以指定为
} 1-254中的任意两个数字 */
}

接下来重启dhcp服务:

# /etc/init.d/dhcpd restart

然后再在客户端上执行dhclient程序,成功!得到IP!是192.168.0.30。这可是一个值得纪念的数字,
到此,openMosix的服务器配置暂告一段落。我们已经拥有了一台功能完备的服务器,但还不是一个很好的头节点,因为它无法为无盘启动提供足够的环境。为了达到这个目的,我们接下来的工作就是配置客户端。



三、客户端配置



1.复制openMosix的工具到客户端的目录中

# cp /sbin/setpe /opt/ltsp/i386/sbin/
# cp /bin/mosrun /opt/ltsp/i386/bin/
# cp /bin/mosmon /opt/ltsp/i386/bin/
# cp /bin/mosctl /opt/ltsp/i386/bin/
# cp /bin/migrate /opt/ltsp/i386/bin/

2.因为/opt/ltsp/i386目录最后是客户端的根文件系统,需要的工具都可以复制到相应的目录中,因为/opt/ltsp/i386/etc/hosts文件是连接,因此需要先删除后复制新文件:

# cp /bin/touch /opt/ltsp/i386/bin/
# rm –f /opt/ltsp/i386/etc/hosts
# cp /etc/hosts /opt/ltsp/i386/etc/
# cp /etc/rc.d/init.d/openmosix /opt/ltsp/i386/etc/rc.openmosix

3.创建客户端的/mfs目录:

mkdir /opt/ltsp/i386/mfs

4.修改客户端文件系统配置文件,加入mfs的配置:

# cd /opt/ltsp/i386/etc
# vi fstab
加入none /mfs mfs dfsa=1 0 0

5.修改客户端启动进程脚本,加入启动openMosix的配置和装载/mfs文件系统的配置:

# vi /opt/ltsp/i386/etc/rc.local

#OpenMosix startup section
#we don’t want any terminal processes to migrate
echo 1 > /proc/mosix/admin/lstay
#start mosix
/etc/rc.openmosix start
#mount /mfs filesystem.doesn’t work when done earlier
mount /mfs
#End OpenMosix Starup Section

6.配置完成后准备软盘制作以太启网启动盘,访问网站,鮮.??,使用cat 生成启动软盘。本例中使用rtl8139,放入一张空白三寸软盘。

# cat eb > /dev/fd0

7.修改LTSP客户端启动配置文件/opt/ltsp/i386/etc/lts.conf,禁止启动X Windows,修改参数runlevel = 3,即启动文本界面。

8.确认/etc/exports文件包含共享客户端根文件系统和交换区内容:

# more /etc/exports
/opt/ltsp/i386 192.168.0.0/255.255.255.0(ro,no_root_squash)
/var/opt/ltsp/swapfiles 192.168.0.0/255.255.255.0(rw,no_root_squash)

然后我们插入制作好的启动软盘尝试启动。在启动前要确认各项服务都在修改之后都已重启,执行下列命令重启必要服务:

# /etc/init.d/nfs restart
# /etc/init.d/dhcpd restart
# /etc/init.d/openmosix restart
# in.tftpd -s /tftpboot/ -l -v

真是多磨多难,在又一次的客户端启动过程序中,提示glibc.so.6有问题,拿系统里/lib/里面这个文件和客户端根目录的lib目录里面文件作比较,发现大小不一样,因此版本上肯定有些差别,于是把系统里面库文件拷到客户端的相应目录里。由于/lib/ld-linux.so.2与其有关联,因此顺便把这个文件也用服务器系统里的替代掉。
在上次重启中还提示openmosix.map配置有误,我们来看一下这个文件的配置:/opt/ltsp/i386/etc/openmaosix.map。
里面有文件配置格式的提示:

openMosix-Node_ID IP-Address(or hostname) Range-site

下面是一个示例配置文件内容(依个人情况而作相应更改):

1 192.168.2.20 1
2 192.168.2.21 1
3 192.168.2.22 1
4 192.168.2.23 1

其实还可以这样写:

1 192.168.1.20 4

以上两种写法是等价的。
关于配置文件的更详细的介绍,请参看openMosixHOWTO中”Syntax of the /etc/openmosix.map file”一节。

Openmosix还有个配置文件:/etc/openmosix/openmosix.config。在里面加入四个语句:

AUTODISC=1
AUTODISCIF=eth0
MIGRATE=yes
MFS=yes

重启客户端,成功看到了命令提示符。

至此,我们完成了所有的安装配置工作。拥有了一个强大的集群系统,接下来的工作就是让它为我们服务。下面将阐述集群的应用方面的内容。



集群应用

我们已经组建起一个功能完备的头节点,紧接着,我们便开始了压缩MP3的测试。因为这是我们原本开始做这个项目的一个重要的目的。
在这里,使用一般发行版本自带的MP3压缩工具Grip来压缩CD歌曲。这里具体安装过程不再阐述,Linux安装光盘中基本都附带这个软件。这里只对其运行过程以及结果进行分析。

运行环境介绍:
由于手头没有多的机器供使用,因此我们仅用两台机器进行压力测试。
头节点CPU:PIII 800; 内存:256M; IP:192.168.0.100.
无盘启动节点的处理器与内存选用和头节点相同的规格; IP:192.168.0.103

这里分别使用一台、两台节点来测试集群的效果。

在头节点上启动Grip,选定了要压缩的12首CD歌曲以后。开始进行压缩,并开始计时。在这之前,打开openMosixview进行动态监控。
  以下是启动两台节点运行测试的截图:、









第一张截图是openMosixview的主界面,我们看到了两个节点的CPU使用率几乎都达到了100%;头节点的内存使用了10%,无盘节点内存使用14%,都相差无几。

在第二张截图里我们可以看到,100是头节点,103是无盘启动节点。
由于压力测试是对集群的全面测试,因此它会启动很多进程以及进行海量的运算。我们看到,100周围的一个个圆点分别代表在头节点上的每个进程。有五个进程被迁移到了节点103上,这样,压力测试便被相对平均地分到了两台机器上进行。达到了使用集群的目的。
下面对两次实验的结果进行分析。

启动节点数 耗用时间
一个节点(头节点) 17m0.741s
两个节点(头节点+无盘节点) 10m0.076s

由此,我们看到了成果。原本在一台机器上的事情放在再台机器上做,效率提高了将近一倍!由截图中也可以看了,总的资源分配还是比较平均的。两个节点分别承受了一半左右的负载。

我们还做了一个压力测试。压力测试软件是一个为专门测试集群性能而编写的,它主要是启动大量的进程以及进行海量的运算来检测集群的整体性能。可以在其主页:上...??优越性。

其实openMosix的应用还有很多。尽管现在集群在实际生活中应用还不是十分广泛。但相信以Linux系统的发展速度与前景以及openMosix集群的优越性。openMosix 必定会渐渐地被人们所知晓以及广泛应用。

 
阅读(2854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~