雖然說比不上實際 cluster 的效能,但至少簡單的測試還是可以做。
要準備的東西
1. ubuntu server x64 14.04.4 的 iso 檔2. VirtualBox 5.0 以上的版本
3. 要能對外的網路
建置步驟
1. 建立一台當作 Master 的虛擬機2. 在 Master 虛擬機裡安裝 VirtualBox Guest Additions
3. 建立一台或多台 Slaver 的虛擬機
4. 在每台 Slaver 虛擬機裡分別安裝 VirtualBox Guest Additions
5. 建立虛擬網路
6. 安裝 OpenMPI 和 SSH
建立一台當作 Master 的虛擬機
建立至少一台的 Master 和一台的 Slaver。也就是說,至少會有兩台 VM 存在。
這次的筆記就以最低限度的兩台來實作。
1. 建立一台當作 Master 的虛擬機

↑ 按 [New] 建立一台虛擬機

↑ 名字隨便取就好

↑ 記憶體依照需求配置,這邊使用最小建議需求的 768 MB

↑ 選第二個,弄顆新的虛擬硬碟出來

↑ 為了方便就用 VDI 形式就好

↑ 用動態的大小可以避免一次占用掉太多的實體硬碟空間

↑ 中間右邊的按鈕可以選擇 vdi 映像檔存放的路徑,至於大小就看需求給就好。

↑ 建好之後第一次開機會遇到要插入光碟的選項,選擇 ubuntu-14.04.4-server-amd64.iso
2. 安裝 ubuntu server x64 14.04.4

↑ 一開始就是選擇語言,這邊選自己習慣的就好,我是選 [English]

↑ 選第一個 [Install Ubuntu Server] 開始安裝

↑ 又要在選一次語言,我還是選 [English]

↑ 接著要選國家,台灣的選項在 [other]→[Asia]→[Taiwan]

↑ 選擇鍵盤配置,按<Yes>會自動偵測,我是按<No>

↑ 因為我的鍵盤配置並不是美規的所以必須要另外選擇

↑ 然後就是一直等待安裝了

↑ 這裡要輸入 Hostname,這邊的名字很重要,因為 cluster 的每個 node 就是靠這個在判斷的

↑ 輸入使用者的名字,這邊隨興就好

↑ 輸入帳戶的名字

↑ 建立使用者密碼

↑ 再次輸入,確認使用者密碼

↑ 因為我密碼打了 [1234],所以被問是否要使用這個弱密碼,然後按 <Yes>

↑ 這邊不要加密選 <No>

↑ 接著又是一直等待

↑ 確認時區是否正確

↑ 選擇 partition 形式,這邊選第二個 [Guided - use entire disk and set up LVM]

↑ 選擇磁區,也就只有這麼一個可以選

↑ 確認變更硬碟設定選 <Yes>

↑ 輸入硬碟大小,這邊預設就全部的容量

↑ 確認變更設定

↑ 因為沒有要用 proxy 所以這邊空白就好

↑ 通常伺服器應該不會隨便更新,所以這邊選 [No automatic updates]

↑ 選則伺服器的種類,因為只是單純的 cluster ,所以這邊選 OpenSSH server

↑ 安裝 GRUB 開機選單

↑ 完成安裝,按 <Continue> 重開機
在 Master 虛擬機裡安裝 VirtualBox Guest Additions
接著開機完之後就是安裝 VirtualBox Guest Additions這邊安裝 VirtualBox Guest Additions 的目的是為了和 Host 共用 shared 資料夾
或是調整螢幕解析度和其他 Host-Client 之間的溝通等功能
所以這裡的步驟不是必需的
如果沒有要用 VirtualBox 的功能和 Host 做溝通的話
這裡就可以省略不做
1. 在安裝之前先更新開發套件

↑ 更新套件清單並將套件升級
sudo aptitude update && sudo aptitude -y upgrade
2. 更新並升級完成

↑ 更新完成畫面
3. 安裝 VirtualBox Guest Additions 套件所需的開發工具

↑ 套件指令
sudo aptitude -y install make gcc xserver-xorg xserver-xorg-core build-essential module-assistant linux-headers-`uname -r` dkms

↑ 開發套件安裝完成畫面
4. 插入 VirtualBox Guest Additions iso 檔

↑ 從 [Device]->[Insert Guest Addition CD Image]
5. 開始安裝

↑ 掛載映像檔
sudo mount /dev/cdrom /media/cdrom

↑ 切換路徑到 /media/cdrom
cd /media/cdrom

↑ 切換路徑

↑ 執行 VirtualBox Guest Additions 建置及安裝
sudo ./VBoxLinuxAdditions.run

↑ 在 [Building the VirtualBox Guest Additions kernel modules] 這邊會等待一段時間

