|
来自billwang
正如你所看到的一样,你的机器在绝大多数时间是空闲的,如果你在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网站,选 ... 白三吋软盘。
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) = " XEClient"
{
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 = " S/2"
X_MOUSE_DEVICE = "/dev/psaux"
X_MOUSE_RESOLUTION = 400
X_MOUSE_BUTTONS = 3
X_USBMOUSE_PROTOCOL= " S/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
--------------------------------------------------------------------------------
明犯强汉者,虽远必诛。
bingo-dw
来自汉朝的魔法师
发帖: 209
积分: 61
于2002-10-31 10:47
--------------------------------------------------------------------------------
常见问题和解决方法
内核编译失败怎么办?
编译内核是MOSIX集群的最大操作,对于没有编译过内核的人会遇到很多编译失败的问题。对于经常出现的问题和解决办法如下:
编译失败在SCSI设备时,如果没有SCSI设备,在编译配置菜单中除去SCSI选项。
编译失败在SiS芯片时,如果没使用SiS芯片组的主板,在编译菜单中除去SiS芯片支持选项。
更改编译文件后仍然编译失败时,注意将上一次编译的中间文件清理干净,使用如下命令(不要忘记备份.config文件):
cd /usr/src/linux-2.4.18-om2cp .config
/usr/src/config.backup/config-newkernelmake mrproper |
|