[[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 在兩台實體機器上 * 確認目前並無任何 VM 再執行 {{{ $ onevm list }}} {{{ #!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 /home/domains $ scp clouder@drbl:~/mpi01_fs.tar.bz2 . $ tar jxvf mpi01_fs.tar.bz2 }}} ---- = 【Step 2:Clone MPI Base System】 = * 製作 mpi02 & mpi03 的 image {{{ $ sudo cp mpi01.disk.img mpi02.disk.img $ sudo cp mpi01.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 gedit /mnt/etc/hosts }}} {{{ #!sh 127.0.0.1 localhost 192.168.100.X mpi01 192.168.100.Y mpi02 192.168.100.Z mpi03 }}} {{{ $ sudo gedit /mnt/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 gedit /mnt/etc/hostname }}} {{{ #!sh mpi02 }}} {{{ $ sudo gedit /mnt/etc/hosts }}} {{{ #!sh 127.0.0.1 localhost 192.168.100.X mpi01 192.168.100.Y mpi02 192.168.100.Z mpi03 }}} {{{ $ sudo gedit /mnt/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 gedit /mnt/etc/hostname }}} {{{ #!sh mpi03 }}} {{{ $ sudo gedit /mnt/etc/hosts }}} {{{ #!sh 127.0.0.1 localhost 192.168.100.X mpi01 192.168.100.Y mpi02 192.168.100.Z mpi03 }}} {{{ $ sudo gedit /mnt/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: 令用 onevnet 管理 IP (可省略)】 = * 使用 onevent 來協助管理 IP 的分配 {{{ $ cd $ sudo gedit 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/domains/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/domains/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/domains/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.168.100.X -l clouder }}} * 啟動 MPI 環境 {{{ $ mpdboot -n 3 -f mpd.hosts $ mpdtrace }}} * 測試指令 {{{ $ mpiexec -n 3 hostname }}} * 測試 MPI 程式 {{{ $ mpicc -o cpi cpi.c }}} * 執行 MPI 程式 {{{ $ mpiexec -n 3 ./cpi }}} * 關閉所有的 VM {{{ $ onevm shutdown mpi01 $ onevm shutdown mpi02 $ onevm shutdown mpi03 }}}