我們提到的雲端運算一般有三種:軟體即服務(Software as a Service, SaaS),平台即服務(Platform as a Service, PaaS)和基礎架構即服務(Infrastructure as a Service, IaaS)。雲概念剛出來的時候被人說的雲裡霧裡摸不著頭,現在雲技術已經深入人心,也許你正在使用雲而自己沒有察覺呢,比如每天使用的Gmail 就在Google 大雲上。為了更能理解這三種不同的雲,我們可以拿Google 來舉例,剛好這家公司提供了三種形式的雲端服務,首先看SaaS,Google Gmail/Docs/Gtalk/Maps 這些Apps 都運行在Google 雲上,所以他們為普通用戶提供了「軟體即服務」;Google 同時提供開發人員的AppEngine,可以讓開發人員在他們的平台(Platform)上使用Python, java 等語言和他們提供的API 開發軟體和服務,所以他們為開發人員提供了“平台即服務”;Google 自己內部構建了基於GFS, BigTable, MaPReduce 之上的龐大基礎雲設施,為自己內部人員提供了“基礎架構即服務”,這就是三種不同類型的雲。
OpenNebula 是一套開源的雲端運算基礎管理工具,用來方便管理員在資料中心統一部署、創建、分配和管理大量的虛擬機,企業資料中心可以利用這套工具搭建自己的私有雲,為自己內部提供IaaS 服務,類似的開源產品還有Eucalyptus, openQRM 等。以下的安裝過程在VPSee 的兩台裝有CentOS 5.5 系統的伺服器上完成,一台伺服器做OpenNubula 前端(node00),另一台伺服器用來做節點(node01),搭建一個最小的“雲”,如果想擴充這個雲的話,只需要逐步增加節點(node02, node03, …)就可以了。
安裝與設定前端(Front-End)
增加CentOS Karan 來源:
# cd /etc/yum.repos.d
# wget http://centos.karan.org/kbsingh-CentOS-Extras.repo
# yum update
安裝OpenNebula 所需的軟體包以及編譯OpenNebula 原始碼所需的工具:
# yum install gcc gcc-c++ make openssl-devel flex bison
# yum install ruby ruby-devel ruby-docs ruby-ri ruby-irb ruby-rdoc
# yum install rubygems
# gem install nokogiri rake xmlparser
# yum install scons
# yum install xmlrpc-c xmlrpc-c-devel
CentOS 自帶的sqlite 版本不行,需要下載和編譯sqlite 3.6.17 版本:
# wget http://www.sqlite.org/sqlite-amalgamation-3.6.17.tar.gz
# tar xvzf sqlite-amalgamation-3.6.17.tar.gz
# cd sqlite-3.6.17/
# ./configure; make; make install
下載和編譯opennebula 2.0.1 原始碼包後,解壓縮、編譯和安裝:
# tar zxvf opennebula-2.0.1.tar.gz
# cd opennebula-2.0.1
# scons
# ./install.sh -d /srv/cloud/one
# ls /srv/cloud/one/
bin etc include lib share var
啟動OpenNebula 前需要設定ONE_AUTH 環境變量,這個環境變數從$HOME/.one/one_auth 這個檔案讀取,所以要先建立one_auth 這個檔案後再啟動one(OpenNebula 服務程式):
# cd /root/
# mkdir .one
# cd .one/
# cat "oneadmin:passWord" > one_auth
# one start
OpenNebula 支援KVM, Xen 和VMware 三種虛擬技術,我們還需要告訴OpenNebula 我們想用哪一種,並重啟one 以便設定生效:
# vi /etc/one/oned.conf
…
IM_MAD = [
name = "im_xen",
executable = "one_im_ssh",
arguments = "xen" ]
VM_MAD = [
name = "vmm_xen",
executable = "one_vmm_ssh",
arguments = "xen",
default = "vmm_ssh/vmm_ssh_xen.conf",
type = "xen" ]
…
# one stop
# one start
安裝和設定節點(Compute Node)
需要在每個node 上都安裝Xen 或KVM 的虛擬環境,具體請搜尋參考:在CentOS 上安裝和設定Xen 和在CentOS 上安裝和設定KVM,也需要ruby 運行環境:
# yum install ruby
交換SSH Key
因為OpenNebula Front 和Nodes 之間是透過SSH 通訊的,所以front 和nodes 之間要設定成SSH 無密碼登入避免front 執行node 上腳本或克隆鏡像的時候輸入密碼,首先在front 和nodes 上設定sshd:
# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
# /etc/init.d/ssh restart
在front (node00) 上建立key 後拷貝到node (node01):
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub node01
在1個node (node01) 上建立key 後拷貝到front (node00):
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub node01
onehost
front 和每個node 都能無密碼ssh 溝通後,就可以在front 上onehost create 指令來逐一加入node,並用onehost list 來查看是否創建成功:
# onehost create node01 im_xen vmm_xen tm_ssh
# onehost list
ID NAME CLUSTER RVM TCPU FCPU ACPU TMEM FMEM STAT
1 node01 default 0 400 400 400 3.8G 383M on
如果執行onehost create 報錯,查看oned.log 日誌發現sudo: sorry, you must have a tty to run sudo 字樣,原因則是OpenNebula 需要遠端ssh/sudo 執行指令,而CentOS 的sudo 選項requiretty 是預設開啟的,sshtty需要一個tty 才能執行,所以遠端sudo 就會出錯,:
# onehost create node01 im_xen vmm_xen tm_ssh
# tail /var/log/one/oned.log
Tue Feb 22 11:08:58 2011 [InM][I]: Command execution fail: 'if [ -x "/var/tmp/one/im/run_probes" ]; then /var/tmp/one/im/run_probes xen 172.16.39.111; else exit 42; fi'
Tue Feb 22 11:08:58 2011 [InM][I]: STDERR follows.
Tue Feb 22 11:08:58 2011 [InM][I]: sudo: sorry, you must have a tty to run sudo
Tue Feb 22 11:08:58 2011 [InM][I]: Error executing xen.rb
解決辦法就是關閉(註解掉) requiretty 這行:
# chmod 600 /etc/sudoers
# vi /etc/sudoers
#Defaults requiretty
因為VPSee 的這兩台伺服器使用了HTTP 代理程式上網,所以OpenNebula 讀取了系統的http_proxy 環境變量,在sched.log 日誌裡發現了HTTP response 錯誤,這時候需要關閉http_proxy:
# cat /var/log/one/sched.log
Tue Feb 22 14:27:39 2011 [HOST][E]: Exception raised: Unable to transport XML to server and get XML response back. HTTP response: 504
Tue Feb 22 14:27:39 2011 [POOL][E]: Could not retrieve pool info from ONE
# unset http_proxy
建立和編輯虛擬網路設定文件,然後建立一個OpenNebula 虛擬網路:
# vi small_network.net
NAME = "Small network"
TYPE = FIXED
BRIDGE = br0
LEASES = [ ip="192.168.0.5"]
LEASES = [ IP="192.168.0.6"]
LEASES = [ IP="192.168.0.7"]
# onevnet create small_network.net
# onevnet list
ID USER NAME TYPE BRIDGE P #LEASES
0 oneadmin Small network Fixed br0 N 0
onevm
建立和編輯虛擬機器的啟動設定文件,這裡的centos.5.5.x86.img 可以從http://stacklet.com/下載(收費)或是自己利用Xen 工具建立一個:
# wget http://stacklet.com/sites/default/files/centos/
centos.5.5.x86.img.tar.bz2
# tar jxvf centos.5.5.x86.img.tar.bz2
# mv centos.5.5.x86.img /srv/cloud/one/var/images/
# vi centos.one
NAME = centos
CPU = 1
MEMORY = 256
DISK = [
source = "/srv/cloud/one/var/images/centos.5.5.x86.img
target = "sda1",
clone = "yes",
readonly = "no" ]
NIC = [ MAC = "00:16:3E:00:02:64", bridge = xenbr0 ]
OS = [ bootloader = "/usr/bin/pygrub" ]
用onevm create 指令啟動上面的VM 設定文件,就會在node01 上建立一個虛擬機,用onevm list 檢視會看到prol 狀態,表示正在建立過程中,建立完畢後狀態會變成runn:
# onevm create centos.one
# onevm list
ID USER NAME STAT CPU MEM HOSTNAME TIME
1 oneadmin centos prol 0 0K node01 00 00:09:09
# onevm list
ID USER NAME STAT CPU MEM HOSTNAME TIME
1 oneadmin centos runn 0 0K node01 00 00:22:17
就這樣,我們在node00 (front) 和node01 (node) 這兩台伺服器上部署了一個最小的雲,並且在node01 上運行了一個基於Xen 的虛擬機器實例。
文章來源: http://www.vpsee.com/2011/02/install-opennebula-on-centos/