↑ 編譯和安裝完成
紅色框框裡面的那段文字一定要出現 [...done.]
這裡是最重要的,如果沒有出現就代表失敗了。

↑ 確認安裝成功
lsmod | grep vboxguest

↑ 有出現紅色的 [vboxguest] 這行就表示有完成

↑ 安裝完成後關機
sudo poweroff
為了要掛載 shared folder 所以這邊先暫時關機
6. 掛載 shared folder
回到 VirtualBox Manager

↑ 對這台虛擬機器點選 [設定]

↑ 從左邊點選 [Shared folders] 並按下圖中紅色箭頭指的圖示

↑ 選擇要位於 Host 端要被掛載的資料夾,並將 [Auto-mount]打勾

↑ 新增完成後會像這張圖一樣多出一行共用資料夾,按下 [OK] 離開
將虛擬機開機並登入

↑ 重開機後登入完成畫面

↑ 重新確認 virtualbox guest additions 有沒有被執行
lsmod | grep vboxguest
像上圖這樣表示沒有在執行
在沒有執行的情況下,是無法掛載資料夾的
所以只好再來一次了

↑ 找到 VirtualBox Guest Additions 的安裝路徑
因為剛剛已經插入過 VirtualBox Guest Additions 的映像檔了
所以這邊不用再插入一次,直接進行掛載就可以了
sudo mount /dev/cdrom /media/cdrom cd /media/cdrom ll #兩個小寫的 L 用來列出當前路徑下的東西
如果遇到
[sudo] password for <username>:
就直接輸入使用者密碼按 [Enter]

↑ 再次執行完成的結果
sudo ./VBoxLinuxAdditions.run

↑ 確認 vboxguest 有被執行
lsmod | grep vboxguest

↑ 建立一個資料夾用來掛載 shared folder,並變更權限
sudo mkdir /mnt/<shared folder name> sudo chmod 777 /mnt/<shared folder name>
<shared folder name> 的名字可以依個人喜好設定

↑ 確認資料夾內容
ls -ld /mnt/<shared folder name>

↑ 列出資料夾資訊的結果
接著要掛載資料夾

↑ 掛載資料夾的時候要使用到 Host 的 shared folder 名字
sudo mount -t vboxsf <host shared folder name> /mnt/<shared folder name>
<host shared folder name> 是掛載資料夾時設定的名稱
<shared folder name> 是剛剛取好名字的資料夾名稱

↑ 掛載完成

↑ 切換路徑到掛載的資料夾下,並列出資料夾的內容物
cd /mnt/<shared folder name> ll
如果掛載成功就可以看到 guest 端出現和 host 端資料夾一樣的內容物
7. 將掛載進來的資料複製出來
這個步驟並不是必要的
不過因為這種掛載方式是暫時的
也就是說只要一旦重開機,就要在重新掛載一次
為了省麻煩,乾脆把資料給複製到 guest 端裡面

↑ 執行複製資料夾指令
cp -avr /mnt/<shared folder name> ~/<any name>
要複製到哪個路徑基本上隨個人喜好設定即可
這邊為了作業方便,所以直接複製到家目錄底下
<shared folder name> 就是剛剛一直出現的那個名字
<any name> 基本上也是自行決定即可

↑ 複製完資料夾的結果

↑ 切換到家目錄底下看看資料夾是否有被成功建立
cd ll

↑ 切換到 <shared folder name> 路徑下

↑ 列出資料夾內的內容物
ll #列出內容
確認是否資料夾內容物都有完整的複製進去
建立一台或多台 Slaver 的虛擬機
這裡基本上和建立 Master 虛擬機的部分一樣。只有在取 hostname 的時候要有區別而已。
其實可以直接用 clone 的方式就好。
只是這樣複製出來的機器還需要從 guest 端裡面去改 hostname。
反正不趕時間,所以就慢慢再裝一台。
這裡只記錄跟建立 Master 不一樣的地方。

↑ 幫虛擬機取個跟 Master 不一樣的名字

↑ 找個空間存放虛擬機 Slaver 的映像檔

↑ 幫 Slaver 取個名字
這個這個 Hostname 不能被重複,在 MPI 的網路中,這個名字是用來做識別用的
也就是說,如果有多台 slaver 的話,可能就要取個什麼 slaver1, slaver2, slaver3...之類的
這邊因為只用一台 slaver,所以就不做編號了

↑ user name 這邊為了 MPI 通訊方便,所以取跟 Master 一樣的名稱

↑ 同樣的 username
既然是 cluster,每個節點在通訊的時候自然需要使用者權限,
為了方便操作,這邊用同樣的使用者名稱確保 MPI 通訊時可以穿過每個節點。

