架构高性价比的分布式计算机集群

时间:2022-09-24 03:31:36
正如你所看到的一样,你的机器在绝大多数时间是空闲的,如果你在Windows下用任务管理器或其他的Linux平台的工具(例如top,xload)观察CPU,你会看到CPU的使用率常见在1~2%。事实上,如果你有更多的计算机,这种浪费会加剧,在一个有300台计算机的部门里,CPU的空闲率是惊人的。然而这些部门还是需要强大的服务器用来编译或模拟计算,这样的情况还会加剧,不止需要一台,因为随着用户的增加,即使是8个CPU的服务器,满负荷时也不能把任务交给另外的空闲服务器,因为用户很少会改变习惯去登陆另外一台服务器。如果能利用现有的计算资源,把空闲的CPU利用起来,或者能让服务器智能的迁移负荷,就是你看下去的理由。



集群的基本单位是单独的计算机,称为节点(node)。其可增长的特性,称为延展性(Scale),也就是向集群中加入计算机。集群没有严格的定义,可以说就是许多利用高速联接的,具有高速运算能力的,具有单一用户界面的计算机组合。这并不是集群的定义,而是表面现象的描述。集群中的节点需要硬件尽可能的一致,不一致的硬件集群称为异构集群,虽然这并不能改变集群的特性,但是异构导致集群会花费额外的时间来处理由于异构带来的延迟,另一方面这也是集群的优势,任何其他的多CPU系统都是严格要求CPU是一致的,集群就有足够的*度增减节点,不受类型的限制。



本文选择MOSIX作为集群的方案,并使用无盘节点。架构集群并没有想象中那样复杂,参考下面的步骤可以一步步的架构集群,整个的方案并不是很昂贵,而且便于扩展。使用RedHat是因为在中国这是最有权威的版本,不论是初学者还是专业工作者,都可以在RedHat Linux中定制自己的版本。使用终端服务器LTSP是因为结构简单,便于快速扩展。使用的硬件是可以改进的,比如使用双CPU的主板和至强处理器,这样单一机柜中处理器就密集到48块CPU,本例中可以使用24块CPU。除了CPU以外,还可以使用千兆网卡或光纤网卡,交换机可以使用光纤交换机,内存总数可以达到48GB。但是随着硬件的升级,整体价格就会过高,而性能的提升并不是按比例的,因此本例的配置是性价比较好的组合。MOSIX是利用给内核源代码加补丁的办法,增加内核的功能来达到内核级的集群支持,通过编译后的内核启动的系统间类似SMP多处理器的系统,从外面的角度看只有一台有很多处理器的庞大机器,但是内部是用很多机器架构成的。而MOSIX集群的特点是对用户透明,原有的应用程序不需要修改代码即可以在集群中分布计算。



有几种情况是不需要使用集群系统的,使用类似网格计算的脚本就可以完成计算,比如三维动画的渲染,这类计算可以使用不同的节点,不需要对称的硬件,不需要一致的操作系统(需要应用具有支持不同操作系统的版本),只需要按照处理器来分割渲染的任务段,在每个节点上运行相应的任务段,然后合成所有节点的计算结果。因为计算数据是离散的(结果的连续是视觉的连续),因此用类似网格计算的脚本也可以完成。这类计算不需要使用集群也可以完成。



下面本文将告诉你如何准备硬件和软机环境。首先是规划你的计算环境。



规划计算环境



硬件环境:



1.49U标准机柜,安装1U的交换机,24台2U机架式机箱。



2.1U的24口100MB交换机(不是集线器)



3.Intel P4 2GHz CPU,1GB DDR,Intel 845D主板,软驱,NVIDIA显卡(能启动X Windows就可以),2U机架式机箱,3C905B 10/100MB自适应网卡,网关需要配置光驱,80GB硬盘和双网卡。



4.5类线,按照693A压3米网线24根。



5.显示器,键盘,鼠标仅在安装时使用。



软件环境和必要的安装包(除特殊说明外,高版本不一定适用):



1.Redhat 7.2 CD1 和CD2安装光盘 www.redhat.com



2.dhcp-3.0.1rc9-1.i386.rpm是支持启动内核调用的DHCP版本www.redhat.com



3.dhcpcd-1.3.22pl1-7.i386.rpm是DHCPD守护进程www.redhat.com



4.mknbi-1.2-6.noarch.rpm是制作客户端启动内核的必要软件包www.redhat.com



5.MOSIX-1.6.0.tar.gz是原始的MOSIX文件,最新的版本是1.7.0 www.mosix.com



6.MOSKRN-1.6.0.tar.gz是原始MOSIX内核文件,最新的版本是1.7.0 www.moxis.com



7.openmosix-kernel-2.4.18-openmosix2.i386.rpm是MOSIX分支版本的通用内核,最新的版本是2.4.19 www.openmosix.org



8.openmosix-kernel-2.4.18-openmosix2.i686.rpm是MOSIX分支版本的新处理器内核,最新的版本是2.4.19 www.openmosix.org



9.openmosix-kernel-smp-2.4.18-openmosix2.i686.rpm是MOSIX分支版本的多处理器内核,最新的版本是2.4.19 www.openmosix.org



10.openmosix-kernel-2.4.18-openmosix2.src.rpm是MOSIX分支版本的源代码www.openmosix.org



11.openmosix-tools-0.2.2-1.i386.rpm是MOSIX分支版本的客户端工具www.openmosix.org



12.ltsp_core-3.0-11.i386.rpm是LTSP的核心文件www.ltsp.org



13.ltsp_kernel-3.0-3.i386.rpm是LTSP的内核www.ltsp.org



14.ltsp_floppyd-3.0.0-2.i386.rpm是LTSP的软盘工具www.ltsp.org



15.ltsp_initrd_kit-3.0.1-i386.tgz是LTSP的启动制作工具www.ltsp.org



16.linux_kernel-2.4.18.tar.gz是需要编译的内核源码www.kernel.org



网络配置环境:



1. 网关对外网卡配置10.193.15.169,子网掩码255.255.255.0给内部网使用,用于登录和提交进程。



2. 网关对内网卡配置192.168.0.254,子网掩码255.255.255.0,网关为10.193.15.169给集群用于DHCP服务器,NFS服务器,LTSP服务器。



3. 网关对内网卡配置DHCP,分配地址从192.168.0.100到192.168.0.253,子网掩码255.255.255.0,都是C类。



当以上条件都具备时,可以开始架构MOSIX集群。



