[[PageOutline]]
{{{
#!html
實作二: Xen 虛擬化叢集安裝操作
}}}
----
= 【前言】 =
 * '''''安裝前的小叮嚀__'''''
   * pcXXX 和 pcYYY 都已安裝好 Xen (若 pcYYY 還沒可以安裝好,可以參考[https://trac.nchc.org.tw/cloud/wiki/Xen_Lab1 實作一的 Step 1 ~ 2],順便複習一下早上的實作 或是 到第2台電腦使用以下 script 來自動安裝完成 )
{{{
$ scp clouder@pc-eth1:setup_Xen.sh .
$ sudo su
# ./setup_Xen.sh
# reboot
}}}
   * 目前 pcXXX 並無任何正在執行的 VM (若是有的話使用 sudo xm destroy [VM_Name|VM_ID] 來關閉)
{{{
$ sudo xm list
}}}
   * ONE 只需安裝在 '''pcXXX''' 即可 (pcXXX 及為 OpenNEbula Server)
   * pcXXX 為 '''ONE Server''' 和 '''NFS Server'''
   * 網路架構採用 Bridge
   * 共享的 Storage 採用 '''NFS''' (才能做 Migrate 和 Live Migrate )
 * 將之前透過 xm create 開啟的虛擬機器先 destroy
{{{
$ sudo xm destroy [VM_Name]
$ sudo xm list
}}}
----
= 【Step 0: 流程】 =
 * 本範例將說明如何安裝與設定 OpenNEbula 以及如何透過 OpenNEbula 來啟動管理虛擬機器
{{{
#!graphviz
digraph finite_state_machine {
 rankdir=LR;
 ranksep=0.3;
 size="11,8";
 node[shape=box,width=3.0];
 
 "4.如何使用 OpenNEbula ?" -> "5.新增虛擬機器到 One Pool" ;
 "4.如何使用 OpenNEbula ?" -> "6.利用 OpenNEbula 來開啟虛擬機器" ;
 "1.建立 OpenNEbula 所需之基本環境" -> "2. 如何下載與安裝 OpenNEbula ?" -> "3.如何設定 OpenNEbula ?"; 
}
}}}
----
= 【Step 1: 安裝需要的套件】 = 
 * '''pcXXX''' 和 '''pcYYY''' 須安裝相關套件
{{{
$ sudo aptitude -y install ruby sqlite3 libsqlite3-0 libsqlite3-dev libsqlite3-ruby libxmlrpc-c3 libxmlrpc-c3-dev scons g++ flex bison
}}}
----
= 【Step 2: 下載並安裝OpenNEbula】 =
 * 在 pcXXX 上執行 (OpenNEbula 只需安裝在 pcXXX 上)
 * 下載 source code
{{{
$ cd
$ wget http://opennebula.org/files/one-1.2.1.tar.gz
$ tar zxvf one-1.2.1.tar.gz
}}}
 * 編譯和安裝 OpenNEbula
{{{
$ cd one-1.2.1
$ sudo scons
$ sudo mkdir /home/one
$ sudo ./install.sh -d /home/one
}}}
 * 編輯 OpenNEbula 路徑
{{{
$ sudo su
# echo export ONE_LOCATION=/home/one >> ~/.bashrc
# echo export ONE_XMLRPC="http://localhost:2633/RPC2" >> ~/.bashrc
# echo export PATH='$ONE_LOCATION/bin:$PATH' >> ~/.bashrc
# source ~/.bashrc
# echo $ONE_LOCATION 
(測試 $ONE_LOCATION 路徑是否存在)
}}}
----
= 【Step 3: 編輯 ONE 設定檔】 = 
 * 在 pcXXX 上編輯,將 160~164 行註解掉,打開 169~173 行
{{{
# cd /home/one
# gedit etc/oned.conf
}}}
{{{
#!sh
21 HOST_MONITORING_INTERVAL = 3
23 VM_POLLING_INTERVAL      = 3
160 #    TM_MAD = [                
161 #    name       = "tm_ssh",
162 #    executable = "one_tm",
163 #    arguments  = "tm_ssh/tm_ssh.conf",
164 #    default    = "tm_ssh/tm_ssh.conf" ]
169      TM_MAD = [               
170      name       = "tm_nfs",                                               
171      executable = "one_tm",
172      arguments  = "tm_ssh/tm_nfs.conf",
173      default    = "tm_ssh/tm_nfs.conf" ]
}}}
----
= 【Step 4: 啟動 ONE】 =
  * 啟動 ONE 前的小叮嚀:
   1. 確認 pcXXX 和 pcYYY 已執行 '''xend start'''
   2. 兩台都可讓 '''root 免密碼 ssh 登入''' (此步驟已預先幫學員做好了,細節可參考[http://plog.longwin.com.tw/post/1/293 此網頁])
   3. 只需在 '''pcXXX''' 啟動 ONE 即可
 * 在 pcXXX 上執行
{{{
# one start
}}}
----
= 【Step 5: 新增 pcXXX 和 pcYYY 到 ONE Pool】 =
 * 在 pcXXX 上執行 (__X 和 Y 請自行修改成自己的電腦名稱__)
{{{
# onehost add pcXXX im_xen vmm_xen tm_nfs
# onehost add pcYYY im_xen vmm_xen tm_nfs
# onehost list
 HID NAME                      RVM   TCPU   FCPU   ACPU     TMEM    FMEM STAT
   1 pcXXX                       0    400    399    400  1313856       0   on
   2 pcYYY                       0    400    399    400  1313856       0   on
# onehost show pcXXX
}}}
 * '''''onehost list'''''參數說明
   * RVM - Number of running VMs 
   * TCPU - Total CPU
   * FCPU - Free CPU
   * ACPU - Available CPU (not allocated by VMs)
   * TMEM - Total Memory
   * FMEM - Free Memory
----
= 【Step 6: 使用 ONE 來開啟 VM】 =
 * 在 pcXXX 上執行
 * 編輯 vm01 的設定檔  (__X 和 Y 請自行修改成自己的電腦名稱__)
{{{
# cd /home/domains
# gedit vm01.one
}}}
{{{
#!sh
 NAME   = vm01
 CPU    = 1
 MEMORY = 128
 OS = [ kernel     = /boot/vmlinuz-2.6.26-2-xen-amd64,
       initrd     = /boot/initrd.img-2.6.26-2-xen-amd64,
       root       = sda2]
 DISK = [ source   = /home/domains/vm01/disk.img,
         clone    = no,
         target   = sda2,
         readonly = no]
 DISK = [  type     = swap,
          size     = 128,
          target   = "sda1",
          readonly = "no" ]
 NIC=[IP="192.168.100.X", MAC="00:16:00:00:00:XX"]
}}}
 * 使用 ONE 來開啟 vm01
{{{
# onevm create vm01.one 
# onevm deploy vm01 pcXXX
# onevm list
  ID     NAME STAT CPU     MEM        HOSTNAME         TIME
   1     vm01 runn   0  131072           pcXXX  00 00:04:21
# onevm show vm01
}}}
 * 使用 ssh 來登入 vm01
{{{
$ ssh 192.168.100.X -l clouder
# ping ptt.cc
CTRL+D
}}}
 * 關掉 vm01
{{{
# onevm list
# onevm shutdown vm01
# onevm list
}}}
----
= 【討論 & 休息】 =
 * 回顧:
   1. 安裝 OpenNEbula
   2. 設定 OpenNEbula
   3. 使用 '''''onehost''''' 來管理實體機器
   4. 使用 '''''onevm''''' 來管理虛擬機器
[[BR]]
[[BR]]