↑ 安裝完,並登入的畫面
接下來的安裝步驟跟 Master 就完全一樣了。
所以這邊就略過不記錄了XD
在每台 Slaver 虛擬機裡分別安裝 VirtualBox Guest Additions
這裡同樣和在 Master 虛擬機裡安裝 VirtualBox Guest Additions 的步驟一樣。完全照抄就好。
因為我懶得截圖再寫一次一樣的步驟。
所以這邊就拉回去看上面的 「在 Master 虛擬機裡安裝 VirtualBox Guest Additions」。
然後這段就這樣沒了XD
建立虛擬網路
既然是 cluster,也就是說這幾台虛擬機都要可以互相透過網路溝通。所以這邊幫每台虛擬機都增加一張虛擬網卡用來當作互聯的內網。
原本的那張虛擬網卡就繼續留著當作對外網路。
VirtualBox 提供的虛擬網路有很多種介面。
這次使用一個 NAT 做對外網路,和一個 Host-Only Adapter 做對內網路
所以一台虛擬機就會有兩張虛擬網卡。
這裡回到 VirtualBox Manager
一台一台的設定網卡。
1. 建立 Master 虛擬機的網卡

↑ 找到要設定網卡的 Master 虛擬機然後按設定
↑ 在紅色箭頭找到 [network]

↑ 找到紅色箭頭的第二個標籤

↑ 啟用這張網卡,並找到 [Host-Only Adapter] 的選項

↑ 設定好之後按 [OK] 離開
2. 建立 Slaver 的虛擬網卡

↑ 找到 Slaver 虛擬機按右鍵選 [setting] 進入設定

↑ 一樣找到紅色箭頭的 [Network]

↑ 找到 [Adapter 2] 的標籤,啟用它,並選到 [Host-Only Adapter]

↑ 完成後,按 [OK] 離開
3. 建立群組

↑ 找到 Master 虛擬機,按右鍵選 [Group]
這時候會 Master 虛擬機會跑進新的群組裡面。

↑ 新增的群組
這時候找到 Slaver 虛擬機,按住滑鼠左鍵,
用拖拉的方式把它加進剛剛建立的群組裡面。

↑ 把 Slaver 虛擬機拖進群組裡
加入群組之後的結果
就會跟下面的那張圖看起來很類似
一次出現多台虛擬機的訊息
如果有多台 slaver 的話
全部都要加進群組裡面

↑ 群組狀態
接著進入虛擬機裡面進行網卡設定
這邊使用群組開機

↑ 在群組的標籤按右鍵找到開機選項
接著你的畫面可能會像下面這樣
很多台被啟動的虛擬機

↑ 多台一起開機
分別登入兩台主機

↑ 兩台主機登入完的畫面
4. 建立 cluster 虛擬網路
首先要編輯 host 清單

↑ 對兩台分別下指令編輯 hosts 文件
Master, Slaver
sudo vi /etc/hosts
有可能會需要輸入使用者密碼,有需要就輸入。

↑ 個別的 hosts 文件內容
然後把文件分別改成下面的圖的樣子。

↑ 寫入所有的 hostname
如果不會 vi 操作的話,就自己 google 好了。
不然這樣這篇會太長XD
然後存檔離開
基本上使用 192.168.*.* 當作內網 IP
這時候 Master 的 IP 準備要使用 192.168.56.105
而 Slaver 的 IP 準備要使用 192.168.56.106
如果有多台 Slaver 的話就一直往下增加就好了。
基本上是每台都要寫,所以越多台,這個檔案就會越長。

↑ 分別查看網卡訊息
Master, Slaver
ifconfig -a
正常來說,剛剛在 VirtualBox Manager 設定的第二張網卡
因為都還沒有做設定,所以應該只會跟上圖一樣不會有其他 IP 的訊息。
這時候就要對每台的第二張網卡 eht1 寫入 IP。

↑ 寫入 IP 訊息
Master
sudo ifconfig eth1 <static ip> netmask 255.255.255.0
Slaver
sudo ifconfig eth1 <static ip> netmask 255.255.255.0
<static ip> 是剛剛在 hosts 文件裡面設定的 IP
也就是說根據每台的 Hostname 分別決定要寫入的 IP
這時候在分別查看兩台的 eth1 網卡訊息

↑ eth1 網卡訊息
Master, Slaver
ifconfig -a
這時候應該可以看到 eth1 網卡有剛剛寫進去的 IP 訊息
這邊要注意的是,這個方法是暫時性的,
也就是說,如果關機再重來的話,這個步驟就要再重做一次。

↑ ping 任何一台的位置
ping 任何一台測試看看網路有沒有通
因為這邊只有兩台,所以就變成互相 ping 對方了
Master, Slaver
ping <any ip>

↑ ping 測試的結果
從上圖可以看到這樣內部網路應該是有通了

