1. 程式人生 > >distcc 分散式部署步驟

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 [email protected] 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分散式叢集。
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 監視器(這樣就可以觀察正在發生什麼事!