1. 安装所有硬件,并能确保可以从光盘启动网关服务器系统,节点可以使用软盘启动,检查BIOS的启动设置,并确认可以正确启动。将所有节点和交换机安装到机柜上,用网线连接交换机和各节点,网关需要额外的网线连接到局域网,因为可以称集群计算环境为计算场(Computing Farm),因此对应局域网称集群系统的网络为计算网络。连接好电源后,使用两套显示器和键盘鼠标,分别连接一台节点机和网关服务器。



安装RedHat 7.2版本在具有两块网卡的网关服务器上,分区使用自动分区(比较简单,本文不讨论Linux其他问题),选择定制安装,但不要安装所有的软件包,除缺省的选择外,需要额外选择软件开发和内核开发两组软件包,安装时没有选择的软件包,可以在系统正常启动后参考"如何编译内核"中的软件包来安装。安装到网络配置时,按照网络环境配置IP地址,需要配置DNS的需要修改对外网卡的设置,使用小写mosix为主机名。安装完后需要验证网关服务器可以正常启动,按照个人喜好来设定系统,推荐使用文本模式,图形模式资源消耗较大。另外需要连接到RedHat网站升级有缺陷的软件包,减少系统漏洞,注意别把内核也升级了,并不是因为本文的操作,而是内核升级后,系统很可能启动失败,本文将自己编译内核。升级完成后重启,再次确认系统没有任何错误。



3. 安装MOSIX包(openmosix的安装是另外的分支)需要很多步骤,注意操作步骤的准确性:



A,将所有下载的软件包上载到服务器的/usr/src/tmp目录下,确认下载的软件包是完整的,确认md5的校验结果一致:



su -cd /usr/src/makdir tmpmd5 package_file_name





B,将RedHat 7.2 CD2放入到光驱。参考以下操作确认编译内核需要的软件包已经存在:



mount /dev/cdrom /mnt/cdromcd /mnt/redhat/RPMrpm -Uvh kernel-headers*rpm -Uvh

kernel-source*rpm -Uvh kernel-doc*rpm -Uvh dev86*rpm -Uvh make-*rpm -Uvh

glibc-devel*rpm -Uvh cpp*rpm -Uvh ncurses-devel*rpm -Uvh binutils*rpm -Uvh gcc-2*rpm

-Uvh tftp*cd /usr/srcumount /mnt/cdrom





C,安装需要的软件包,展开所有的tar.gz软件包:



tar xvfz MOSIX-1.6.0.tar.gz tar xvfz MOSKRN-1.6.0.tar.gz tar xvfz

linux-2.4.18.tar.gz





D,如果展开文件没有错误,将各个软件展开目录移到正确的位置:



mv MOSIX-1.6.0 /usr/src/mv MOSKRN-1.6.0 /usr/src/ mv linux /usr/src/linux-2.4.18





chmod goa+x /usr/src/MOSIX-1.6.0/inst/add_kernel_to_grub mkdir /usr/local/man





F,下面才是真正有趣和让人着迷的步骤,首先要创建编译内核配置文件的目录,这是个好习惯,因为每次的编 cd /usr/src mkdir config.backupcd /usr/src/linux-2.4.7-10/configscp

kernel-2.4.7-i686.config /usr/src/config.backup/kernel-2.4.18.config





cd /usr/src/cp config.backup/kernel-2.4.18.config linux-2.4.18/.config





H,根据你的情况修改Makefiles的EXTRAVERSION部分,原值为18,可改为mosix来标明编译后的内核版本, cd /usr/src/linux-2.4.18vi MakefileEXTRAVERSION = 18





cd /usr/src/MOSIX-1.6.0./mosix.install





J,安装开始后会有一些问题,除新内核加入LILO或GRUB一问回答为G以外的问题都用回车使用缺省选择(大写的字母为缺省值)。问题依次为内核源代码的路径,新内核的启动选项添加在那个启动程序中,内核所包含的库文件连接,MOSIX服务的启动级别,创建MFS装载目录,启动那种内核编译配置菜单,是否显示内核编译详细过程,是否显示用户级编译详细过程。随后系统开始给内核源代码加补丁,启动内核编译配置菜单。



K,在内核编译配置菜单中,你可以看到新增加的MOSIX选项。



L,选择进入MOSIX选项并添加直接文件系统访问 (Direct File-System Access) 和MOSIX文件系统 (MOSIX File-System)。用ESC键推出当前选单。



M,添加块设备 (Block devices) 的内存虚拟盘的支持 (RAM disk support) 和使用初始化进程初始化内存虚拟盘 (Initial RAM disk (initrd) support)两项。



N,在网络选项 (Networking options) 中增加对IP内核级自动配置 (IP: kernel level autoconfiguration),IP动态地址支持 (IP: DHCP support),IP启动地址绑定支持 (IP: BOOTP support)。



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



P,在网络文件系统 (Network File System) 中增加NFS支持根文件系统(Root file system on NFS)。



Q,最后多按一次ESC键,提示保存配置文件,选择Yes。系统将开始编译内核,编译模块,安装内核,安装模块。该过程可能会产生一些警告,只要编译没退出,并正常完成回到提示符状态就完成了编译。



R,先不要忙于重启,需要修改/boot/grub/grub.conf文件中MOSIX的内核路径一行,原路径为/boot/vmlinuz-2.4.18-mosix,修改为/vmlinuz-2.4.18-mosix。修改完后键入reboot可以重新启动。



S,这时的启动菜单中出现Mosix 1.6.0 (2.4.18),选择该项启动MOSIX系统。



T,系统启动中会出现若干错误,图中第一个是由于没有创建/mfs引起的,第二个是由于MOSIX更改了sshd服务的权限,而没启动另外的MOSIX的sshd引起的。第一次启动MOSIX系统,会要求配置mosix.map文件,回车选择缺省的编辑器进入编辑。



U,配置文件修改完成后,系统会提示节点的IP地址有变化时需要修改mosix.map文件中的节点号。因为网关服务器是192.168.0.254因此定义为节点1,其他的节点从192.168.0.1开始共有253个节点,节点号从2开始。



V,进入系统后,启动MOSIX,显示初始化MOSIX,MOSIX配置完成。



service mosix start



