[[PageOutline]]
{{{
#!html
實作四: Xen 虛擬化叢集進階操作(二)
}}}
= 【前言】 =
* 操作說明:
* 桌面的 '''Web Broswer''' 為瀏覽器,'''終端機''' 用來輸入課程中的指令
* 黑底白字部份為'''指令''' ($ 為命令提示字元, $ 之後才是指令)
{{{
$ vim /etc/hosts
$ sudo vim /etc/hosts
$ sudo gedit /etc/hosts
}}}
* 第1個指令為 使用 '''vim''' 指令來編輯 hosts 這個文件
* 第2個指令的 '''sudo''' 為轉換成 root 管理者身份來編輯此文件 (因 hosts 文件的權限只有 root 能修改)
* 第3個指令的 '''gedit''' 給不習慣用 vim 的學員使用 (類似 windows 的 notepad)
* 白底黑字為'''文件內容'''
{{{
#!sh
127.0.0.1 localhost
}}}
* 若是文件內容前面有數字則為'''行數''' (方便學員可以快速找到文件編輯位置,下圖則為 /etc/hosts 文件的第1行)
{{{
#!sh
1 127.0.0.1 localhost
}}}
* 軟體說明:
|| Host/dom0 OS || Ubuntu 9.04 Desktop (AMD64) ||
|| VM/Guest/dmoU OS || Debian lenny (AMD64) ||
|| MPICH2 || [http://www.cebacad.net/files/mpich2_1.1.1-1debian_amd64.deb 1.1.1-1](AMD64)||
* 指令說明:
|| '''onehost''' || OpenNEbula 的 host 管理指令 ||
|| '''onevm''' || OpenNEbula 的 guest/vm 管理指令 ||
|| '''onevnet''' || OpenNEbula 的 vnet 管理指令 ||
----
= 【Step 0: 流程】 =
* 本範例使用 OpenNEbula 開啟一個有 3 個 Nodes 的 Virtual MPI Cluster 在兩台實體機器上
{{{
#!graphviz
digraph finite_state_machine {
rankdir=LR;
ranksep=0.3;
size="11,8";
node[shape=box,width=3.0];
"4.使用 OpenNEbula 開啟 Virtul MPI Cluster" -> "5.MPI 程式測試" ;
"1.建立基本 MPI Base System" -> "2. Clone MPI Base System" -> "3.編輯 Virtual MPI Cluster 設定檔";
}
}}}
----
= 【Step 1:建立基本 MPI Base System】 =
* 為了方便學員快速建置 MPI Virtual Cluster,可下載已做好的 Image
{{{
$ cd
$ scp clouder@drbl:~/mpi01_fs.tar.bz2 .
$ tar jxvf mpi01_fs.tar.bz2
}}}
----
= 【Step 2:Clone MPI Base System】 =
* 製作 mpi02 & mpi03 的 image
{{{
$ sudo cp vm01.disk.img mpi02.disk.img
$ sudo cp vm01.disk.img mpi03.disk.img
}}}
* 修改 '''(1)/etc/hosts (2)/etc/hostname (3)/etc/network/interfaces'''
* 先修改 mpi01.disk.img
* 先掛載 image 於 /mnt
{{{
$ sudo mount mpi01.disk.img /mnt -o loop
}}}
{{{
$ sudo vim /etc/hosts
}}}
{{{
#!sh
127.0.0.1 localhost
192.168.100.X mpi01
192.168.100.Y mpi02
192.168.100.Z mpi03
}}}
{{{
$ sudo vim /etc/network/interfaces
}}}
{{{
#!sh
auto eth0
iface eth0 inet static
address 192.168.100.X
netmask 255.255.255.0
gateway 192.168.100.254
}}}
{{{
$ sudo umount /mnt
}}}
* 修改 mpi02.disk.img
{{{
$ sudo mount mpi02.disk.img /mnt -o loop
$ sudo vim /mnt/etc/hostname
}}}
{{{
#!sh
mpi02
}}}
{{{
$ sudo vim /etc/hosts
}}}
{{{
#!sh
127.0.0.1 localhost
192.168.100.X mpi01
192.168.100.Y mpi02
192.168.100.Z mpi03
}}}
{{{
$ sudo vim /etc/network/interfaces
}}}
{{{
#!sh
auto eth0
iface eth0 inet static
address 192.168.100.Y
netmask 255.255.255.0
gateway 192.168.100.254
}}}
{{{
$ sudo umount /mnt
}}}
* 再修改 mpi03.disk.img
{{{
$ sudo mount mpi03.disk.img /mnt -o loop
$ sudo vim /mnt/etc/hostname
}}}
{{{
#!sh
mpi03
}}}
{{{
$ sudo vim /etc/hosts
}}}
{{{
#!sh
127.0.0.1 localhost
192.168.100.X mpi01
192.168.100.Y mpi02
192.168.100.Z mpi03
}}}
{{{
$ sudo vim /etc/network/interfaces
}}}
{{{
#!sh
auto eth0
iface eth0 inet static
address 192.168.100.Z
netmask 255.255.255.0
gateway 192.168.100.254
}}}
{{{
$ sudo umount /mnt
}}}
----
= 【PS: 規劃好 VM IP】 =
* 使用 onevent 來協助管理 IP 的分配
{{{
$ cd
$ sudo vim network.one
}}}
{{{
#!sh
NAME = "Public"
TYPE = FIXED
BRIDGE = eth0
LEASES = [IP=192.168.100.X, MAC=XX:XX:XX:XX:XX:XX]
LEASES = [IP=192.168.100.Y, MAC=YY:YY:YY:YY:YY:YY]
LEASES = [IP=192.168.100.Z, MAC=ZZ:ZZ:ZZ:ZZ:ZZ:ZZ]
}}}
{{{
$ sudo onevnet create network.one
$ sudo onevnet list
$ sudo onevnet show Public
}}}
* 記的記下 VM 對應的 MAC 和 IP,到時編輯設定檔時會用到
----
= 【Step 3:編輯 Virtual MPI Cluster 設定檔】 =
* 編輯 OpenNEbual 的 Virtual MPI Cluster 設定檔
* 編輯 mpi01 的設定檔 (主要修改 NIC 的 IP 和 MAC)
{{{
$ gedit mpi01.one
}}}
{{{
#!sh
NAME = mpi01
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/clouder/mpi01.disk.img,
clone = no,
target = sda2,
readonly = no]
DISK = [ type = swap,
size = 128,
target = "sda1",
readonly = "no" ]
NIC=[IP="192.168.100.X", MAC="XX:XX:XX:XX:XX:XX"]
}}}
* 編輯 mpi02 的設定檔 (主要修改 NIC 的 IP 和 MAC)
{{{
$ gedit mpi02.one
}}}
{{{
#!sh
NAME = mpi02
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/clouder/mpi02.disk.img,
clone = no,
target = sda2,
readonly = no]
DISK = [ type = swap,
size = 128,
target = "sda1",
readonly = "no" ]
NIC=[IP="192.168.100.Y", MAC="YY:YY:YY:YY:YY:YY"]
}}}
* 再編輯 mpi03 的設定檔 (主要修改 NIC 的 IP 和 MAC)
{{{
$ gedit mpi03.one
}}}
{{{
#!sh
NAME = mpi03
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/clouder/mpi03.disk.img,
clone = no,
target = sda2,
readonly = no]
DISK = [ type = swap,
size = 128,
target = "sda1",
readonly = "no" ]
NIC=[IP="192.168.100.Z", MAC="ZZ:ZZ:ZZ:ZZ:ZZ:ZZ"]
}}}
----
= 【Step 4:使用 OpenNEbula 開啟 Virtul MPI Cluster】 =
* 確認目前環境無其他 VM 正在執行,若是有其他 VM,可以用 onevm shutdown {vm_id} 或 onevm delete {vm_id} 來關掉或移除
* 開啟 Virtual MPI Cluster
{{{
$ onehost list
$ onevm list
$ onevm create mpi01.one
$ onevm create mpi02.one
$ onevm create mpi03.one
$ onevm list
}}}
* 若是狀態還在 pend,可以手動 deploy VM 到 pcXXX 或 pcYYY
{{{
$ onevm deploy mpi01 pcXXX
$ onevm deploy mpi02 pcYYY
$ onevm deploy mpi03 pcYYY
}}}
----
= 【Step 5:MPI 程式測試】 =
* 設定 MPI 環境的注意事項
* 須安裝 MPICH2 (本 Image 已預先安裝好了)
* 必須設定 clouder 的 ssh 免密碼登入 (Image 已預先做好了)
* /etc/hosts 必須有 mpi01、mpi02、mpi03的資訊
* 登入到 mpi01
{{{
$ ssh 192.X.X.X -l clouder
}}}
* 編輯 MPI nodes 設定檔
{{{
$ cd
$ vim mpd.hosts
}}}
{{{
#!sh
mpi01
mpi02
mpi03
}}}
* 啟動 MPI 環境
{{{
$ mpdboot -n 3 -f mpd.hosts
$ mpdtrace
}}}
* 測試指令
{{{
$ mpiexec -n 3 hostname
}}}
* 測試 MPI 程式
{{{
$ mpicc -o cpi cpi.c
}}}
* 執行 MPI 程式
{{{
$ mpiexec -n 3 ./cpi
}}}