註:這篇文章是不是指導你建立一個直接在生產環境下使用CloudFoundry叢集。但如果你嘗試在自己的IaaS(哪種都行,相信我)搭建出一個CF叢集來研究下,這裡就有一個快速有效指導方法了。
下文會假設你已經有了CloudFoundry和PaaS的基本知識,體驗過MicroCloudFoundry,甚至已經建立了自己的單節點CF執行個體。
如果沒有,你需要自己先研究CF幾天,看看官網guide,然後再決定是否需要建立一個PaaS群集。
我們知道,幾乎所有種類的IaaS都支援快速備份與還原的功能,比如快照(snapshot),或建立模板(template)。使用者能夠方便的從一個虛擬機器建立另一個新的虛擬機器。這樣的話:我們應該可以只基於一個單節點CloudFoundry的“複製”來建立一個群集的。這,也就是本文的基本思路。
相比這種在每個虛擬機器安裝部分CF組件然後挨個啟動的方法http://support.cloudfoundry.com/entries/20407923-single-multi-node-vcap-deployment-using-chef,
我們的工作要麻利很多。但是問題出來了:
任何裝過一個完整的單節點CloudFoundry(尤其是在防火牆內)的人都知道,這項工作其實是非常不容易的。我們的實際工作遠比ReadMe裡的那條shell指令要複雜得多。我和Alan一起經曆過了五月份Chef工具的大崩盤,以及後來CloudFoundry各種依賴的很多變故,導致我們不得不多次修改chef的檔案,fix了好多bug。
順便提一下,github上8月的安裝指令碼也有點問題:rabbitmq-server-with-plugins-generic-unix-2.4.1.tar.gz這個包下載不下來。我們曾手動修改成舊指令碼的兩個包來安裝依然不行。沒來得及提Issue,不過應該很快會被人修正的。
關於大量外部依賴的問題,CloudFoundry現在的安裝方法是把依賴全都轉移到了CF blob 上面,就不用寫死下載依賴包的URL了,但是依賴包的名字還是hard code。如果大家對Chef的原理感興趣,我們在論壇裡放了一個專講Chef以及CF安裝入門的文章:
http://topic.csdn.net/u/20120903/23/d0d7017e-8de3-4931-839f-6c9820f8960c.html?76371
好了,言歸正傳。我們現在最希望的是,首先使用dev_setup安裝一個單獨的CloudFoundry虛擬機器,然後把它做成一個模板(template)。接下來,只要使用這個模板,我們就可以複製出N個CloudFoundry節點,然後簡單配置一下把他們連起來,一個CF叢集就可以用啦。更重要的是,這個模板可以作為一個穩定的版本儲存起來,以後的安裝直接複製來,而不必再去經曆那些驚心動魄的單節點安裝過程。(我們Lab裡面目前就有一個不同版本的CloudFoundry模板池,需要做研究的時候,直接拿來就可以用,非常方便)
好了,現在開始吧!
Step 1. 我們首先需要安裝好一個單節點CloudFoundry!
如果我們幸運的話,使用dev_setup的方法安裝一個用來當模板用的單節點CloudFoundry是個很easy的過程。下面這篇文檔的Option2就足夠了:
http://support.cloudfoundry.com/entries/20407923-single-multi-node-vcap-deployment-using-chef
但是,正如前面所說的,在各種意料之外的情況出現前,我們不妨在下面幾點上做一些準備工作。(尤其是你在公司防火牆後面做實驗)
0、確保你使用的是基於某種IaaS的一台 Ubuntu10.04 64bit 虛擬機器,越乾淨越好。然後在指定位置複製好需要的源碼包,檢查裡面有沒有空檔案夾。安裝路徑、網路代理程式等是可以用參數自訂的,千萬要多讀下面的readme:
https://github.com/cloudfoundry/vcap/tree/master/dev_setup#readme
1、很多公司禁止使用git:協議進行clone。而這樣的協議偏偏需要在CF很多gem包安裝(GemFIle)的時候中用到。
你可以試下git clone git://github.com/cloudfoundry/vcap-common.git 如果timeout了,就是被禁掉了。修改方法非常簡單:
找到所有類似於 ../vcap/cloud_controller/Gemfile 這樣的檔案,把裡面的git://替換成https://
(我是直接用sed指令替換的)。其他的位置還包括../vcap/health_manager/Gemfile 和 ../vcap/services/../Gemfile
2、我們預設是安裝所有組件的,所以直接運行../vcap/dev_setup/bin/vcap_dev_setup就可以了。接下來,盯著螢幕,你很可能會注意到下面的提示:
gpg: requesting key 83EF826A from hkp server apt.opscode.comgpg: no valid OpenPGP data found.gpg: Total number processed: 0
意思是key不能夠請求到,這是gpg請求key的連接埠被禁掉的緣故。解決方案也很簡單,添加參數通過80連接埠請求即可,直接執行:
apt-key adv --recv-keys --keyserver hkp://apt.opscode.com/packages@opscode.com.gpg.key:80 83EF826A
你就會看到正確的提示:(參數83EF826A就是你的public key,要跟最前面保持一致
)
gpg: requesting key 83EF826A from hkp server apt.opscode.comgpg: key 83EF826A: public key imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
然後再執行安裝指令碼即可。
3、不防多去看看github上各個包的commit history,就會發現幾乎每天都有bug被修正。所以,我們其實可以選擇更穩定的commit來做我們的安裝實驗。如果你pull或者reset了vcap庫的版本,別忘了更新它的子包(比如uaa什麼的)。cd到每個repo下面看看commit log,就能確保該源碼的時間了。我們做實驗時候的commit log如下:
vcapcommit decf636f565e0fb063548cfad616e94d5757c25b
Author: Harshawardhan Gadgil <hgadgil@rbcon.com>
Date: Fri Jun 22 11:56:35 2012 -0700
uaa commit 56063b744884ea98dfa89587844e56f554356541
Author: Dave Syer <dsyer@vmware.com>
Date: Fri May 18 19:14:24 2012 +0100
services commit e18b0bb360c3d86d9c210ce2e97c7230d639eec2
Author: Harshawardhan Gadgil <hgadgil@rbcon.com>
Date: Fri Jun 8 15:38:08 2012 -0700
好了,然後放心的去安裝吧。
下面列舉下常見的Troble Shooting:
1、重啟虛擬機器之後,CloudController無法啟動,log裡顯示:can not connect to the sever... 這多半是由於postgresql沒起來導致的。執行 /etc/init.d/postgresql-8.4 restart
一般就會解決問題。
2、uaa 的log有ERROR,一般情況下是安裝的時候就有問題了。最簡單的方法是把uaa升級到最新的代碼版本,然後重新執行下安裝過程就好了。
3、如果在安裝過程中出現timeout問題,通過讀track,我們不難定位到是哪個組件的那個依賴(比如tomcat的jar包)下載不下來。然後,你可以參考前面講chef的那篇文章,試著改掉下載
這些依賴的URL。
不過較新的CF已經用blob來緩衝這些依賴了,就不能這麼改了。這時,我們可以先手動下好對應版本的依賴,下面的步驟供你參考:
cd到../dev_setup/cookbooks.下;
其中../attributes/default.rb定義了各種依賴的版本,路徑等;
如果出錯的是service安裝過程,你需要查看../recipes/default.rb.定義的安裝代碼,把cf_remote_filetarball_path這一段直接注釋掉;
把下好的依賴放到
/var/cache/dev_setup下,重新run安裝指令碼就好了。
如果你碰到的問題實在解決不了,那就只好把源碼reset到舊一點的時候吧。。。。
好了,經過上面的努力,安裝一台完整的單節點CF應該不是問題了。別忘了一定要多讀上面的ReadMe,裡面有很多你需要事先瞭解的資訊。比如,你需要設定某個變數為true之後再執行安裝指令碼,才能保證你的CF有service lifecycle management功能哦。
我們會在Part2繼續講如何製作虛擬機器範本,並以此為基礎來快速構建CF叢集。