4. 因为MOSIX有另外的分支openmosix,因为版权问题不同(后面将会介绍),openmosix更开放一些,而且openmosix的安装相对简单,推荐没有经验的初学者使用,下面是openmosix的安装和基于openmosix的客户端配置。注意:MOSIX和openmosix虽然都是MOSIX原理下的软件,但是互相是不能通讯的,因此一个集群系统里要统一使用一种平台。openmosix是使用rpm为安装包的,事实上只是把编译好的内核直接挂接到系统里,并没有经过你自己的编译,对于初学者而言要方便许多。以下操作是在刚安装完RedHat Linux 7.2的系统上完成的,除openmosix的软件包外,不需要其他任何的软件包,缺省目录在/usr/src/下。可根据情况安装SMP版本,openmosix-kernel-2.4.18-openmosix2.i386.rpm版本适合于所有X86体系的处理器,openmosix-kernel-2.4.18-openmosix2.i686.rpm版本适合本例,openmosix-kernel-2.4.18-openmosix2.src.rpm是包含kernel-2.4.18和openmosix内核补丁的源代码。当安装完成后启动时就可以看到openmosix的启动项。



cd /usr/src/rpm -Uvh openmosix-kernel-2.4.18-openmosix2.i686.rpmrpm -Uvh

openmosix-kernel-2.4.18-openmosix2.src.rpmrpm -Uvh openmosix-tools-0.2.2-1.i386.rpm





rpm -Uvh dhcp-3.0.1rc9-1.i386.rpmrpm -Uvh dhcpcd-1.3.22pl1-7.i386.rpmrpm -Uvh

mknbi-1.2-6.noarch.rpmrpm -Uvh ltsp_core-3.0-11.i386.rpm rpm -Uvh

ltsp_kernel-3.0-3.i386.rpm rpm -Uvh ltsp_floppyd-3.0.0-2.i386.rpm rpm -Uvh

ltsp_initrd_kit-3.0.1-i386.tgz mv ltsp_initrd_kit /usr/src/





6. 因为使用的是openmosix,你需要单独展开的linux-2.4.18.tar.gz文件和openmosix的补丁文件,需要将openmosix的补丁加入,你在安装openmosix-kernel-2.4.18-openmosix2.src.rpm时,源文件会存在于/usr/src/redhat/SOURCES/目录下,同时还有内核补丁文件。



cd /usr/src/redhat/SOURCES/tar xvfz linux-2.4.18.tar.gzmv

/usr/src/redhat/SOURCES/linux /usr/src/linux-2.4.18-om2





7. 将内核补丁文件展开并加入内核源文件,并作编译前准备,将旧的内核编译中间结果清理干净:



cp /usr/src/redhat/SOURCE/openMosix-2.4.18-2.gz /usr/src/linux-2.4.18-om2/gunzip

/usr/src/linux-2.4.18-om2/openMosix-2.4.18-2.gzcd /usr/src/linux-2.4.18-om2patch

-Np1 < openMosix-2.4.18-2make mrproper





vi MakefileEXTRAVERSION = -om2





cp /opt/ltsp/kernel-configs/config.2.4.9-ltsp-5 /usr/src/config.backup/cp

/opt/ltsp/kernel-configs/config.2.4.9-ltsp-5 /usr/src/linux-2.4.18-om2/.config





10. 启动内核编译配置菜单,注意选择openmosix选项中的进程迁移(process migration support),直接文件系统访问( Direct File-System Access),openmosix文件系统(OpenMosix File-System),注意不要选择内核调试(Kernel Debugger)。其他的配置根据具体需要,没有SCSI硬盘可以去掉SCSI选项,不需要声卡,也可以去掉。



make menuconfig





11. 编译内核一般分为编译库(make dep),编译启动映象(make bzImage),编译模块(make modules) 和安装模块(make modules_install)。系统可以连续完成几步操作:



make dep && make bzImage && make modules && make modules_install





12. 如果系统没有提示错误并中止,将会显示新的内核映象的大小,模块编译完成并安装等信息。编译完成的内核将作为客户端的内核系统,因此需要将模块复制到LTSP的目录下:



cp -R /lib/modules/2.4.18-om2 /opt/ltsp/i386/lib/modules/





13. 完成后将创建符合无盘启动的系统,使用LTSP的初始化工具就可以完成,进入/usr/src/ltsp_initrd_kit目 cd /usr/src/ltsp_initrd_kit/vi buildk# prepare_kernel /usr/src/linux-2.4.9-ltsp

2.4.9-ltsp-5# prepare_kernel /usr/src/linux-2.4.9-ltsp-lpp 2.4.9-ltsp-lpp-5

lppprepare_kernel /usr/src/linux-2.4.18-om2 2.4.18-om2





14. 修改完后运行buildk将会在/tftpboot/lts/下创建新的内核启动文件。



./buildk





15. cd /tftpboot/ltsp/ln -s vmlinuz-2.4.18-om2 vmlinuz-openmosix





16. 修改/etc/dhcpd.conf文件,使动态地址分配支持新的启动内核。修改内核启动文件的名称和路径,如果该文 cd /etc/vi dhcpd.conffilename "/lts/vmlinuz-openmosix";





17. 随后你可以添加自动分配主机名,这样每台客户机启动时自动生成主机名,注意主机名要和你的hosts文件对应 vi dhcpd.conffilename "/lts/vmlinuz-openmosix"; option host-name = concat("node" ,

binary-to-ascii( 10, 8, "", substring(reverse( 1, leased-address), 0, 1)));





chkconfig tftp onchkconfig dhcpd onservice dhcpd restartservice xinetd restart





cd /etc/vi mosix.map1 192.168.0.254 12 192.168.0.1 253cp /etc/mosix.map

/opt/ltsp/i386/etc/





20. 复制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/





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



cp /bin/touch /opt/ltsp/i386/binrm -f /opt/ltsp/i386/etc/hostscp /etc/hosts

/opt/ltsp/i386/etc/cp /etc/rc.d/init.d/openmosix /opt/ltsp/i386/etc/rc.openmosix





mkdir /opt/ltsp/i386/mfs





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



cd /opt/ltsp/i386/etcvi fstabnone /mfs mfs dfsa = 1 0 0





24. 修改客户端启动进程脚本,加入启动openmosix的配置,禁止客户端提交集群计算的设置,和装载/mfs文件系统的配置。



vi /opt/ltsp/i386/etc/rc.local# OpenMosix startup section# we don't want any

terminal processes to migrateecho 1 > /proc/mosix/admin/lstay# start

mosix/etc/rc.openmosix start# mount mfs filesystem. doesn't work when done

earliermount /mfs# End OpenMosix Startup Section





25. 配置完成后准备软盘制作以太启网启动盘。访问www.Rom-O-matic.net网站,选择网卡类型生成以太网启动芯片的映象,保存到Linux上,使用cat生成启动软盘。本例中使用3C905B。放入一张空白三吋软盘。



