之前配置distcc没有考虑负载均衡这一项,现在考虑使用dmucs实现distcc的负载均衡

官方手册

http://dmucs.sourceforge.net/

使用官方手册编译会报错,等解决问题后再来总结

=================================================================================

update by 2013-11-08

使用apt安装dmucs

apt-get install dmucs

安装文件:

/.
/usr
/usr/bin
/usr/bin/gethost
/usr/bin/loadavg
/usr/bin/monitor
/usr/bin/remhost
/usr/bin/addhost
/usr/sbin
/usr/sbin/dmucs
/usr/sbin/loadavg
/usr/share
/usr/share/doc
/usr/share/doc/dmucs
/usr/share/doc/dmucs/copyright
/usr/share/doc/dmucs/changelog.Debian.gz
/etc
/etc/default
/etc/default/dmucs
/etc/init.d
/etc/init.d/dmucs
/etc/dmucs.conf

其中用的到的gethost, loadavg, dmucs , 配置文件/etc/default/dmucs && /etc/dmucs.conf

部署结构:

一台机器上启动dmucs进程(host-server),相当于整个体系的大脑,进行后续的任务分配,它可以安装在任意一台机器上,不参与实际的编译过程;

在参与distcc编译的机器上启动loadavg进程,向启动dmucs进程的机器发送本机负载情况;

将要编译的软件包放在安装了distcc和dmucs的某一台机器上,进行编译;

实际的配置:

前提,distcc能够正常运行,能进行分布式编译

dmucs (host-server)的配置:

  • 修改/etc/default/dmucs文件,将SERVER=no改为SERVER=yes
  • 修改/etc/dmucs.conf文件,其中添加实际参与编译的机器信息,具体格式为:

    # Configuration file for dmucs server.
    #
    # Format: machine number-of-cpus power-index

    InnerServer1 2 2
    InnerServer2 4 3
    InnerServer3 4 3

    其中第一列为主机地址(或者主机名),第二列为主机拥有的CPU核数(?),第三列为主机性能的权重,最差的机器赋值最小(大于等于1的某个整数),然后性能好的机器赋予更高的权值。

  • 启动dmucs,可以以服务方式启动:/etc/init.d/dmucs start , 或者可以直接在命令行输入dumcs,如果在实际参与编译的机器上启动了loadavg,则会看到类似下面的输出:

    root@InnerServer1:/home# dmucs 
    New host available: InnerServer3/4, tier 3, type 
    New host available: InnerServer1/2, tier 2, type 
    New host available: InnerServer2/4, tier 3, type

实际参与编译的机器的配置:

  • 修改/etc/default/dmucs文件,将USE_SERVER=修改为USE_SERVER=<ip>,ip为(host-server)的地址;
  • 启动distcc服务,启动loadavg进程,命令:loadavg -s <ip> -D & , 其中-s 后面指定使用的server,-D代表debug, & 代表后台运行

编译包所在服务器上的配置:

除了按照上面要启动distcc和loadavg,还要做如下配置:

  • export DISTCC_HOSTS="<ip1> <ip2> <ip3>...",输出参与实际编译的服务器的地址(这属于distcc 的配置)
  • export PATH=/usr/lib/distcc:$APTH,这一步的作用是使用distcc代替gcc,g++等等,因为使用apt-get安装的distcc默认生成目录/usr/lib/distcc,在该目录里面有包括cc/c++/g++/gcc等软链接文件,这些文件全部指向/usr/bin/distcc,也就是说,现在的编译环境全部由distcc提供,因为/usr/lib/distcc目录的文件最先被找到,这一句话可以放在.bashrc文件中,它的作用也等同于其他文档中所说的CC=“distcc gcc” CXX='distcc g++'这一句
  • 在configure时执行CC='gethost -s <ip> distcc' CXX='gethost -s <ip> distcc' ./configure,这样在下面make的时候,会先到<ip>所指的server去查询各个机器的性能,然后由该dmucs server统一分配编译任务。注:在其他文档中都没有提到gethost -s <ip>,因为其他以源码包安装的dmucs在安装的时候指定了server,但我是用apt安装,所以在这儿被阻拦了一段时间。 其他文档有按照apt安装的,它所中给出的make -j8 CC=gethost distcc,这条命令肯定无法执行。
  • make -j$(distcc -j),如果只用make的话,会看到只有单线程运行,违背了分布式编译的初衷
  • 一些工具:distccmon-text 2,显示任务分配,2代表每隔2秒刷新一次,或者watch distccmon-text具有相同的作用。

