distcc 分布式部署步骤

来源:互联网 发布:小米手环2 f码淘宝 编辑:程序博客网 时间:2024/05/18 07:24

原文地址:distcc 分布式部署步骤作者:独独力子

前言

  • 我们机器在绝大多数时间是空闲的,如果你在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-Eplus , 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

  • 在服务器上配置IP及网关
 编辑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键 出现disccdisccd等提示说明已经安装好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 监视器(这样就可以观察正在发生什么事!