cat eb-5[1].0.7-3c905b-tpo100.lzdsk > /dev/fd0





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



27. 确认/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)





28. 将以太启动软盘放入客户端,开机并确认正常启动,正常获得动态地址,加载内核成功,初始化脚本正常运行,主机名自动生成,openmosix正常初始化,没有任何错误提示。



29. 回到服务器,通过检查/mfs文件系统来检查mfs文件系统。



30. 启动mosmon监控程序来检查通讯是否有效,这是刚加入3个节点时,启动setiathome计算的状态。将下载的应用展开在/dw目录下,注意命令的格式。



mosrun -j1-3 /mfs/1/dw/setiathome1 -nolock





31. 制作启动盘,陆续加入节点,MOSIX集群就创建完了。



典型的配置文件



/etc/mosix.map

1 192.168.0.254 1

2 192.168.0.1 253

/etc/dhcpd.conf

default-lease-time 21600;

max-lease-time 21600;

ddns-update-style none;

allow booting;

allow bootp;

option subnet-mask 255.255.255.0;

option broadcast-address 192.168.0.255;

option routers 192.168.0.254;

option domain-name-servers 192.168.0.254;

option domain-name "mosix";

option root-path "192.168.0.254:/opt/ltsp/i386";

shared-network NODES {

subnet 192.168.0.0 netmask 255.255.255.0 {

range dynamic-bootp 192.168.0.100 192.168.0.253;

use-host-decl-names on;

option log-servers 192.168.0.254;

if substring (option vendor-class-identifier, 0, 9) = "PXEClient"

{

filename "/lts/pxe/pxelinux.bin";

}

else

{

filename "/lts/vmlinuz-2.4.18-mosix";

option host-name = concat("node" , binary-to-ascii( 10, 8, "",

substring(reverse( 1, leased-address), 0, 1)));

}

}

}

group {

use-host-decl-names on;

option log-servers 192.168.0.254;



host node001 {

hardware ethernet 00:E0:06:E8:00:84;

fixed-address 192.168.0.1;

filename "/lts/boot/bootp/vmlinuz.eepro100.bootp";

}

host node002 {

hardware ethernet 000:09:30:6A:1C;

fixed-address 192.168.0.2;

filename "/lts/boot/bootp/vmlinuz.tulip.bootp";

}

host node003 {

hardware ethernet 000:09:30:28:B2;

fixed-address 192.168.0.3;

# kernels are specified in /tftpboot/lts/boot/pxe/pxelinux.cfg/

filename "/lts/boot/pxe/pxelinux.bin";

}

}



/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/hosts 和 /opt/ltsp/i386/etc/hosts

192.168.0.254 mosix

192.168.0.1 node001

192.168.0.2 node002

192.168.0.3 node003

192.168.0.4 node004

省略一部分

192.168.0.253 node253

127.0.0.1 localhost.localdomain localhost



/opt/ltsp/i386/etc/fstab

none /mfs mfs dfsa=1 0 0



/opt/ltsp/i386/etc/lts.conf

[Default]

SERVER = 192.168.0.254

XSERVER = off

X_MOUSE_PROTOCOL = "PS/2"

X_MOUSE_DEVICE = "/dev/psaux"

X_MOUSE_RESOLUTION = 400

X_MOUSE_BUTTONS = 3

X_USBMOUSE_PROTOCOL= "PS/2"

X_USBMOUSE_DEVICE = "/dev/input/mice"

X_USBMOUSE_RESOLUTION = 400

X_USBMOUSE_BUTTONS = 3

USE_XFS = N

LOCAL_APPS = N

RUNLEVEL = 3

SOUND = Y

VOLUME = 75



常见问题和解决方法



内核编译失败怎么办?



编译内核是MOSIX集群的最大操作,对于没有编译过内核的人会遇到很多编译失败的问题。对于经常出现的问题和解决办法如下:



编译失败在SCSI设备时,如果没有SCSI设备,在编译配置菜单中除去SCSI选项。



编译失败在SiS芯片时,如果没使用SiS芯片组的主板,在编译菜单中除去SiS芯片支持选项。



更改编译文件后仍然编译失败时,注意将上一次编译的中间文件清理干净,使用如下命令(不要忘记备份.config文件):



cd /usr/src/linux-2.4.18-om2cp .config

/usr/src/config.backup/config-newkernelmake mrproper





DHCP为什么不能正确读取配置文件?



确认你的DHCP版本要3.0.1以上,可以到RedHat的网站上下载。另外检查/etc/dhcpd.conf文件配置是否有错误,可以参考本例的文件。



配置完启动时出现sshd加载失败时怎么办?



该情况出现在MOSIX修改sshd的属性后出现,你可以加载MOSIX的ssd守护进程,操作如下:



chkconfig sshd.pre-mosix onservice sshd.pre-mosix start





首次启动MOSIX时提示Host name lookup failure是什么原因?



这是由于/etc/hosts文件没有正确标出主机名对应的地址造成的,修改/etc/hosts文件正确就可以。



首次启动MOSIX时提示以下错误是什么原因?



setpe: the supplied table is well-formatted,

but my IP address (127.0.0.1) is not there!





这是由于RedHat Linux 的host文件缺省只有127.0.0.1对应主机名,可以将/etc/hosts文件中的127.0.0.1 mosix localhost分开描述:



vi /etc/hosts192.168.0.254 mosix127.0.0.1 localhost



制作LTSP启动内核映象失败



注意使用的LTSP初始化工具是ltsp_initrd_kit-3.0.1-i386.tgz版本,其他的版本因为修改了初始化脚本,目前没有方法可以初始化成功。



另外制作启动内核映象时必须有mknbi-1.2-6.noarch.rpm包,从RedHat的网站上可以下载最新的版本。



配置ltsp客户端DHCP启动失败



检查/etc/dhcpd.conf文件指向的启动内核路径正确,确认物理连接正确,确认软盘未损坏,确认LTSP内核启动文件正常编译。确认安装并启动了tftp守护进程,确认/etc/exports文件共享了正确的客户端根文件系统路径。



配置ltsp客户端启动X Windows失败



如果需要在客户端启动X Windows,需要安装LTSP的X包,并根据显示卡的不同安装不同的X服务器版本。



rpm -Uvh ltsp_x_core-3.0.1-1.i386.rpmrpm -Uvh ltsp_x_fonts-3.0.0-0.i386.rpm






如果并不需要启动X Windws,需要修改/opt/ltsp/i386/etc/lts.conf文件中X_USBMOUSE_BUTTONS = 3即可启动文本界面。



