计算机集群编译
1. 如何对局域网内的多台linux进行集群化管理
它非常适合用来快速配置一个集群中的所有运行相同服务和具备相同配置的计算机节点。现在有大量的开源管理工具,都可以实现这样的管理,比如dsh、SUSE Manager等。下面是用ClusterSSH管理多台Linux服务器的具体过程。
如果你是一名Linux系统管理员,那你每天一定会和许许多多的机器打交道,因为你要定期监测和维护这些机器,如一批Web服务器,如果你要同时在多台机器上敲入相同的命令,你可能会通过SSH登录,然后逐台敲入,如果使用ClusterSSH,可以为你节省不少类似的工作时间。
ClusterSSH是用Tk/Perl包装XTerm和SSH后形成的新工具,就其本身而言,它可以运行在任何兼容POSIX的操作系统上,我曾经在Linux,Solaris和Mac OS X上运行过它,它需要Perl库Tk(在Debian或Ubuntu上就是perl-tk)和X11::Protocol(在Debian或Ubuntu上就是libx11-protocol-perl),此外,xterm和OpenSSH是必不可少的。
安装在Debian或Ubuntu上安装ClusterSSH是相当简单的,只需要敲入sudo apt-get install clusterssh就可以安装好,至于依赖包你也不必担心,一切都会为你装好的,它也提供了适合Fedora的rpm包,在FreeBSD上可通过port系统安装,还为Mac OS X准备了MacPort版本,因此你可以在你的苹果电脑上安装ClusterSSH,当然,如果你是极客,也可以下载源代码自己编译。
配置可以通过ClusterSSH的全局配置文件/etc/clusters,或用户home目录下的。csshrc文件来配置它,我喜欢用户级的配置方式,这样同一个系统中的不同用户可以根据自己的喜好进行配置,ClusterSSH定义了一个“cluster”机器组,你可以通过一个界面来控制这个组中的所有机器,在配置文件的顶端“clusters”部分,你可以详尽地列出你的集群,然后用独立的段落来描述每个集群。
例如,假设我有两个集群,每个集群由两台机器组成,“Cluster1”由“Test1”和“Test2”两台机器组成,“Cluster2”由“Test3”和“Test4”两台机器组成,~.csshrc(或/etc/clusters)配置文件的内容看起来应该是:
clusters = cluster1 cluster2
cluster1 = test1 test2
cluster2 = test3 test4你也可以创建中间集群(包含其它集群的集群),如果你想创建一个名叫“all”的集群包含所有的机器,有两种实现手段,首先,你可以创建一个包含所有机器的集群,如:
clusters = cluster1 cluster2 all
cluster1 = test1 test2
cluster2 = test3 test4
all = test1 test2 test3 test4但我更喜欢的方法是使用一个包含其它集群的中间集群:
clusters = cluster1 cluster2 allcluster1 = test1 test2
2. 不同配置的几台PC电脑,可以组成Linux集群或者windows集群吗
可以,集群不要求配置一样~
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。--网络
集群下不同节点去实现对应的功能,可以对应功能去搭配合适的硬件,所以不会要求配置一样。
3. ubuntu系统下怎么编译内核文件
一、下载源代码和编译软件的准备
安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。安装不了,请检查/etc/apt/sources.list 文件。有关命令:代码:$sudo apt-get install build-essential kernel-package libncurses5-dev
二、解压源代码注意,网上很多教程上说应该解压到 /usr/src,纯属以讹传讹,linux掌门人linus说解压到任何目录上都可以。当然,linus的说法是正确的。我放在自己的主目录下的src目录。如果你下载源代码是放到自己的主目录下或者运行上面的wget下载的,那么运行下列命令:代码:$ cd ~$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/现在,源代码就在 ~/src/linux-2.6.25.10进入源代码的目录,准备下一步的工作。后面都在这个目录里面进行。代码:$ cd ~/src/linux-2.6.25.10
三、开始编译前的准备工作。首先,清理以前编译时留下的临时文件。如果是刚刚解开的包,不需要执行这步。如果是第二次或者是第n次编译,那么一定要执行。相关命令如下:代码:$ sudo make mrproper网上很多教程上说把现在使用的内核的config拷贝过来参考,据实验,是不需要的,ubuntu还有debian会自动做这步。不过这条命令倒是可以学习一下。当然你可以将以前的配置拷贝过来。命令:代码:cp /boot/config-`uname -r` ./.config
四、开始配置内核选项。相关命令:代码:$sudo make menuconfig配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。配置选项非常多,具体配置可以参考金步国先生翻译的资料:Linux 2.6.19.x 内核编译配置选项。 请大家遵循一个原则,如果你自己使用的内核已经选用了某个选项,如果你没用充分的理由,不要随便改动。这样虽然内核不那么精简,但是不容易出现问题。我们可以精简的部分是硬件模块部分,对于自己没有的硬件要毫不犹豫的清除。如果你很执着,或者你有洁癖,你也可以一项项对过去,按照金步国先生的资料描述去选择基本上没有问题。
五、必须强调的几个选项:1、
在“General setup”里面的“Prompt for development and/or incomplete
code/drivers”金步国认为是不需要。但是如果你的硬件比较新,那几乎是必须选的,这样,我们才可以找到4965无线网卡,alsa声音驱动等
等。Kernel log buffer size 我选15,双核。如果你用ia64,要选16。Control Group support 集群支持?可以不要Choose SLAB allocator (SLUB (Unqueued Allocator)) 内存管理模式slab和slub选择slub。
2、在“Block layer”里,假如没有2TB的硬盘,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,谁有2TB的文件?
3、Processor type and features中是关于cpu的,要认真选。Symmetric multi-processing support是打开多核的开关,我的cpu是双核的,选中。Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu后,把Generic x86 support选项取消。Subarchitecture Type 选(PC-compatible)Maximum number of CPUs 输入自己的核心数目,我输入2。SMT (Hyperthreading) scheler support说的是超线程技术,P4有支持的,我的t8100不支持,目前大部分市场上的家用cpu都不支持。High Memory Support (4GB) 1G以下选1G;我是3G,选4G;4G以上的选16G在“ Timer frequency ”里,默认是250Hz,较新的cpu都可以选择了1000Hz,性能更好。
4、Power management options中把APM (Advanced Power Management) BIOS support关闭。现在的电脑都用acpi了。CPU Frequency scaling 是笔记本cpu节电技术Default CPUFreq governor (conservative) cpu节电模式有四个,笔记本默认选conservative比较好。ACPI Processor P-States driver 必须选,不然CPU Frequency就不能用。后面的可选自己硬件相关的,我选的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的统统消灭。
5、Bus options的选择:Bus options (PCI, PCMCIA, EISA, MCA, ISA)PCI support PCI Express support 现在新买的机器基本上都是PCI Express了ISA support 较新的新机器没有ISA设备,可以去掉MCA support 去掉NatSemi SCx200 support 去掉PCI Hotplug Support Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,去掉这里的选项可以考虑全部编译进内核,而不是以模块形式存在。
6、Device Drivers是重点,由于linux不但面向个人工作站,更多的是面向服务器的应用,所以可以把自己机器上没有的硬件全部去掉,而不用面面俱到。但是通用型的选项要慎重。比如在网卡的部分,除了我的千兆网卡 Broadcom Tigon3 support和4965无线网卡Intel Wireless WiFi 4965AGN,其余的硬件支持统统去掉。再比如声卡部分,我的是hd声卡,我只是在PCI devices中,选intel hd 声卡,再选Build IDT/Sigmatel HD-audio codec support,除此之外的硬件支持全部去掉。
声卡还有一个细节,在ubuntu7.10里面, 需要在/etc/modprobe.d/alsa-base后面添加options
snd-hda-intel probe_mask=1
model=3stack,这样我的笔记本喇叭才可以发声,不然只有外接耳机或者音箱。这次编译以后,这个动作就不必了,但是两个耳机插口只有一个可以用
了。再比如我的电脑中没有agp,就可以直接把agp相关的选项全部取消。要注意的:ATA/ATAPI/MFM/RLL support Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选*,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。 SCSI emulation support 要用刻录机,必须选。SCSI device support 现在都是SATA硬盘,一定要选* SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选*。
SCSI CDROM support 虽然康宝刻录机是ide接口的,但是必须把它当成scsi接口的,这是老问题了。用刻录机,必须选。
Graphics supportSupport for frame buffer devices 选中,进入选择 VESA VGA graphics support 选上,不然字符界面启动会有问题,后面的显卡选择:由于我的显卡是nvidia 8400gs,要自己安装nvidia公司的驱动,所以一个都没有选。这样导致ubuntu开机动画会出问题,我索性在grub中的splash字符全部删除,把开机动画关闭。字符界面很正常。 Console display driver support 有人开机后字符控制台错误,就是这部分选项没有选,出问题了。 Framebuffer Console support 需要打开。
Bootup logo 开机图标,会在自检的画面上加上个性图标。需要在grub上添加“vga=”的选项 简称fuse。是必选的,如果你要用windows分区。
CD-ROM/DVD Filesystems ISO 9660 CDROM file system support 一般选*DOS/FAT/NT Filesystems VFAT (Windows-95) fs support 有FAT32分区就选*吧 NTFS file system support 有NTFS分区就选*吧 NTFS write support 如果想对 NTFS分区进行写操作,选*必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。ubuntu采用的文件系统是ext3,请把ext2,ext3相关的必要选项都编译进入内核。
8、Virtualization这个大类是我多花几百元买t8100的主要原因,因为t8100支持intel vt技术使linux上的虚拟机的性能大幅度提高。这里的选项我除了amd的,其他都编译成模块。
9、全部设置完成,最后一项是保存设置。按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config20080630然后再保存到当起目录,文件名 .config退出设置程序。
六、开始编译内核。ubuntu的工具是make-kpkg,和其他的发行版相比,步骤相对简单。相关命令:代码:$sudo make-kpkg clean 这条命令好像不要超级权限,很多资料上说要,不过这不是原则问题。
$ sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers上述命令中的dell1400可以用自己喜欢的字符代替,最后的字符一定是数字.输完上述命令回车之前,建议大家把浏览器还有别的运用程序都关掉,机器开始的工作比较艰苦。
我的机器大概十几分钟。
七、安装内核编译完成就是安装工作。编译好的内核在上一层目录。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb两个文件,如果你不搞开发的话,只要安装内核就可以,头文件以后要用的时候再说。安装相关命令:
代码:$ cd ..$ sudo dpkg -i linux-image-(按tab键)文件名很长,如果不用tab自动补足是不可能的,tab键万岁。安装完成后和老内核比较一下大小代码:
$ ls -l /boot/
八、重新启动验证新内核。代码:$ sudo reboot
九、显卡驱动如果你的显卡和我一样是nvidia显卡,启动之后往往无法正常进入x-window。即使能看到gdm登录界面,效果也是很差的。那么就要安装nvidia驱动。用ctrl+alt+f1 进入字符命令行,输入用户名,密码登录。 #ps ax看看和gdm相关的进程,把这些进程全部关闭;用sudo /etc/init.d/gdm stop有可能有一个进程没有关闭:#kill 进程号然后安装nvidia显卡驱动,当然驱动要先下好,到nvidia驱动所在的目录里,运行:# sh ./NVIDIA-Linux-x86-173.14.12-pkg1.run重新启动以后就ok。要用nvidia的驱动,每次升级内核都要这么做。
十、无线网卡相关的内核选项是Networking --->Wireless --->Generic IEEE 802.11 Networking Stack (mac80211)还有4965的驱动。4965
无线网卡驱动虽然已经编入内核,但没有firmware无法使用。需要把原来内核的firmware拷贝到新内核对应的目录,名字和内核一致,我的内核是
linux-image-2.6.25.10dell1400,那建的目录名就是2.6.25.10dell1400。代码:具体命令:$ cd /lib/firmware/$ sudo mkdir 2.6.25.10dell1400把你的老内核中的4965的firmware拷贝过来。$ sudo cp 2.6.24-16-generic/* 2.6.25.10dell1400/上面的命令和下面的命令是等价的:$ cd /lib/firmware/$ sudo cp -R 2.6.24-16-generic/ 2.6.25.10dell1400/
重新启动系统,无线网卡就正常了。
附编译使用的机器配置:dell vostro 1400,t8100,nvidia 8400cs显卡,内置SigmaTel STAC9228芯片的声卡,4965无线网卡,BCM5906M千兆网卡,3G内存,160G硬盘,combo刻录。
编译系统版本:ubuntu 8.04桌面版.
4. 如何最快搭建LINUX服务器集群
1.2.并行技术
这是一个非常简单的建造四节点的小集群系统的例子,它是构建在Linux操作系统上,通过MPICH软件包实现的,希望这个小例子能让大家对集群系统的构建有一个最基本的了解。
2.使用MPICH构建一个四节点的集群系统
这是一个非常简单的建造四节点的小集群系统的例子,它是构建在Linux操作系统上,通过MPICH软件包实现的,希望这个小例子能让大家对集群系统的构建有一个最基本的了解。
2.1 所需设备
1).4台采用Pentium II处理器的PC机,每台配
置64M内存,2GB以上的硬盘,和EIDE接口的光盘驱动器。
2).5块100M快速以太网卡,如SMC 9332 EtherPower 10/100(其中四块卡用于连接集群中的结点,另外一块用于将集群中的其中的一个节点与其它网络连接。)
3).5根足够连接集群系统中每个节点的,使用5类非屏蔽双绞线制作的RJ45缆线
4).1个快速以太网(100BASE-Tx)的集线器或交换机
5).1张Linux安装盘
2.2 构建说明
对计算机硬件不熟的人,实施以下这些构建步骤会感到吃力。如果是这样,请找一些有经验的专业人士寻求帮助。
1. 准备好要使用的采用Pentium II处理器的PC机。确信所有的PC机都还没有接上电源,打开PC机的机箱,在准备与网络上的其它设备连接的PC机上安装上两块快速以太网卡,在其它的 PC机上安装上一块快速以太网卡。当然别忘了要加上附加的内存。确定完成后盖上机箱,接上电源。
2. 使用4根RJ45线缆将四台PC机连到快速以太网的集线器或交换机上。使用剩下的1根RJ45线将额外的以太网卡(用于与其它网络相连的那块,这样机构就可以用上集群)连接到机构的局域网上(假定你的机构局域网也是快速以太网),然后打开电源。
3. 使用LINUX安装盘在每一台PC机上安装。请确信在LINUX系统中安装了C编译器和C的LIB库。当你配置TCP/IP时,建议你为四台PC分别指定为192.168.1.1、192.168.1.2、192.168.1.3、192.168.1.4。第一台PC为你的服务器节点(拥有两块网卡的那台)。在这个服务器节点上的那块与机构局域网相连的网卡,你应该为其指定一个与机构局域网吻合的IP地址。
4.当所有PC都装好Linux系统后,编辑每台机器的/etc/hosts文件,让其包含以下几行:
192.168.1.1 node1 server
192.168.1.2 node2
192.168.1.3 node3
192.168.1.4 node4
编辑每台机器的/etc/hosts.equiv文件,使其包含以下几行:
node1
node2
node3
node4
$p#
以下的这些配置是为了让其能使用MPICH’s p4策略去执行分布式的并行处理应用。
1. 在服务器节点
,建一个/mirror目录,并将其配置成为NFS服务器,并在/etc/exports文件中增加一行:
/mirror node1(rw) node2(rw) node3(rw) node4(rw)
2. 在其他节点上,也建一个/mirror目录,关在/etc/fstab文件中增加一行:
server:/mirror /mirror nfs rw,bg,soft 0 0
3. /mirror这个目录从服务器上输出,装载在各个客户端,以便在各个节点间进行软件任务的分发。
4. 在服务器节点上,安装MPICH。MPICH的文档可在
5.任何一个集群用户(你必须在每一个节点新建一个相同的用户),必须在/mirror目录下建一个属于它的子目录,如 /mirror/username,用来存放MPI程序和共享数据文件。这种情况,用户仅仅需要在服务器节点上编译MPI程序,然后将编译后的程序拷贝到在/mirror目录下属于它的的子目录中,然后从他在/mirror目录下属于它的的子目录下使用p4 MPI策略运行MPI程序。
2.3 MPICH安装指南
1.如果你有gunzip,就d下载mpich.tar.gz,要不然就下载mpich.tar.Z。你可以到http://www.mcs.anl.gov/mpi/mpich/downloa下载,也可以使用匿名ftp到ftp.mcs.anl.gov的pub/mpi目录拿。(如果你觉得这个东西太大,你可以到pub/mpi/mpisplit中取分隔成块的几个小包,然后用cat命令将它们合并)
2.解压:gunzip ;c mpich.tar.gz tar xovf-(或zcat mpich.tar.Ztar xovf-)
3.进入mpich目录
4.执行:./configure为MPICH选择一套适合你的实际软硬件环境的参数组,如果你对这些默认选择的参数不满意,可以自己进行配置(具体参见MPICH的配置文档)。最好选择一个指定的目录来安装和配置MPICH,例如:
./configure -prefix=/usr/local/mpich-1.2.0
5.执行:make >&make.log 这会花一段较长的时间,不同的硬件环境花的时间也就不同,可能从10分钟到1个小时,甚至更多。
6.(可选)在工作站网络,或是一台单独的工作站,编辑mpich/util/machines/machines.xxx(xxx是MPICH对你机器体系结构取的名称,你能很容易的认出来)以反映你工作站的当地主机名。你完全可以跳过这一步。在集群中,这一步不需要。
7.(可选)编译、运行一个简单的测试程序:
cd examples/basic
make cpi
ln ;s ../../bin/mpirun mpirun
./mpirun ;np 4 cpi
此时,你就在你的系统上运行了一个MPI程序。
8.(可选)构建MPICH其余的环境,为ch_p4策略使
用安全的服务会使得任何启动速度加快,你可以执行以下命令构建:
make serv_p4
(serv_p4是一个较新的P4安全服务的版本,它包含在MPICH 1.2.0版中),nupshot程序是upshot程序的一个更快版本,但他需要tk 3.6版的源代码。如果你有这个包,你就用以下命令可以构建它:
make nupshot
9.(可选)如果你想将MPICH安装到一个公用的地方让其它人使用它,你可以执行:
make install 或 bin/mpiinstall
你可以使用-prefix选项指定MPICH安装目录。安装后将生成include、lib、bin、sbin、www和man目录以及一个小小的示例目录,
到此你可以通告所有的用户如何编译、执行一个MPI程序。
5. Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台
上帝借由各种途径使人变得孤独,好让我们可以走向自己。 ——赫尔曼·黑塞《德米安》
CI即为 持续集成(Continue Integration,简称CI) ,用通俗的话讲,就是 持续的整合版本库代码编译后制作应用镜像 。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、 提高代码质量、快速迭代 等,
Jenkins :基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
Bamboo : 是一个企业级商用软件,可以部署在大规模生产环境中。
CD即持续交付Continuous Delivery和持续部署Continuous Deployment,用通俗的话说,即可以持续的部署到生产环境给客户使用,这里分为两个阶段,持续交付我理解为满足上线条件的过程,但是没有上线,持续部署,即为上线应用的过程
关于 CD环境 ,我们使用以前搭建好的 K8s集群 ,K8s集群可以实现应用的 健康 检测,动态扩容,滚动更新 等优点,关于K8s集群的搭建,小伙伴可以看看我的其他文章
拉取镜像,启动并设置开机自启
配置docker加速器
GitLab 不多介绍。一个基于Git的版本控制平台,,提供了Git仓库管理、代码审查、问题跟踪、活动反馈和wiki,当然同时也提供了
切记:这里的端口要设置成80,要不push项目会提示没有报错,如果宿主机端口被占用,需要把这个端口腾出来
external_url 'http://192.168.26.55’
gitlab_rails[‘gitlab_ssh_host’] = 餘.168.26.55’
gitlab_rails[gitlab_shell_ssh_port] = 222
修改完配置文件之后。直接启动容器
相关的git命令
下面我们要配置私有的docker镜像仓库,用到的机器为:
这里仓库我们选择 harbor ,因为有web页面,当然也可以使用 registry
首先需要设置selinux、防火墙
安装并启动docker并安装docker-compose,关于docker-compose,这里不用了解太多,一个轻量的docker编排工具
解压harbor 安装包:harbor-offline-installer-v2.0.6.tgz,导入相关镜像
修改配置文件
harbor.yml:设置IP和用户名密码
./prepare && ./install.sh
查看相关的镜像
访问测试
这里因为我们要在192.168.26.55(CI服务器)上push镜像到192.168.26.56(私仓),所有需要修改CI服务器上的Docker配置。添加仓库地址
修改后的配置文件
加载使其生效
CI机器简单测试一下
push一个镜像,可以在私仓的web页面查看
镜像jenkins拉取
这里为什么要改成 1000,是因为容器里是以 jenkins 用户的身份去读写数据,而在容器里jenkins 的 uid 是 1000,
更换国内清华大学镜像,Jenkins下载插件特别慢,更换国内的清华源的镜像地址会快不少
"http://www.google.com/" 替换为 "http://www..com/"
替换后查看
重启docker,获取登录密匙
需要修改jenkins绑定的docker的启动参数 , ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
修改镜像库启动参数后需要重启docker
后面 gitlab 要和 jenkins 进行联动,所以必须要需要对 jenkins 的安全做一些设置,依次点击 系统管理-全局安全配置-授权策略,勾选"匿名用户具有可读权限"
添加 JVM 运行参数 -Dhudson.security.csrf..DISABLE_CSRF_PROTECTION=true 运行跨站请求访问
这里的话我们要通过jenkins上的kubectl客户端连接k8s,所以我们需要安装一个k8s的客户端kubectl,下载k8s客户端
然后拷贝kubeconfig 证书,k8s集群中查看证书位置,这里的证书是之前创建好的,小伙伴可以看看我之前的文章
命令测试没有问题
我们要部署 Nginx 来运行 hexo 博客系统, hexo 编译完后为一堆静态文件,所以我们需要创建一个 svc 和一个 deploy ,使用 SVC 提供服务,使用 deploy 提供服务能力,使用 Nginx+hexo的静态文件 构成的镜像
这里我们先用一个Nginx镜像来代替hexo博客的镜像
查看deployments和pod
访问测试没有问题,之后我们配置好jenkins上的触发器,直接替换就OK
我们通过 kubectl set 命令更新 deploy 的镜像时,获取的镜像是通过私仓获取的,所以需要在启动参数添加私仓地址
这里所有的节点都需要设置后重启docker
访问jenkins,接下来才是重点,我们要的jenkins上配置整个CICD流程,从而实现自动化
下面我们编译一下hexo,生成public的一个文件夹,然后上传gitlab
同时需要编写Dockerfile文件来创建镜像
6. 如何搭建android编译集群
编译配置
编译前
(不建议写到环境变量中)
7. 如何配置超级计算机
把各种部件连成一台完整的超级电脑的方法如下:
1.首先要确定硬件部件和所需要的资源
需要一个头节点(head node),至少一打的计算节点(compute node),一台以太网交换机,一个电源分配单元(power distribution unit)和一个服务器机架。计算一下电力消耗,冷却需求和占地需求。同样,你需要确定你的私有网络的IP地址段,节点的命名,预计使用的软件包以及搭建 服务集群所用的技术(后面会有更多解释)。
2.建立计算节点
需要自己组装计算节点,或者你也可以使用预配置的服务器。
●选择一款能够最大化空间、冷却和能源消耗效率的机架式服务器;
●或者,可以使用一打左右闲置的过时服务器——它们集合在一起工作的性能要比它们独立运行时的总和还多,而且还能省你一大笔钱!整个系统的处理器、网络适配器、主板应该是同一型号的,这样才能达到最佳运行效能。当然了,还要给每个节点配内存和硬盘,并且至少给头节点配一台光驱。
3.将服务器装在机架上
安装的时候从下面开始,这样可以避免机架头重脚轻。你可能会需要朋友的帮助才能完成这件事——这么多的服务器将非常的重,把它们放到机架的滑轨上会非常困难。
4.在机架顶端安装以太网交换机
现在来配置交换机:允许9000字节的大的帧,将IP地址设置为你在第一步里面确定的静态地址,关闭例如SMTP嗅探这样不必要的路由协议。
5.安装能源分配单元
根据目前你的节点的最大需求,可能220V就能满足你的高性能计算需求了。
6. 一切都安装妥当之后,就可以开始配置环节了
Linux是高性能计算集群(HPC Cluster)操作系统的事实标准,这不仅因为Linux是科学计算的理想环境,也是由于在数以百计甚至千计的节点上安装的时候,Linux不会产生任何花费。设想一下,在如此多的节点上安装Windows会花掉你多少钱呢?
●从更新主板BIOS的固件开始,将所有节点的BIOS固件都更新至最新的版本;
●在每个节点上都安装好你喜欢的Linux发行版,头节点需要安装队图形界面的支持。比较流行的选择,包括CentOS、OpenSuse、Scientific Linux、RedHat以及SLES;
●使用Rocks Cluster Distribution来搭建计算集群。除了它已经安装好计算集群需要使用的所有工具外,Rock还提供了一种通过PXE和RedHat的“Kick Start”来进行批量部署的方案。
7. 安装消息传送界面、资源管理器以及其他必须的库
如果上一步里你没有选择Rock做为你的节点的操作系统,那么现在你需要手动设置并行计算机制所必需的软件。
●首先,你需要一个便携的bash管理系统,例如Torque Resource Manager,这些软件允许你划分以及分配计算任务;
●如果安装了Torque Resource Manager,那么你还需要Maui Cluster Scheler来完成设置;
●其次,需要安装消息传送界面(message passing interface),用来在不同的计算节点的进程之间共享数据。
最后,不要忘了用多线程的数学库及编译器来编写计算任务。
8.将所有的计算节点接入网络
头节点负责将任务分配到计算节点,计算节点再把结果返回回来,节点间的消息传递也是如此,所以当然是越快越好了。
●使用私有网络将集群中的所有节点互联起来;
●头节点其实还充当局域网里的NFS、PXE、DHCP以及NTP服务器;
●将该网络从公网中分离出来,这样可以保证该网络中的广播报文不会影响到其他的网络;
9.对集群进行测试
在你把你强大的Top500计算集群交付给客户之前,你还要测试一下它的性能。HPL(High Performance Lynpack)评测软件包是测试集群的计算速度的常见选择。你需要从源代码编译它,编译的时候根据你选择的架构,打开所有可能的优化选项。
8. 求集群管理的相关知识!
集群技术案例介绍和具体操作
集群技术案例介绍和具体操作
中国科学院西安网络中心 中科红旗linux培训认证中心
集群技术
1.1 什么是集群
简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提
供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的
集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一
个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群
系统的节点。
1.2 为什么需要集群
集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就
开始了对集群系统的研究和开发。由于主要用于科学工程计算,所以这些系统并
不为大家所熟知。直到Linux集群的出现,集群的概念才得以广为传播。
对集群的研究起源于集群系统良好的性能可扩展性(scalability)。提高CPU
主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的
提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了
向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,象SMP这些
多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能
随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的
增加几乎是线性变化的。图1显示了这中情况。
图1. 几种计算机系统的可扩展性
对于关键业务,停机通常是灾难性的。因为停机带来的损失也是巨大的。下
面的统计数字列举了不同类型企业应用系统停机所带来的损失。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
应用系统每分钟损失(美元)
呼叫中心(Call Center) 27000
企业资源计划(ERP)系统13000
供应链管理(SCM)系统11000
电子商务(eCommerce)系统10000
客户服务(Customer Service Center)系统27000
图2:停机给企业带来的损失
随着企业越来越依赖于信息技术,由于系统停机而带来的损失也越拉越大。
集群系统的优点并不仅在于此。下面列举了集群系统的主要优点:
高可扩展性:如上所述。
高可用性:集群中的一个节点失效,它的任务可传递给其他节点。可以有效防止单点失效。
高性能:负载平衡集群允许系统同时接入更多的用户。
高性价比:可以采用廉价的符合工业标准的硬件构造高性能的系统。
2.1 集群系统的分类
虽然,根据集群系统的不同特征可以有多种分类方法,但是一般把集群系统分为两类:
(1)、高可用(High Availability)集群,简称HA集群。
这类集群致力于提供高度可靠的服务。就是利用集群系统的容错性对外提供7*24小时不间
断的服务,如高可用的文件服务器、数据库服务等关键应用。
目前已经有在Linux下的高可用集群,如Linux HA项目。
负载均衡集群:使任务可以在集群中尽可能平均地分摊不同的计算机进行处理,充分利
用集群的处理能力,提高对任务的处理效率。
在实际应用中这几种集群类型可能会混合使用,以提供更加高效稳定的服务。如在一个使
用的网络流量负载均衡集群中,就会包含高可用的网络文件系统、高可用的网络服务。
(2)、性能计算(High Perfermance Computing)集群,简称HPC集群,也称为科学计算
集群。
在这种集群上运行的是专门开发的并行应用程序,它可以把一个问题的数据分布到多
台的计算机上,利用这些计算机的共同资源来完成计算任务,从而可以解决单机不能胜任
的工作(如问题规模太大,单机计算速度太慢)。
这类集群致力于提供单个计算机所不能提供的强大的计算能力。如天气预报、石油勘探与油
藏模拟、分子模拟、生物计算等。这些应用通常在并行通讯环境MPI、PVM等中开发,由于MPI
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
是目前的标准,故现在多使用MPI为并行环境。
比较有名的集群Beowulf就是一种科学计算集群项目。
3、集群系统转发方式和调度算法
3.1转发方式
目前LVS主要有三种请求转发方式和八种调度算法。根据请求转发方式的不同,所构
架集群的网络拓扑、安装方式、性能表现也各不相同。用LVS主要可以架构三种形式的集群,
分别是LVS/NAT、LVS/TUN和LVS/DR,可以根据需要选择其中一种。
(1)、网络地址转换(LVS/NAT)
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(2)、直接路由
(3)、IP隧道
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
三种转发方式的比较:
3.2、调度算法
在选定转发方式的情况下,采用哪种调度算法将决定整个负载均衡的性能表现,不同
的算法适用于不同的应用场合,有时可能需要针对特殊场合,自行设计调度算法。LVS的算
法是逐渐丰富起来的,最初LVS只提供4种调度算法,后来发展到以下八种:
1.轮叫调度(Round Robin)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均
等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2.加权轮叫(Weighted Round Robin)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样
可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动询问真实服务器的
负载情况,并动态地调整其权值。
3.最少链接(Least Connections)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器
上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较
好地均衡负载。
4.加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自
动询问真实服务器的负载情况,并动态地调整其权值。
5.基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache
集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务
器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且
有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求
发送到该服务器。
6. 带复制的基于局部性最少链接( Locality-Based Least Connections with
Replication)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要
用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务
器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目
标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一
台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接
”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服
务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,
以降低复制的程度。
7.目标地址散列(Destination Hashing)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分
配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,
否则返回空。
8.源地址散列(Source Hashing)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的
散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则
返回空。
了解这些算法原理能够在特定的应用场合选择最适合的调度算法,从而尽可能地保持
Real Server的最佳利用性。当然也可以自行开发算法,不过这已超出本文范围,请参考有
关算法原理的资料。
4.1、什么是高可用性
计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性
(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,
用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
MTTF/(MTTF+MTTR)*100%
业界根据可用性把计算机系统分为如下几类:
可用比例
(Percent
Availability)
年停机时间
(downtime/year
)
可用性分类
99.5 3.7天
常规系统
(Conventional)
99.9 8.8小时可用系统(Available)
99.99 52.6分钟
高可用系统(Highly
Available)
99.999 5.3分钟Fault Resilient
99.9999 32秒Fault Tolerant
为了实现集群系统的高可用性,提高系统的高可性,需要在集群中建立冗余机制。一个功
能全面的集群机构如下图所示
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
负载均衡服务器的高可用性
为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行
High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运
行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并
继续提供服务;当备份管理器又从主管理器收到“I am alive”这样的信息是,它就释放
服务IP地址,这样的主管理器就开开始再次进行集群管理的工作了。为在住服务器失效的
情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,
保持二者系统的基本一致。
HA的容错备援运作过程
自动侦测(Auto-Detect)阶段 由主机上的软件通过冗余侦测线,经由复杂的监听程序。逻
辑判断,来相互侦测对方运行的情况,所检查的项目有:
主机硬件(CPU和周边)
主机网络
主机操作系统
数据库引擎及其它应用程序
主机与磁盘阵列连线
为确保侦测的正确性,而防止错误的判断,可设定安全侦测时间,包括侦测时间间隔,
侦测次数以调整安全系数,并且由主机的冗余通信连线,将所汇集的讯息记录下来,以供
维护参考。
自动切换(Auto-Switch)阶段 某一主机如果确认对方故障,则正常主机除继续进行原来的
任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服
务。
自动恢复(Auto-Recovery)阶段 在正常主机代替故障主机工作后,故障主机可离线进行修
复工作。在故障主机修复后,透过冗余通讯线与原正常主机连线,自动切换回修复完成的
主机上。整个回复过程完成由EDI-HA自动完成,亦可依据预先配置,选择回复动作为半自
动或不回复。
4.2、HA三种工作方式:
(1)、主从方式 (非对称方式)
工作原理:主机工作,备机处于监控准备状况;当主机宕机时,备机接管主机的一切工作,
待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运行,数据的
一致性通过共享存储系统解决。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(2)、双机双工方式(互备互援)
工作原理:两台主机同时运行各自的服务工作且相互监测情况,当任一台主机宕机时,另
一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存
储系统中。
(3)、集群工作方式(多服务器互备方式)
工作原理:多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个备用
主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
相关文档
http://tech.sina.com.cn/it/2004-04-09/1505346805.shtml
http://stonesoup.esd.ornl.gov
LINUX下的集群实列应用
最近有客户需要一个负载均衡方案,笔者对各种软硬件的负载均衡方案进行了调查和
比较,从IBM sServer Cluster、Sun Cluster PlatForm 等硬件集群,到中软、红旗、
TurboLinux的软件集群,发现无论采用哪个厂商的负载均衡产品其价格都是该客户目前所
不能接受的。于是笔者想到了开放源项目Linux Virtual Server(简称LVS)。经过对LVS的研
究和实验,终于在Red Hat 9.0上用LVS成功地构架了一组负载均衡的集群系统。整个实
现过程整理收录如下,供读者参考。
选用的LVS实际上是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操
作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组
服务器构成一个高性能、高可用的虚拟服务器。使用三台机器就可以用LVS实现最简单的集
群,如图1所示。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
图1 LVS实现集群系统结构简图
图1显示一台名为Director的机器在集群前端做负载分配工作;后端两台机器称之为
Real Server,专门负责处理Director分配来的外界请求。该集群的核心是前端的Director
机器,LVS就是安装在这台机器上,它必须安装Linux。Real Server则要根据其选用的负
载分配方式而定,通常Real Server上的设置比较少。接下来介绍Director机器上LVS的
安装过程。
安装
LVS的安装主要是在Director机器上进行,Real Server只需针对不同的转发方式做简单
的设定即可。特别是对LVS的NAT方式,Real Server惟一要做的就是设一下缺省的网关。
所以构架集群的第一步从安装Director机器开始。
首先,要在Director机器上安装一个Linux操作系统。虽然早期的一些Red Hat版本,
如6.2、7.2、8.0等自带Red Hat自己的集群软件,或者是在内核中已经支持LVS,但是为
了更清楚地了解LVS的机制,笔者还是选择自行将LVS编入Linux内核的方式进行安装,
Linux版本采用Red Hat 9.0。
如果用户对Red Hat的安装比较了解,可以选择定制安装,并只安装必要的软件包。
安装中请选择GRUB 做为启动引导管理软件。因为GRUB 在系统引导方面的功能远比
LILO强大,在编译Linux内核时可以体会它的方便之处。
LVS是在Linux内核中实现的,所以要对原有的Linux内核打上支持LVS的内核补丁,
然后重新编译内核。支持LVS 的内核补丁可以从LVS 的官方网
http://www.linuxvirtualserver.org 下载,下载时请注意使用的Linux核心版本,必须下载和
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
使用的Linux内核版本相一致的LVS内核补丁才行。对于Red Hat 9.0,其Linux内核版本
是2.4.20,所以对应内核补丁应该是http://www.linuxvirtualserver.org/software/kernel-
2.4/linux-2.4.20-ipvs-1.0.9.patch.gz。笔者经过多次实验,使用Red Hat 9.0自带的Linux
源代码无法成功编译LVS 的相关模组。由于时间关系笔者没有仔细研究,而是另外从
kernel.org上下载了一个tar包格式的2.4.20内核来进行安装,顺利完成所有编译。下面是
整个内核的编译过程:
1.删除Red Hat自带的Linux源代码
# cd /usr/src
# rm -rf linux*
2.下载2.4.20内核
# cd /usr/src
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
3.解压到当前目录/usr/src
# cd /usr/src
# tar -xjpvf linux-2.4.20.tar.bz2
4.建立链接文件
# cd /usr/src # ln -s linux-2.4.20 linux-2.4 # ln -s linux-2.4.20 linux
5.打上LVS的内核补丁
# cd /usr/src
#wget http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-
1.0.9.patch.gz
# gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
# cd /usr/src/linux
# patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
在打补丁时,注意命令执行后的信息,不能有任何错误信息,否则核心或模组很可能
无法成功编译。
6.打上修正ARP问题的内核补丁
# cd /usr/src
# wget http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
# cd /usr/src/linux
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
# patch -p1 < ../hidden-2.4.20pre10-1.diff
这一步在Director机器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server
上必须做。
7.为新核心命名
打开/usr/src/linux/Makefile。注意,在开始部分有一个变量EXTRAVERSION可以自行定
义。修改这个变量,比如改成“EXTRAVERSION=-LVS”后,编译出的核心版本号就会显
示成2.4.20-LVS。这样给出有含义的名称将有助于管理多个Linux核心。
8.检查源代码
# make mrproper
这一步是为确保源代码目录下没有不正确的.o文件及文件的互相依赖。因为是新下载的内
核,所以在第一次编译时,这一步实际可以省略。
9.配置核心选项
# make menuconfig
命令执行后会进入一个图形化的配置界面,可以通过这个友好的图形界面对内核进行定制。
此过程中,要注意对硬件驱动的选择。Linux支持丰富的硬件,但对于服务器而言,用不到
的硬件驱动都可以删除。另外,像Multimedia devices、Sound、Bluetooth support、Amateur
Radio support等项也可以删除。
注意,以下几项配置对LVS非常重要,请确保作出正确的选择:
(1)Code maturity level options项
对此项只有以下一个子选项,请选中为*,即编译到内核中去。
Prompt for development and/or incomplete code/drivers
(2)Networking options项
对此项的选择可以参考以下的配置,如果不清楚含义可以查看帮助:
<*> Packet socket
[ ] Packet socket: mmapped IO
< > Netlink device emulation
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
Socket Filtering
<*> Unix domain sockets
TCP/IP networking
IP: multicasting
IP: advanced router
IP: policy routing
[ ] IP: use netfilter MARK value as routing key
[ ] IP: fast network address translation
<M> IP: tunneling
IP: broadcast GRE over IP
[ ] IP: multicast routing
[ ] IP: ARP daemon support (EXPERIMENTAL)
[ ] IP: TCP Explicit Congestion Notification support
[ ] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration --->
IP: Virtual Server Configuration --->
(3)Networking options项中的IP: Virtual Server Configuration项
如果打好了LVS的内核补丁,就会出现此选项。进入Virtual Server Configuration选项,
有以下子选项:
<M> virtual server support (EXPERIMENTAL)
IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)
--- IPVS scheler
<M> round-robin scheling
<M> weighted round-robin scheling
<M> least-connection scheling scheling
<M> weighted least-connection scheling
<M> locality-based least-connection scheling
<M> locality-based least-connection with replication scheling
<M> destination hashing scheling
<M> source hashing scheling
<M> shortest expected delay scheling
<M> never queue scheling
--- IPVS application helper
<M> FTP protocol helper
以上所有项建议全部选择。
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(4)Networking options项中的IP: Netfilter Configuration项
对于2.4版本以上的Linux Kernel来说,iptables是取代早期ipfwadm和ipchains的
更好选择,所以除非有特殊情况需要用到对ipchains和ipfwadm的支持,否则就不要选它。
本文在LVS/NAT方式中,使用的就是iptables,故这里不选择对ipchains和ipfwadm的
支持:
< > ipchains (2.2-style) support
< > ipfwadm (2.0-style) support
10. 编译内核
(1)检查依赖关系
# make dep
确保关键文件在正确的路径上。
(2)清除中间文件
# make clean
确保所有文件都处于最新的版本状态下。
(3)编译新核心
# make bzImage
(4)编译模组
# make moles
编译选择的模组。
(5)安装模组
# make moles_install
# depmod -a
生成模组间的依赖关系,以便modprobe定位。
(6)使用新模组
# cp System.map /boot/System.map-2.4.20-LVS
# rm /boot/System.map
# ln -s /boot/System.map-2.4.20-LVS /boot/System.map
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20-LVS
# rm /boot/vmlinuz
# ln -s /boot/vmlinuz-2.4.20-LVS /boot/vmlinuz
# new-kernel-pkg --install --mkinitrd --depmod 2.4.20-LVS
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
(7)修改GRUB,以新的核心启动
执行完new-kernel-pkg命令后,GRUB的设置文件/etc/grub.conf中已经增加了新核心的
启动项,这正是开始安装Linux时推荐使用GRUB做引导程序的原因。
grub.conf中新增内容如下:
title Red Hat Linux (2.4.20-LVS)
root (hd0,0)
kernel /boot/vmlinuz-2.4.20LVS ro root=LABEL=/
initrd /boot/initrd-2.4.20LVS.img
将Kernel项中的root=LABEL=/改成 root=/dev/sda1 (这里的/dev/sda1是笔者Linux的根
分区,读者可根据自己的情况进行不同设置)。
保存修改后,重新启动系统:
# reboot
系统启动后,在GRUB的界面上会出现Red Hat Linux(2.4.20-LVS)项。这就是刚才编译的
支持LVS的新核心,选择此项启动,看看启动过程是否有错误发生。如果正常启动,ipvs
将作为模块加载。同时应该注意到,用LVS的内核启动后在/proc目录中新增了一些文件,
比如/proc/sys/net/ipv4/vs/*。
11.安装IP虚拟服务器软件ipvsadm
用支持LVS的内核启动后,即可安装IP虚拟服务器软件ipvsadm了。用户可以用tar包或
RPM 包安装,tar 包可以从以下地址http://www.linuxvirtualserver.org/software/kernel-
2.4/ipvsadm-1.21.tar.gz 下载进行安装。
这里采用源RPM包来进行安装:
# wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm
# rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
注意:高版本的rpm命令去掉了--rebuild这个参数选项,但提供了一个rpmbuild命令来实
现它。这一点和以前在Red Hat 6.2中以rpm—rebuild XXX.src.rpm来安装源RPM包的习
惯做法有所不同。
安装完,执行ipvsadm命令,应该有类似如下的信息出现:
# ipvsadm
中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn
中国科学院西安网络中心 中科红旗linux培训认证中心
IP Virtual Server version 1.0.9 (size=4096)
Prot LocalAddress:Port Scheler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
出现类似以上信息,表明支持LVS 的内核和配置工具ipvsadm 已完全安装,这台
Director机器已经初步安装完成,已具备构架各种方式的集群的条件。
实例
理解了上述关于请求转发方式和调度算法的基本概念后,就可以运用LVS来具体实现
几种不同方式的负载均衡的集群系统。LVS的配置是通过前面所安装的IP虚拟服务器软件
ipvsadm来实现的。ipvsadm与LVS的关系类似于iptables和NetFilter的关系,前者只是
一个建立和修改规则的工具,这些命令的作用在系统重新启动后就消失了,所以应该将这
些命令写到一个脚本里,然后让它在系统启动后自动执行。网上有不少配置LVS的工具,
有的甚至可以自动生成脚本。但是自己手工编写有助于更深入地了解,所以本文的安装没
有利用其它第三方提供的脚本,而是纯粹使用ipvsadm命令来配置。
下面就介绍一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的负载均衡集群。
1.设定LVS/NAT方式的负载均衡集群
NAT是指Network Address Translation,它的转发流程是:Director机器收到外界请求,
改写数据包的目标地址,按相应的调度算法将其发送到相应Real Server上,Real Server
处理完该请求后,将结果数据包返回到其默认网关,即Director机器上,Dire
9. GCC编译连接问题stl_algobase.h:343: undefined reference to
这个错误非常常见,高版本的gcc编译器的库文件,常有改动,文件名或者变量名都有可能相对于低版本gcc发生变化。
我的解决办法是,找出编译平台也就是4.4.7版本里的对应的头文件或者变量名函数名,修改你的代码中所有include或者引用的地方。
因为你的编译平台是447. 你是基于463构建的工程,引用的头文件肯定有些是 447里不具备的或者名字路径不一样的。
10. 什么是高性能计算集群
作为一个在高性能计算领域十多年的老兵,大概回答下
高性能计算是一个非常大的领域,总的来看,可以分为三个层面:
硬件层面,包括高性能网络,高性能处理器,高性能服务器,高性能存储器件等。高性能网络层面,目前超级计算机主要基于两种高性能网络,一种是Infiniband,一种是RoCE。高性能处理器层面,包括高性能CPU,如AMD、Intel的高性能服务器CPU。高性能协处理器,如NV的GPU,Intel之前的MIC等。国产的申威处理器也是高性能处理器。高性能服务器,主要是散热。因为机器性能高,功耗自然也就大,散热一般是大问题,目前国内在这块做的比较好的是曙光,PUE可以做到1.1以下。高性能存储器件发展也非常迅速,Intel的内存存储已经开始实用。但是存储因为他对计算性能影响有限,之前在高性能领域关注不是太多,随着AI对高性能计算的需求越来越强烈,而AI又是基于数据的,存储对于高性能计算的重要性在逐步体现。
基础软件层面,包括调度、存储、通信、编译、计算等各种基础软件。常用的调度包括slurm,PBS,存储包括Lustre、Gluster,通信如MPI,以及各种开源或者芯片厂商提供的编译、计算库,如blas库,fft库,稀疏矩阵计算库,元算子库等等。这些基础软件和高性能硬件一起,组成了高性能计算的核心部分,也是非常有技术挑战的部分。以及一些基础算法,如七个小矮人:结构性网格、非结构性网格、快速傅立叶变化、Dense Linear Algebra、Sparse Linear Algebra、粒子动力学、Monte Carlo。
应用软件层面,这个主要是高性能计算在各个行业的应用,比如前面同学提到的大规模科学问题、天气预报、生物制药、地形分析、数据挖掘、图像处理、基因测序、人工智能、密码破译、核爆模拟、飞机制造、量化交易等各个领域的应用。这些应用往往都需要有行业专家来参与,高性能计算的专家提供1,2提到的软件和基础库,行业专家一起,配合把行业对应应用进行并行化,进行性能优化,最后提供一个可以在超级计算机上大规模运行的软件。
以上3个层面,每一个层面都有大量的工作可以做,比如软件层面,其中任何一个方向,都值得深入。蓝海大脑主要是做计算,提供高性能的计算库,一个实验室上百人,就专门只做这个事情,为国产的、商用的处理器,提供高性能计算库,提出新的计算算法,提出新的优化方法。