一些参考:

http://www.ibm.com/developerworks/cn/aix/library/0905_yangyi_distcc/

http://dmucs.sourceforge.net/

http://blog.chinaunix.net/uid-28190171-id-3379699.html

dmucs与distcc的更多相关文章

  1. distcc加速内核编译

    Linux内核编译实在是费时间的事,搞内核移植的时候总要编译,生命有一部分就浪费在等内核编译完成上,有心想买个HP的工作站,看了下Z840的价格,想想还是算了.distcc早就听说过,一直没有去试试, ...

  2. distcc (dcc_execvp) ERROR: failed to exec XX: Permission denied

    首先先确保一下是不是能执行下面语句: # sudo -u nobody XX --version 如果能看见版本信息,则可以不用往下看. 再检查一下distccd.service # sudo cat ...

  3. (转)Android分布式编译学习(一)distcc实现分布式编译 —— Ubuntu12.04上部署distcc分布式编译

    转自:http://blog.csdn.net/eqiang8271/article/details/17144411   版权声明:本文为博主原创文章,未经博主允许不得转载. Android代码庞大 ...

  4. distcc配置

    原理图: OS: ubuntu Server 12.04 1.安装 apt-get install distcc 2.配置 将文件/etc/default/distcc修改为如下格式 STARTDIS ...

  5. cmake工程使用distcc

    distcc可以加速编译,但是遇到cmake可能就需要处理下. 问题 distcc在 /usr/lib/distcc 中放了各编译器的soft link(如cc/gcc等等),如果 /usr/lib/ ...

  6. distcc 的使用

    在项目的开发过程中,经常出现多个开发人员集中在某个 linux 内网开发机上统一开发的情况,随着开发人员越来越多.项目编译得越来越频繁,开发机的压力越来越大,所以考虑用代码交叉编译的方式来缓解开发机的 ...

  7. metasploit--exploit模块信息

    Name                                             Disclosure Date  Rank    Description ----           ...

  8. Jenkins+Gitlab搭建持续集成(CI)环境

    利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...

  9. ccache高速编译工具

    ccache的主页:http://ccache.samba.org distcc的主页:http://distcc.samba.org 1.背景: 在处理一些规模相对较大的工程时,编译花费的时间可能会 ...

随机推荐

  1. thinkphp实现分页

    public function zhanshi(){ $cate = M('cate'); //实例化数据表 $count = $cate->count(); //获取总的记录数 $Page = ...

  2. 最简洁粗暴版的虚拟用户配置FTP

    最简洁粗暴版的虚拟用户配置FTP yum安装FTP: yum install vsftpd pam* db4* -y 设置为系统服务:chkconfig –level 35 vsftpd on 2.v ...

  3. Everyday is an Opportunity

    Quote Of The Day: “Everyday is an Opportunity to Learn and Grow, Don’t Waste Your Opportunity.” – Al ...

  4. Send User to a Portal Folder

    Sometimes you would want to give users the option to click a button on the page and send them back t ...

  5. [leetcode]_String to Integer (atoi)

    非常考虑思维全面性的一道题,考验是否能够考虑本问题的方方面面. 题目:将一个string转换为int.实现函数atoi()的功能. 先应该明确atoi()有哪些特殊功能:(正常的正负数情况我就不列了) ...

  6. luigi学习1

    一.luigi介绍 luigi是基于python语言的,可帮助建立复杂流式批处理任务管理系统.这些批处理作业典型的有hadoop job,数据库数据的导入与导出,或者是机器学习算法等等. luigi的 ...

  7. 如何用Ajax实现地址栏省市级联动(数据库表数据源)

    HTML: <tr> <th> <label for="textfield"><span class="red"> ...

  8. mysql连接查询经典小例题

    mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...

  9. php教程一,变量

    php是一种动态脚本语言,比较适合web开发. php支持8种变量数据类型: 四种标量类型: boolean(布尔型) integer(整型) float(浮点型,也称作 double) string ...

  10. lua进阶(一)

    第一章 概览     1.chunks              chunks是一系列语句, lua执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个chunks.      2.全局变量 ...