LTSP客户端启动后找不到主机名或不能解析主机名



确认/opt/ltsp/i386/hosts文件不是符号连接,并且和/etc/hosts文件一致,确认/etc/dhcpd.conf文件中加入自动生成主机名配置,确认生成的主机名与hosts文件中的一致。



LTSP客户端启动后不能启动mosix



确认/etc/mosix.map和/opt/ltsp/i386/etc/mosix.map文件一致。



启动mosix后没找到mfs目录



手动创建/mfs目录:



mkdir /mfsmkdir /opt/ltsp/i386/mfs





背景资料:



·相关名词



SMP:对称多处理器



LTSP:Linux终端服务器项目 (Linux Terminal Server Project)



Kernel:内核



Ramdisk:内存虚拟盘



Etherboot:以太启动



Bootrom:网卡启动芯片



·大型主机(Mainframes),超级计算机(Supercomputers)和集群(Clusters)



纵观计算机的历史,最先让人了解的就是大型主机和超级计算机,这是计算机历史的一部分,没有这些大家伙,就没有今天的个人电脑。这些大家伙通常是一个或几个有强大研发队伍和资金的厂商完成,最初的目的是军方或*的需要,很多大学的研发也促成了这些大家伙更强大。一般情况下,大型主机和超级计算机都使用超过8个,多达上百个的CPU和自己的专用操作系统,计算机历史上很多的重要成员都和这些大家伙有关,IBM,DEC,Cray,SGI,HAL。大型主机已经成为历史,而超级计算机成了各国技术实力的争夺焦点,但是目前个人电脑的发展使集群成为竞争超级计算机的强大对手,集群的CPU数和浮点能力和超级计算机的差距已经越来越近。



·Cluster



集群系统,也有成为机群和群集系统的。集群主要分为三类:容错集群(Fail-over Cluster),负载均衡集群(Load balancing Cluster),高性能计算集群(High Performance Computing)。



容错集群是指两台主机通过两个或两个以上网路连接的系统,其中一个连接称为心跳线(heartbeat),利用每台主机上的服务进程监控对方主机的状态,一旦发现对方主机宕机或出现不能正常工作的情况,心跳线会反映给互为备份的另外一台主机,该主机则会接替出问题的主机。典型的使用场景是空军的雷达追踪系统。



负载均衡集群一般用于相应网络请求的网页服务器,代理服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。



高性能计算集群是指具有响应大量计算的性能,可以作为数据中心使用的计算机的集合。比如压缩mp3,气象云图的分析等。



·集群模式



(N)UMA非一致性内存访问(Non-)Uniform Memory Access一般是指通过执行特殊的程序代码对内存的共享访问。在Linux内核中,可以执行对访问时间内的不同内存区域进行交叉访问,也就是内核进程可以使用接近CPU使用时的内存。对正在使用内存区域的访问,才可以共享。线性的内存访问是无法共享的。



PVM/MPI是指并行虚拟机(Parallel Virrual Machine)和信息传递界面(Message Passing Interface)。在Beowulf的世界里最常提到的就是这两个概念,该软件包已经提供了多平台的版本。通过开放式的标准信息传递库,并行机之间可以通讯,事实上PVM也是一组库,程序可以使用这些编译库来改造程序适应并行系统。但是这些都要相应的修改源程序,系统内核事实上并没有发生改变。



其他模式:Turbo Linux EnFuzion,Platform等网格计算(Grid Computing)不必讨论这类集群不是单纯意义的集群,以Enfuzion为例,EnFuzion是Turbo Linux收购的一个软件改良版(前身就叫Cluster),因为使用了Java,可以跨平台,使用驻留系统服务来监控集群间的通讯,事实上是任务分发和监控器,依赖于计算数据离散性,对于数据不可分的程序,无能为力。也就是说每个节点都运行相同的程序,但处理的数据是不同的,该集群提供了控制这些程序的界面,跨平台性也只是依赖于计算的应用有跨平台版本,而其只提供跨平台的监控。主要集中在CPU空闲的监控和计算的再分配。



·数据可分和程序可分



集群计算中最重要的就是分布,根据不同的应用,分为两种:数据可分和程序可分。



数据可分是指数据间没有必然联系或联系在结果的基础上,比如mp3的压缩,每个单独的mp3互不关联,或者有限元计算的某个步骤,单一的曲面计算生成结果再参加后面的关联计算,更著名的是SETI@home通过分析射电望远镜的信号寻找外星人,这是典型的将中间分析结果传递给下一部分析,这就是数据可分,这最适合网格计算。



程序可分,用过ANSYS的人都知道商业软件分为单处理器和多处理器版本,因为计算量大,所以支持SMP的计算软件和使用单一CPU的软件是不同的,多CPU共同运算时也要考虑到内存的访问,处理通讯和负载均衡,除非操作系统支持,不然使用DOS和Windows9x很难用到第二个CPU(甚至不可见),有了操作系统的支持,应用程序也要支持,即使操作系统支持并行,应用程序不可分的话,只能使用1/n(n=CPU数量)的处理能力,典型的例子就是2CPU的WindowsNT/2000下使用单处理器版本的ANSYS,处理器进程显示50%,但是2CPU共同生效。而使用多处理器版本时,2CPU都可以在98%的使用率。因此程序可分是集群重要的应用基础,即使程序本身不可分,而集群支持子进程的迁移,也意味着类似SMP系统支持程序可分。



·SETI@home



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



波多黎各一个火山口中的Arecibo射电望远镜



记得那个著名的007镜头吗?



相关连接:












波多黎各Arecibo射电望远镜:http://www.naic.edu/



·需要强大计算的应用



财务与社会行为分析,使用数学模型模拟的计算。



音乐,图象等多媒体数据处理,例如mp3压缩,动画渲染,后期处理。



流体力学,有限元分析,例如乐高玩具的数字模拟强度分析。



编译,数据库挖掘。



