- 论坛徽章:
- 0
|
前言
- 我们机器在绝大多数时间是空闲的,如果你在Windows下用任务管理器或其他的Linux平台观察CPU,你会看到CPU的使用率常见在1~2%,如果能利用现有的计算机资源,把空闲的CPU利用起来,或者能让服务器智能的迁移负荷,加快我们的编译速度,就是我们部署distcc的理由。
- 分布式集群中的节点需要硬件尽可能的一致,不一致的硬件集群称为异构集群,虽然这并不能改变集群的特性,但是异构导致集群会花费额外的时间来处理由于异构带来的延迟,另一方面这也是集群的优势,任何其他的多CPU系统都是严格要求CPU是一致的,集群就有足够的自由度增减节点,不受类型的限制。
- 本次部署选择distcc作为集群的方案,架构集群并没有想象中那样复杂,参考下面的步骤可以一步步的架构集群,整个的方案并不是很昂贵,而且便于扩展。使用ubuntu是因为这是完全free的版本,不论是初学者还是专业工作者,都可以在ubuntu中定制自己的版本。
硬件环境:Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz ,黑金刚1G×2, 华硕P5B-E plus , WD250G SATA (7200转)16M
Intel(R) Core(TM)2 CPU6300@ 1.86GHz, 1GDDR ,华硕 P5B-VM, WD80SATA
24口100MB交换机(需 一个千兆口模块)
5类线,按照693A压1米网线3根
显示器,键盘,鼠标仅在安装时使用
Kvm-4A
DVD usb光驱
安装所有硬件,并能确保可以从光盘启动服务器系统,检查BIOS的启动设置,并确认可以正确启动。连接好电源后,使用kvm把两台服务器连到一套显示器和键盘鼠标上。
软件环境和必要的安装包(除特殊说明外,高版本不一定适用)
Linux Ubuntu6.6server(免费下载
http://mirror.lupaworld.com/ubuntu/releases/6.06/)
vsftpd
Distcc-2.18.3.tar.bz2
Ccache-2.3.tar.gz
Gcc4.0.tar.gz
G++4.0.tar.gz
Make
1.安装ubuntu 6.0.6 server 版本在所有的服务器上,分区使用自动分区(比较简单,本文不讨论Linux其他问题),选择server安装,这样可以把系统占用的空间减少到最小,额外需要的软件包,可以在系统正常启动后手动安装。 2.在主服务器上部署编译农场环境:安装make ,gcc,g++,ppc-eabi,sde-eabi 启用ngcf 编译农场服务 (具体参见前页编译农场部署)
3.搭好ftp服务器 (具体参见前页编译农场部署)
4.在每台服务器上创建ngcf 用户,并分配到ngcf组中
网络配置环境
首先用网线连接交换机和各节点,交换机再连到局域网中
主服务器 IP 192.168.201.49 网关192.168.201.1
节点服务器IP 192.168.201.39 网关 192.168.201.1
有多台节点服务器时最好在主服务器上配DHCP
编辑interface 配置文件
sudo vi /etc/network/interfaces //这个应该是决定是否启用这个端口
auto eth0//静态设置
iface eth0 inet static
address 192.168.201.39
netmask 255.255.255.0
gateway 192.168.201.1
最后 需要重启下网络设备 sudo /etc/init.d/netwoking restart
架构distcc分布式集群当以上条件都具备时,可以开始架构distcc分布式集群。
1.在每台机器上都安装distcc包,注意操作步骤的准确性:
A.将所有下载的软件包上载到服务器的/home目录下,确认下载的软件包是完整的
B.解压软件包 tar xvfz distcc-2.18.3.tar.bz2
C.安装ditcc软件包 #./configure –help (仔细看下帮助)
# Mkdir /usr/local/distccserver
# ./configure –prefix=/usr/local/distccserver----(#设置软件的安装目录)
#Make
#make install
在运行#./configure [options]配置软件后,它会根据你当前系统、编译、安装相关的信息,生成一个安装配置文件Makefile。Makefile文件通常是用来编译和安装软件的,运行make命令时系统会自动根据Makefile文件中的设置对软件进行编译和安装,如果编译能够顺利通过的话,运行#makeinstall命令来安装。
D.把 /usr/local/distccserver/bin下的distcc , distccd ,distccmon-text ,三个文件拷到 /usr/local/bin目录下
(验证:如果输入文件的前几个字母 如 disc 再按TAB键 出现discc disccd等提示说明已经安装好distcc)
E. 设置环境变量
vi /etc/environment
添:/usr/local/distccserver/bin:
2.完成以上步骤后开始配置distcc
a.建masquerade directory
Mkdir /home/data/ngcf/distcc
Cd /home/data/ngcf/distcc
b.在/home/data/ngcf/distcc下建伪装链接 ppc-eabi-gcc , sde-gcc
Vi ppc-eabi-gcc
#!/bin/sh
distcc /usr/local/ppc-eabi/bin/ppc-eabi-gcc $*
vi sde-gcc
#!/bin/sh
distcc /usr/local/sde/bin/sde-gcc $*
c.建一个启动distccd的脚本
Mkdir /home/data/ngcf/distccd
Cd /home/data/ngcf/distccd
Vi start-distccd
#!/bin/sh
distccd --daemon --pid-file /home/data/ngcf/distccd/distccd.pid --allow 0.0.0.0/0 (允许访问本机的Ip地址,这里表示所有)
d.打开多任务编译
在makes脚本中添加
export QUIET=1
export MAKEFLAGS="-j8 -i -k --no-print-directory"
-j 标志告诉 ppc-eabi-gcc 一次需要编译多少任务。
e.完成以上操作后 可以开始启用distcc
◆#Su ngcf (注意要用ngcf帐号 启用distcc)
◆需要设置PATH export PATH=/home/data/ngcf/distcc:$PATH
◆设置主机列表export DISTCC_HOSTS="192.168.201.49/4 localhost/2 192.168.201.47/2"
◆ 启用distcc
Cd /home/data/ngcf/distccd
./start-distccd
f.使用top查看进程 确认distccd已经启动
查看PATH 确认路径正确$echo $PATH
查看distcc_hosts 确认列表正确$echo $DISTCC_HOSTS
g.当以上都确认后可以开始测试编译了
这里选择 s86v2_11398版本
#Cd /home/data/ngcf/src/trunk./project/mail/s86v2/
#./makes
h.上面的设置都是手工操作,我们当然希望能够让distcc自动运行啦~所以我们要在ngcf的config.py中设置环境变量,使得从ftp上传编译任务时,自动调用distcc服务
environ = {
'PATH':'/home/data/ngcf/distcc:/usr/local/ccache/bin:/usr/local/ppc- eabi/bin:/usr/local/sde/bin:/usr/local/bin:/usr/bin:/bin',
'LANG':'en_US.UTF-8',
'LANGUAGE':'en_US:en',
'QUIET':'1',
'MAKEFLAGS':'-j 8 -i -k --no-print-directory'
节点服务器上部署所需要的编译环境,及安装并启动distccd 即可.
创建启动脚本
Vi start-distccd
#!/bin/sh
distccd --daemon --pid-file /home/data/ngcf/distccd/distccd.pid --allow 192.168.201.49/0 (允许主控服务器访问)
- distcc 有自带的任务监视器,让我们来看一看 distcc 监视器,看它正在做什么:
#distccmon-text 0 3
5338 Compile minilzo.c 192.168.201.39 [1]
5363 Preprocess prefork.c 192.168.201.39 [2]
5360 Compile ncpus.c 192.168.201.39 [0]
5352 Compile dparent.c localhost[1]
5356 Compile dsignal.c localhost[2]
5349 Compile dopt.c localhost [0]
使用 distcc 监视器,我们可以观察到哪个节点上正在编译哪个文件。右边节点名后面的数字指出了它是第n个当前编译文件.
- 关于版本还有最后一个注意事项。如果能保持对 distcc 集群中的所有节点使用相同副版本号的 ppc-eabi-gcc,则 distcc 程序可以获得最佳工作状态;如果这些节点使用的是不同副版本号,则可能会导致编译不稳定,甚至可能导致编译过程完全失败,因为已经修改的部分 gcc 足以产生这样的后果.
总结那么,最后我们来总结一下这个过程:
◆准备好硬件
◆准备好所需的软件包
◆搭好网络环境
◆在所有您想用来编译的机器上安装 distcc
◆启动每台机器上的 distcc 新进程
◆注意设置环境变量
◆用变量名导出 DISTCC_HOSTS 环境变量
◆使用 make -j n 来进行编译,其中,n 是DISTCC_HOSTS中机器数目的两到三倍
◆启动 distcc 监视器(这样就可以观察正在发生什么事!)
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/37473/showart_366340.html |
|