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 監視器(這樣就可以觀察正在發生什麼事!