医学研究,例如AIDS和DNA的结构分析,成功运作的有UD(United Devices http://www.ud.com/home.htm)



天文研究,例如SETI@home,在家寻找外星人项目(http://setiathome.ssl.berkeley.edu/index.html)。天气和海浪预报。



电子电路数字模拟分析,例如研发新的处理器。



穷举解密,例如破解DES密码(http://www.distributed.net/index.html.en)。



·正在研发的分布式计算系统



Beowulf



是目前开放源码世界中最大的高性能计算项目,该项目就在探寻能适应于不同需要,不同处理速度的计算组合。但是这个项目并不是指单一的某个软件包或者一种技术,而是整个研发方向的综合。你可以在该项目中寻找适合你的技术和软件,还有很多项目成员并未找出通用的方法,而是将已经在使用的专门系统公开到Beowulf项目中,让大家参考。其中有用于分布式编译,数据采集,还有多媒体处理等很多领域。



Beowulf的标志



相关连接:www.beowulf.org



Plan 9



1993年源于贝尔实验室(Computing Sciences Research Center of Bell Laboratories) 开发的新分布式操作系统,建立在Unix和C与C++基础上,支持的处理器有Intel x86, Sparc, Alpha, Power PC, 和ARM。目前没有象KDE漂亮的图形界面,使用上接近UNIX,标准UNIX工具也可以使用,但是从设计原理和基础上不同于UNIX,核心已经完全重写并设计成网络操作系统,就像设计完UNIX后的补充,其中设计元素包括用户端的终端,存储固定文件的服务器和提供更快CPU的计算服务器,提供用户验证和网关特性。



目前吸引人的焦点是Plan 9的文件系统可以支持所有的系统服务进程,也就是说所有任何用户可以使用的资源在文件系统中都可以找到唯一的命名,已经可以称为命名空间了。通过网络层的协议9P来访问所有的资源,这一点类似NFS,但不同之处是对用户不透明。支持异构的网络:以太网,光纤和普通调制解调器,还有ISDN的连接。



较早的Plan 9更像文件系统,现在的系统支持更多的用户并发。标准情况下,用户可以运行任意的从他们的终端上或CPU服务器上启动应用,应用将会从文件服务器上获取数据,并且可以小到在笔记本上运行。因为具备了高可配置性,因此摆脱了客户机服务器体系的中心控制模式。



Plan 9的吉祥物,不同于Linux的企鹅,是兔子,兔子宇航员






其他的网格计算



http://www.gridcomputingplanet.com/ 网格计算的信息站点



http://wwws.sun.com/software/gridware/ SUN的网格计算软件



http://www.turbolinux.com/enfuzion TurboLinux的EnFuzion



·如何编译内核



首先你的手中要有一个Linux的分发版本,RedHat是个不错的选择,为了具有普遍性,下面的操作是在RedHat 7.2的基础上完成的。



当你安装完Linux后,你需要确认下列的rpm包已经存在(*是指不同的版本),你可以使用rpm -Uvh来安装(绝大多数文件在CD2中) :



mount /dev/cdrom /mnt/cdromcd /mnt/redhat/RPMrpm -Uvh kernel-headers*rpm -Uvh

kernel-source*rpm -Uvh kernel-doc*rpm -Uvh dev86*rpm -Uvh make-*rpm -Uvh

glibc-devel*rpm -Uvh cpp*rpm -Uvh ncurses-devel*rpm -Uvh binutils*rpm -Uvh gcc-2*cd

/usr/srcumount /mnt/cdrom





如果你从www.kernel.org上下载了Linux稳定的内核2.4.18,可以将他解开并移到/usr/src目录下:



tar xvfz linux-2.4.18.tar.gzmv linux /usr/src/linux-2.4.18





你可以修改Makefile文件来改变编译的内核名称,RedHat 7.2的内核版本是2.4.7.10,首先要清理编译的过程文件,将当前版本内核配置文件作为新编译内核版本的配置使用,编译中的错误输出到指定文件



cd /usr/src/linux-2.4.18make mrpropercp -p

/usr/src/linux-2.4/config/kernel-*-i686.config .configmake oldconfigmake depmake

bzImage 2 > errorsmake modules 2 > mod-errorscp -p arch/i386/boot/bzImage

/boot/vmlinuz-2.4.18cp -p System.map /boot/System.map-2.4.18make modules_install





编译内核的初始化文件:



new-kernel-pkg -install -mkinitrd -depmod 2.4.18mkdir /mnt/initrdgzip -dc

/boot/initrd-2.4.8.img > /tmp/initrd.imgmount -o loop /tmp/initrd.img /mnt/initrdls

-R /mnt/initrdumount /mnt/initrd





修改GRUB的启动配置(/boot/grub/grub.conf)文件,加入新编译内核的条目:



vi /boot/grub/grub.conftitle Red Hat Linux (2.4.18)

root (hd0,0)

kernel /vmlinuz-2.4.18 ro root=/dev/hda2





下次启动时就可以选择了。






动态创建以太网启动映象。目前的版本是5.0.7。使用的原理就是用软盘启动来模拟网卡的启动芯片。主页是交互式的,通过下拉菜单,可以选择网卡的类型和映象类型。在配置菜单中还可以设置支持的启动类型和其他的参数,最后点击Get ROM将提示保存映象文件。把保存的结果传到Linux上,使用cat命令将映象文件创建以太启动软盘。



·LTSP的启动过程



LTSP的启动过程需要很多步骤,了解这些步骤可以很好排除出现的问题:



以下的例子硬件环境是



客户端DELL Gx1 PII 350MB 128MB 3C905B ATI rage128



服务器端运行RedHat 7.2和DHCP服务



网络地址范围192.168.0.0网段,子网掩码是255.255.255.0



1.客户端开机自检



2.在开机自检的过程中,BIOS将检测扩展的芯片,也就是网卡上增加的用于以太网启动的启动芯片(bootrom),BIOS可以检测到网卡上的启动芯片。



3.一旦开机自检完成,执行步骤将到以太启动代码。



4.以太启动代码检测网卡类型,当检测正确时,初始化网卡。



5.以太启动代码将在本地网段中发申请DHCP的广播,网卡的MAC地址将包括在该广播中。



6.服务器端的DHCPD守护进程将收到来自客户端的广播申请,检查配置文件中与接受到客户端MAC地址相匹配的参数。



7.DHCPD守护进程发送回复的数据包,该数据包中包括:该客户端的IP地址,本网段的子网掩码,下载内核的路径,需要装载的根文件系统的路径,传递内核命令行执行的参数。



8.以太启动代码将从服务器接受这些数据,随后开始按照提供的数据配置网卡的TCP/IP设置。



9.使用TFTP(Trivial File Transfer Protocol直接文件传输协议),以太启动代码可以从服务器上下载内核。



10.一旦内核下载到客户端完成,以太启动代码将把内核放到内存正确的位置。



11.完成必要步骤之后,控制权交到内核控制,内核将开始初始化整个系统和全部的可识别外围设备。



12.下面才是真正的开始。因为内核是文件系统的镜像,需要象调入内存的虚拟盘中,并作为根文件系统临时装载到系统中。用内核命令行表示root=/dev/ram0引导内核镜像作为根文件系统装载。



13.正常情况下,内核完成启动过程后,将启动init进程。需要指明内核如何调入shell脚本,用init=/linuxrc命令行表示。



14./linuxrc脚本将扫描PCI总线,搜索网卡等。每种类型的PCI驱动都会在/etc/niclist中寻找匹配的参数。一旦发现匹配的,该网卡类型的模块将返回给内核用来加载。对于ISA接口的卡,驱动模块必须被内核以命令行方式加载,并且需要特别指定中断和占用的地址。



15.一旦网卡被识别,/linuxrc脚本将加载前面返回的内核模块。



16.dhclient将随后运行来从DHCP服务器来的确认请求。这里需要特别区分确认的类型,从以太启动得到的确认将被内核取消,内核将忽略任何曾经特殊指定过根路径的NFS(网络文件系统)服务器。如果你的NFS服务器和TFTP服务器不是同一台时,这一点非常重要。也就是说这是系统不再依赖TFTP服务器而是开始使用NFS服务器来装载文件系统了。



17.当dhclient从服务器得到回应,将开始运行/etc/dhclient-script文件,它将重新收集系统信息,配置eth0网卡。



18.从上面的几点,根文件系统实际是在内存虚拟盘里的。现在/linuxrc脚本将通过NFS装载新的根文件系统,这个目录就是在服务器上共享的/opt/ltsp/i386目录。它将被装载成新的根文件系统。首先它要被装载到/mnt目录下,随后将作一次根对称 (pivot_root),也就是把当前的根文件系统和新文件系统交换,一旦完成,NFS文件系统将装载到根,而旧的根文件系统将会装载到/oldroot目录下。



19. 当装载和根对称完成,也就完成了/linuxrc脚本,这时才真正的开始init进程。



20. init将读取 /etc/inittab文件开始设定客户端环境。



21. init提供了运行级别(runlevel),客户端不同的服务进程运行在不同的运行级别上,LTSP客户端的运行级别就是2,这是系统缺省的运行级别。



22. 列在inittab中头一项的就是rc.local文件,该命令是运行于客户端的系统初始化状态(sysinit)。



23. rc.local脚本将创建1MB的内存虚拟盘,其中有在整个过程中随时需要写和修改的任何文件。



24. 内存虚拟盘将被装载到/tmp目录下。任何需要写的文件都会真实的存在/tmp目录下,然后创建相应的符号连接到正确的目录下。



25. 随后是/proc文件系统被装载。



26. 如果客户端配置为通过NFS作交换区(swap),/var/opt/ltsp/swapfiles目录将会被装载到/tmp/swapfiles下。反之,如果没有设置,交换区将被自动创建。交换区的大小设置在lts.conf文件中配置。



27. 交换文件通过swapon命令激活。自循环(loopback)网卡将被配置,设定IP地址为127.0.0.1。



28. 本地应用模式激活,随后/home目录将被装载,随后的应用将以用户的家目录起始访问。



29. 一系列的目录在/tmp文件系统下创建,用来提供给系统运行作临时过渡文件。这些目录包括:



/tmp/compiled a.

/tmp/var b.

/tmp/var/run c.

/tmp/var/log d.

/tmp/var/lock e.

/tmp/var/lock/subsys f.





30. 配置X Windows系统,在lts.conf文件中,参数(XSERVER)是不可缺少的,一般设定为auto自动,这意味着尝试自动检测。如果是PCI的设备,将尝试获取驱动厂商和驱动设备标识,并从/etc/vidlist文件中寻找匹配项。



31. 如果该卡支持Xfree86 4.x版本,PCI扫描程序将返回驱动模块的名称,如果仅支持Xfree86 3.3.6版本,PCI扫描程序将返回将要使用的X服务器的名称。rc.local脚本可以选择不同的版本使用,因为旧的3.3.6服务器是使用XF86_开头的。如果是Xfree86 4.x版本,/etc/rc.setupx脚本将创建XF86Config配置文件给4.x版本。反之,XFree86 3.3.6将由/etc/rc.setupx3脚本创建XF86Config配置文件。



32. XF86Config配置文件是基于/etc/lts.conf文件的,当rc.setupx脚本完成后,将返回给rc.local脚本,创建/tmp/start_ws脚本,该脚本是用来启动X服务器的。



33. 随后创建/tmp/syslog.conf文件。该文件将告知syslogd守护进程发送关于系统的日志信息到指定的日志机接收。日志主机定义在lts.conf文件中。事实上/etc/syslog.conf是/tmp/syslog.conf的符号连接。



34. 启动syslogd守护进程,配置文件在上一步骤已经创建。



35. 返回控制权给init进程,该进程将寻找初始缺省的运行级别。缺省的LTSP核心运行级别定义是2。



36. 缺省的运行级别是2将导致init设定运行级别set_runlevel脚本,该脚本将读取lts.conf文件并定义客户端实际运行的运行级别。客户端LTSP运行级别一般是3,4和5:



3 - 将启动shell,常使用在排错模式,本文中也是定义为3。



4 - 将会在字符模式启动一个或更多的telnet进程,这将有力的替换旧的串行终端。



5 - 图形用户界面,这是X Windows,并且发送XDMCP申请给服务器,随着登录对话框的出现,你就可以登录到服务器了。这种情况下,服务器需要启动显示管理器,例如XDM,GDM,或KDM。



相关连接:www.ltsp.org



· MOSIX和openMosix



MOSIX是指Multicomputer Operating System for UnIX,最早原自FEHAL,直到第6个原型还是为BSD/OS,第7个DATE_FEHAL原型开始为GNU/Linux平台开发。正如其他开放源码的程序一样,评估一个最有发展潜质的系统为未来的开发方向是个必然。Barak教授是原始MOSIX项目的领导者。MOSIX原理是利用给内核增加补丁的办法全面兼容Intel架构的32位处理器,支持内核级的负载均衡,可以将负载准确迁移到集群成员,系统会自动或手动的将负载优化的分担给各节点。这种准确的进程迁移使集群类似一个巨大的SMP系统,多个节点就象多个处理器,进而提供了一种不同于NFS的缓冲连接,时间标记连接,稳固连接的强大应用高性能计算组合。



MOSIX是用户端透明的(应用程序不需要因为集群而修改源代码)Linux集群系统解决方案,openMosix是MOSIX的新公开分支,出现该版本的原因是2001年底,MOISX项目决定不再遵循以前的GPL许可,转而到非GPL许可中。事实上,新版本的MOSIX代码已经排除了不限制许可的代码,并加入了所有版权保留(All rights reserved) 的限制。由于这个突然的变化,MOSIX新的发布版本不再是免费的版本,而且尚不清楚目前使用者的权限有什么变化。实际上,未来没有什么能阻挡MOSIX的作者对使用MOSIX的用户收取费用。



鉴于这个明显的原因,许可的变化使很多正在使用MOSIX的用户开始关注这个问题,这一切从MOSIX的邮件列表存档和代码从主页上删除开始,情况越来越恶化。非常幸运的是,有一些人并不仅仅象大众一样关注这种变化。Moshe Bar,MOSIX项目的核心经理,商业MOSIX公司的普通经理,他不同意改变原来的GPL许可,对变化的第一反应就是Moshe本人开始openMosix项目,并保MOSIX免费版本继续为公众服务。OpenMosix是遵循完整的GPL2许可。



在openMosix项目刚开始,至少350人的MOSIX用户切换到openMosix,openMosix建立在Amnon Bark的2002旧MOSIX版权基础上,未来的代码版权属于Moshe Bar,另外Moshe因为新颖更多的开放式研发风格提高了openMosix的研发速度,虽然受他所尊敬的Barak教授经过再三考虑没有加入openMosix,继续留在当时具有1000全球用户的Qlusters公司(即MOSIX转向商业后的公司),但是现在有14个人为openMosix项目研发,而MOSIX仅仅有4个人。在这种情况下,openMosix代码的很多问题被修复,性能得到提高。而且在增加很多新的特性的基础上,更广泛的,高性能的特性也在研发中,比如自动配置,新的用户端工具,节点探测。目前为适应标准化,将会把/proc/mosix文件修改为/proc/hpc,/etc/mosix.map修改为/etc/hpc.map。而且新版本Mosixview也开始支持openMosix。/etc/hpc.map是节点自探测的重要部分。OpenMosix项目的主页连接是www.openMosix.org,项目文件连接是http://openMosix.sourceforge.net



现在尘埃落定,openMosix和MOSIX的分裂已经平息,其结果使开放创新的得到发展,研发速度更快,更有活力。无论如何Linux的集群解决方案将继续发展。



· MFS, DFSA, mosrun, mosmon, migrate



MFS (Mosix File System) 是位于根目录下的mosix文件系统,当mosix启动后,系统自动将所有节点机的根文件系统加载到/mfs下。



DFSA( Direct File System Access),直接文件系统访问,正如MFS装载节点文件系统一样,直接访问节点文件系统是集群具有全局性的必要功能,这样节点间的访问是透明和无缝的,所有的节点访问路径是一致的。



Migrate是进程的迁移,当你启动mosix后,你会发现该进程已经自动的迁移到集群的另外一台机器上去了,每一个进程都有自己独立的源节点,称为UHN(unique home node)。能够迁移就意味着进程被切割成了两个部分,用户级和系统级。用户级的部分将可以迁移到远程节点中,而系统级的部分将留在自己的独立源节点(UHN)中,系统级部分也被称为代理进程,这个进程用来处理解析来自系统的调用。Mosix可以处理2个CPU的通讯,也就是说目前任意双节点间的通讯类似双CPU的SMP,该命令可以指定进程在任意节点间迁移,并可以设定负载均衡。



mosrun是使用mosix加载应用的命令,其中-j可以指定特殊的节点机运行程序。



mosmon是集群节点监视工具。



setpe 设置MOSIX的节点配置



· 如何架构超过254个节点的集群



问题的关键使网络节点,地址的限制使节点数限制在254个,但是通过修改/etc/mosix.map可以增加新的网关来增加新的地址段,也就是增加节点。作为网关的地址用ALIAS标记。这样理论可以增加到65535个节点。不要忘记修改/etc/hosts文件和保持客户端的配置文件一致。



1 192.168.0.254 12 192.168.0.1 12 192.168.1.1 ALIAS3 192.168.1.1 254



· 初始安装完系统推荐禁止的服务程序



使用chkconfig -list可以列出目前安装的服务进程,有很多可以停止。下面是一些缺省启动,但是可以在集群中禁止的服务:



pcmcia (用于笔记本的PCMCIA插卡)



kudzu (类似PnP的新硬件自检程序)



linuxconf (Linux配置工具)



atalk (Apple的通讯协议)



iscsi (SAN常用的在TCP/IP网络上加载SCSI通讯模式)



canna (语言转换引擎)



cWnn (简体中文输入)



kWnn (韩文输入)



tWnn (繁体中文输入)



FreeWnn (日文输入)



sendmail (邮件服务器进程)



· 如何规划你的网络和计算场



首先你要确定最终使用的节点数目,使用什么样的处理器,是单CPU还是SMP,内存的多少可以满足计算的要求,硬盘存储的增量是多少,计算是I/O密集型还是CPU密集型,是否需要磁盘阵列。其次是分析你的网络,网段是多少,是否有DNS服务器和静态的IP地址,网关和子网掩码是什么,如果是动态地址分配,DHCP服务器是什么,主机名是否有要求,交换机的类型是什么,跃点有几个,服务器系统的类型,服务器间使用的通讯协议是什么,是否是10MB和100MB混用的环境,连接ISP的连接是否有防火墙,网线的类别是否满足要求,压线的方式是否正确。最后是拓扑结构图,包括集群在内的网络拓扑图,便于检查拓扑结构和排错。



MOSIX集群主要有三种规划模式:单一池 (single pool) 是将所有可以利用的无盘节点,工作站和服务器都集中到一起。服务器池 (server pool) 是将所有服务器矩阵集中到一起集群。适应池 (adaptive pool) 是将集群节点按照时间段划分,动态的加入计算集群。



计算场的硬件可以参考:



因文章篇幅限制,很多集群的特点和实现方式不能例举,加之文章种种不足之处,希望能和爱好者与研究多年的专家共勉。



特别感谢Moshe Bar,James Jensen和clump/OS (pachyderm software)的开发者Jean-David Marrow,没有他们就没有开放的MOSIX,就没有热心快速回答我问题的专家。还感谢我的家人Grace和我的老板Andy Seah,没有他们,我也不能专心的研究技术,谢谢。最后感谢蓝潮志诚网络有限责任公司的杨波先生,因为他的协助,避免了我在硬件上耗费过多的时间,因为他的出色经验,保证了硬件的质量稳定,提供了全球性价比最高的集群系统。