↑ 測試對外網路
找個外部網路試試看,確認外部網路沒有掛掉。
這邊找的外部網路直接用 google 來測試。
Master, Slaver
ping www.google.com

↑ ping www.google.com 的結果
從結果來看,外部網路應該也還活著。
外部網路要活著的原因是因為等等要裝 OpenMPI 和相關套件
所以需要用到外部網路
不然正常的話,cluster 其實不需要對外網路。
安裝 OpenMPI 和 SSH
接著安裝 OpenMPI這時候同樣對著每台虛擬機下指令安裝 OpenMPI

↑ 安裝 OpenMPI 指令
Master, Slaver
sudo aptitude -y openmpi-bin libopenmpi-dev

↑ 安裝結果
這邊兩台結果不一樣是因為
其中一台之前已經裝過了...OTL
只是打這篇筆記的時候再打開來下指令
所以就會變成這樣
不然正常都沒有安裝的話
應該要出現跟右邊一樣的結果才對XD
接下來 Master 和 Slaver 分別要安裝不一樣的東西
Master 要安裝 nfs server 套件
Slaver 要安裝 SSH 和 nfs 套件

↑ 分別安裝 nfs 和 SSH
Master
sudo aptitude -y install nfs-kernel-server
Slaver
sudo aptitude -y install nfs-common ssh

↑ 分別完成安裝的結果
==========
到這邊基本上就全部結束了
測試?
因為實在太麻煩了,所以這篇筆記基本上就到這裡
測試等有空的時候再來寫下一篇好了
光是這篇筆記打到這就已經花了快20個小時了...(~_~;)
相關來源
Ubuntu 14.04.01中安装Virtualbox guest additionhttp://kiwenlau.blogspot.tw/2015/05/ubuntu-140401virtualbox-guest-addition.html
Ubuntu on VirtualBox で ホストとのファイル共有ができなくなった
http://xawa99.blogspot.tw/2013/05/Ubuntsu-Vbox-FailToMountSharedFolder.html
PGIコンパイラによる MPICH2 の使い方(Linux)
https://www.softek.co.jp/SPG/Pgi/TIPS/public/general/mpich2_use.html
OpenMPIライブラリ | スーパーコンピュータシステムの使い方
Ubuntu日本語フォーラム / LAN内でsshに接続できません(port 22: Connection timed out)
https://forums.ubuntulinux.jp/viewtopic.php?id=10673
UbuntuへのVirtualBox Guest Additionsのインストール
http://d.hatena.ne.jp/akamushi97/20140131/1391157868
Ubuntu 14.04 : Install VirtualBox Guest Additions & also create videos
http://sharadchhetri.com/2014/10/07/ubuntu-14-04-install-virtualbox-guest-additions-also-create-videos/
How to install Virtualbox guest additions on Ubuntu 14.04
http://www.binarytides.com/vbox-guest-additions-ubuntu-14-04/
Install a Cluster of Ubuntu Servers on Oracle VM VirtualBox
http://www.ixtendo.com/install-ubuntu-server-on-oracle-vm-virtualbox/
【 Virtual Box 】共有フォルダを介して、ホストOS(Windows 7) と ゲストOS(Debian/ MathLibre)でファイルやりとりするための設定
http://qiita.com/HirofumiYashima/items/6044cfc64cfa3e84f97c
Show the List of Installed Packages on Ubuntu or Debian
http://www.howtogeek.com/howto/linux/show-the-list-of-installed-packages-on-ubuntu-or-debian/
Ubuntu Linux: Start / Stop / Restart OpenSSH ( SSH ) Server
http://www.cyberciti.biz/faq/howto-start-stop-ssh-server/
MPI (Message Passing Interface Standard)
http://www.hitachi.co.jp/Prod/comp/hpc/foruser/sr8000/tebiki/mpi_exec.html
MPICH2のインストール
http://www.nslabs.jp/mpi-setup.rhtml
Sshでログインできないときに疑うべき点
http://dev.satake7.net/posts/292
Vagrantを使って2つの仮想マシン上にPacemaker + Heartbeatによる2ノードクラスタを作る
http://l-w-i.net/t/pacemaker/setup_002.txt
計算機クラスタ構築メモ
http://d.hatena.ne.jp/Tayama/20110803/1312375197
Ceph : クラスターの設定
http://www.server-world.info/query?os=Ubuntu_14.04&p=ceph
並列プログラミングのための、 linux クラスタ環境の構築
http://maijou2501.hateblo.jp/entry/20120523/1337783387
CUDA対応ビデオカード搭載の複数ホスト間でGPGPU ( その4: CUDA-aware 対応のため OpenMPI のコンパイル )
http://maijou2501.hateblo.jp/entry/2015/05/17/230059
0 件のコメント:
コメントを投稿