Quantcast
Channel: openSUSE Planet - Global
Viewing all articles
Browse latest Browse all 23310

Cheng-Ho Yang: OpenNebula 3.7.80 XEN Cluster 配置紀錄 --- Part I

$
0
0

OpenNEbula ( 簡稱 ONE ) 是一個開放原始碼套件,可以用來作為動態佈署虛擬機器在一群實體資源,目的是將一群實體叢集資源轉換成彈性的虛擬基礎設備,且可以透過動態調適工作量來進行使用。在這個紀錄中是針對如何於 OpenSUSE 12.1 中進行 XEN Cluster 的配置,並且搭配 OpenNebula 來進行這些基礎建設資源的管理操作方式。

操作環境說明

在這次的實驗架構中筆者將兩台擁有雙核心的主機作為資源的叢集,初步資訊如下表所示:

資源項目 ONE-Master1 ONE-Node01
系統版本 OpenSUSE 12.1 X86_64 OpenSUSE 12.1 X86_64
CPU Core數 2 2
IP資訊 192.168.1.27 192.168.1.25

安裝過程中,大約僅需要 1 GB 左右的磁碟空間來進行環境的配置,如下圖所示,安裝時可以於類型挑選選擇,Other --> Minimal Server Selection (Text Mode),來進行使用。

另外,記得挑選軟體套件項目於 Server Functions --> Xen Virtual Machine Host Server 挑選安裝,兩台配置都是採用相同選擇模式,如下圖所示。

步驟一:基礎環境配置

完成 OpenSUSE 12.1 X86_64 環境安裝之後,記得於開機時挑選 Xen 這個開機選項,這樣才能啟動於 Xen 運作模式中,如下圖所示。

當然,我們也可以直接修改 /boot/grub/menu.lst 組態檔案,將預設啟動的項目直接指定開機 Xen 運作模式中 ( 在這個範例操作中是將 default 改為 0 ),操作方式如下所示:

重新啟動後我們可以透過 uname -r 確認一下系統是否已經運作 Xen 的核心模式中,操作方式如下所示:

最後在基礎環境配置中,我們還需要將兩台主機的 /etc/hosts 檔案將主機名稱與 IP 位址資訊進行配置,這樣便可以完成相關設定基礎需求:

步驟二:SSH伺服器的免密碼登入驗證環境配置

接著,我們需要將 ONE-Master 與 ONE-Node01 中分別將 SSH 伺服器啟動與配置免密碼登入驗證的設定 ( 針對 root 使用者 ),操作步驟如下所示:

上面步驟分別要在ONE-Master 與 ONE-Node01 中進行操作,接著,我們需要將 ONE-Node01 所產生的公開金鑰傳遞到 ONE-Master 主機中,操作方式如下所示:

ONE-Node01:~ # scp .ssh/id_rsa.pub root@ONE-Master:/root
The authenticity of host 'one-master (192.168.1.27)' can't be established.
ECDSA key fingerprint is 15:61:a0:27:62:c6:9f:0b:e2:ce:45:28:3a:21:3a:2e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'one-master,192.168.1.27' (ECDSA) to the list of known hosts.
Password:
id_rsa.pub 100% 397 0.4KB/s 00:00

接著,我們必須在 ONE-Master 中將ONE-Master 與 ONE-Node01的公開金鑰內容放置到 .ssh/authorized_keys 檔案內,操作方式如下所示:

ONE-Master:~ # cat id_rsa.pub >> .ssh/authorized_keys
ONE-Master:~ # cat .ssh/id_rsa.pub >> .ssh/authorized_keys
ONE-Master:~ # chmod 600 .ssh/authorized_keys
ONE-Master:~ # scp .ssh/authorized_keys ONE-Node01:/root/.ssh/

The authenticity of host 'one-node01 (192.168.1.25)' can't be established.
ECDSA key fingerprint is a6:03:dc:85:a9:63:c0:36:5e:c5:b8:9e:b4:27:62:d0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'one-node01,192.168.1.25' (ECDSA) to the list of known hosts.
Password:
authorized_keys 100% 794 0.8KB/s 00:00

複製完畢後,兩台主機可以進行相關測試,確認系統管理員 root 已經不在需要密碼便可以於兩台主機間進行登入存取作業:

ONE-Master:~ # ssh ONE-Node01
Last login: Mon Oct 22 12:48:56 2012 from one-master
Have a lot of fun...
ONE-Node01:~ # ssh ONE-Master
Last login: Mon Oct 22 12:49:05 2012 from one-master
Have a lot of fun...

步驟三:於ONE-Master與ONE-Node01確認是否有安裝 XEN Hypervisor 工具

系統基礎配置完成前我們得確認一下是否安裝過程中有正確安裝 XEN Hypervisor 環境與工具,如下圖所示,可以於指令列中執行 yast 指令工具,在Virtualization群組中,選擇 Install Hypervisor and Tools項目。 ( 如果已經裝好 XEN Hypervisor 環境與工具時,在這個選單會出現四個項目 )

接著,我們必須要挑選安裝 Xen 的虛擬化環境:

由於某些套件會是在圖形環境底下才可以運作,因此安裝前系統會跟你警告是否持續安裝,請選鑿Yes繼續安裝:

安裝過程中可能會碰到套件衝突,如下所示,請選擇反安裝衝突的套件,便可以順利完成相關配置,安裝完畢後請直接 reboot 系統,並且將系統開在 XEN 的運作環境下。

步驟四:於 ONE-Master 主機上安裝 ONE 套件

完成基礎配置之後,接著,我們必須在 ONE-Master 主機上進行 ONE 套件的配置,我們可以前往 http://downloads.opennebula.org/ 網站進行下載最新的 ONE 套件,如下圖所示:

在這個範例中筆者是採用 3.7.80 這個版本來進行示範,由於安裝過程中我們會需要許多額外的函數庫支援,因此我們可以先在 ONE-Master 主機上將 Packman 套件庫添加到套件庫列表中再進行安裝作業,操作方式如下所示:

ONE-Master:~ # zypper ar -f -n "Packman Repository" http://packman.inode.at/suse/12.1/ "Packman Repository"
Adding repository 'Packman Repository' [done]
Repository 'Packman Repository' successfully added
Enabled: Yes
Autorefresh: Yes
GPG check: Yes
URI: http://packman.inode.at/suse/12.1/

接著,我們將剛才所下載到系統中的 ONE 套件檔案解開:

ONE-Master:~ # tar zxvf openSUSE-12.1-opennebula-3.7.80.tar.gz
opennebula-3.7.80/opennebula-3.7.80-1.x86_64.rpm
opennebula-3.7.80/opennebula-devel-3.7.80-1.x86_64.rpm
opennebula-3.7.80/opennebula-sunstone-3.7.80-1.x86_64.rpm
opennebula-3.7.80/opennebula-zones-3.7.80-1.x86_64.rpm
opennebula-3.7.80/src/
opennebula-3.7.80/src/opennebula-3.7.80-1.src.rpm

解開後的 ONE 套件包會包含安裝檔與Source RPM檔案,我們僅需要將編譯好的 RPM 安裝檔案進行安裝即可,操作方式如下所示:

ONE-Master:~ # cd opennebula-3.7.80/
ONE-Master:~/opennebula-3.7.80 # zypper in opennebula-*
Retrieving repository 'Packman Repository' metadata [done]
Building repository 'Packman Repository' cache [done]
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW packages are going to be installed:
apache2 apache2-prefork apache2-utils libapr-util1 libapr1 libxmlrpc++7
libxmlrpc3 libxmlrpc_abyss3 libxmlrpc_client++7 libxmlrpc_client3
libxmlrpc_packetsocket7 libxmlrpc_server++7 libxmlrpc_server3
libxmlrpc_server_abyss++7 libxmlrpc_server_abyss3 libxmlrpc_util3 opennebula
opennebula-devel opennebula-sunstone opennebula-zones pwgen ruby ruby-devel
rubygem-nokogiri rubygem-rack-1_1 rubygem-sqlite3 rubygems sqlite3 xmlrpc-c
ypserv

The following recommended packages were automatically selected:
apache2-prefork ruby-devel ypserv

The following package is recommended, but will not be installed:
mariadb

30 new packages to install.
Overall download size: 9.4 MiB. After the operation, additional 39.4 MiB will
be used.
Continue? [y/n/?] (y): <== 回答 Y 之後便會開始進行安裝

步驟五:於ONE-Node01主機上安裝 ruby 與 相關需求套件環境

由於 ONE-Node01 會直接掛載 ONE-Master 主機上所安裝好的 ONE 環境直接使用,但有些套件與套件庫並非都安裝在 /var/lib/one 目錄內,因此我們需要額外補上這些需求套件,操作方式如下所示:

ONE-Node01:~ # zypper ar -f -n "Packman Repository" http://packman.inode.at/suse/12.1/ "Packman Repository"
Adding repository 'Packman Repository' [done]
Repository 'Packman Repository' successfully added
Enabled: Yes
Autorefresh: Yes
GPG check: Yes
URI: http://packman.inode.at/suse/12.1/

ONE-Node01:~ # zypper in libmariadbclient16 libmariadbclient_r16 libmysqlclient18 libxmlrpc++7 libxmlrpc3 libxmlrpc_abyss3 libxmlrpc_client++7 libxmlrpc_client3
libxmlrpc_packetsocket7 libxmlrpc_server++7 libxmlrpc_server3 libxmlrpc_server_abyss++7 libxmlrpc_server_abyss3 libxmlrpc_util3 mariadb
mariadb-client opennebula pwgen ruby ruby-devel rubygem-nokogiri rubygem-sqlite3 rubygems sqlite3 xmlrpc-c

步驟六:於 ONE-Master 主機上配置 ONE 環境

ONE 套件安裝時會建立一個新的群組帳號 cloud 與使用者帳號 oneadmin,使用者家目錄會被配置在 /var/lib/one,如下所示:

ONE-Master:~ # id oneadmin
uid=1001(oneadmin) gid=1000(cloud) groups=1000(cloud),33(video)
ONE-Master:~ # ls /var/lib/one/
.bash_history .emacs .local .vimrc bin remotes
.bashrc .fonts .profile .xim.template datastores
.config .inputrc .ssh .xinitrc.template public_html

在ONE運作過程中,/var/lib/one/datastores 是用來作為存放系統媒體與運作的VM空間使用,因此筆者會建議將這個目錄單獨放在 SAN 或是 RAID 上,在這個範例中筆者僅以畫分一個新的分割區來進行示範:

ONE-Master:~ # fdisk /dev/sdb  [ 首先,筆者先將新添加的 HDD /dev/sdb 切割一個獨立的分割區 /dev/sdb1 ]
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xacc5e768.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

ONE-Master:~ # partprobe
ONE-Master:~ # mkfs.ext4 /dev/sdb1   [ 接著將這個分割區格式化為 EXT4 檔案系統,若是實際運用建議讀者可以改用 XFS 檔案系統 ]
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

ONE-Master:~ # tail -1 /etc/fstab [ 將掛載的作業模式寫到 /etc/fstab 組態檔案內 ]
/dev/sdb1 /var/lib/one/datastores ext4 defaults 0 0

ONE-Master:~ # mount -a [ 執行掛載作業,並確認相關檔案目錄權限是否為 oneadmin.cloud ]
ONE-Master:~ # df -h | grep datastores
/dev/sdb1 20G 172M 19G 1% /var/lib/one/datastores

ONE-Master:~ # ls -ld /var/lib/one/datastores/
drwxr-xr-x 3 root root 4096 Oct 22 13:14 /var/lib/one/datastores/
ONE-Master:~ # chown -R oneadmin.cloud /var/lib/one/datastores/

接著,我們於ONE-Master主機切換使用者身分到 oneadmin,並且載他的家目錄內建立一個子目錄 .one,將用來存取 ONE 服務的帳號密碼填寫到 .one/one_auth 檔案內,操作方式如下:

ONE-Master:~ # su - oneadmin
oneadmin@ONE-Master:~> mkdir .one
oneadmin@ONE-Master:~> echo "oneadmin:novell" > .one/one_auth
oneadmin@ONE-Master:~> chmod 600 .one/one_auth

步驟七:於 ONE-Node01主機上配置 ONE 環境

ONE-Node01主機上的 ONE環境基本上可以直接透過 NFS 協定掛載來自於 ONE-Master 主機已經安裝好的相關資源,因此,我們必須先手動於 ONE-Node01 主機中建立 oneadmin 使用者帳號資訊,操作方式如下所示:

ONE-Node01:~ # groupadd -g 1000 cloud
ONE-Node01:~ # useradd -d /var/lib/one -g 1000 -u 1001 oneadmin

接著,我們在ONE-Master主機上配置NFS伺服器將/var/lib/one 與/var/lib/one/datastores目錄共享給ONE-Node01主機來進行使用:

ONE-Master:~ # chkconfig rpcbind on
insserv: Service syslog is missed in the runlevels 4 to use service xenstored
ONE-Master:~ # rcrpcbind start
redirecting to systemctl
ONE-Master:~ # cat /etc/exports
# See the exports(5) manpage for a description of the syntax of this file.
# This file contains a list of all directories that are to be exported to
# other computers via NFS (Network File System).
# This file used by rpc.nfsd and rpc.mountd. See their manpages for details
# on how make changes in this file effective.

/var/lib/one ONE-*(rw,no_root_squash,async,no_subtree_check)
/var/lib/one/datastores ONE-*(rw,no_root_squash,async,no_subtree_check)

ONE-Master:~ # exportfs -ra
ONE-Master:~ # chkconfig nfsserver on
insserv: Service syslog is missed in the runlevels 4 to use service xenstored
ONE-Master:~ # rcnfsserver start
redirecting to systemctl

組態完 ONE-Master主機的 NFS 伺服器之後,接著,我們切換到 ONE-Node01進行 NFS 用戶端的配置,操作方式如下所示:

ONE-Node01:~ # chkconfig rpcbind on
ONE-Node01:~ # rcrpcbind start
redirecting to systemctl
ONE-Node01:~ # tail -1 /etc/fstab
ONE-Master:/var/lib/one /var/lib/one nfs bg,soft,rw 0 0
ONE-Master:/var/lib/one/datastores /var/lib/one/datastores
 nfs bg,soft,rw 0 0
ONE-Node01:~ # mkdir /var/lib/one
ONE-Node01:~ # mount -a
ONE-Node01:~ # mount | tail -2

ONE-Master:/var/lib/one on /var/lib/one type nfs4 (rw,relatime,vers=4,rsize=524288,wsize=524288,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.25,minorversion=0,local_lock=none,addr=192.168.1.27)
ONE-Master:/var/lib/one/datastores/ on /var/lib/one/datastores type nfs4 (rw,relatime,vers=4,rsize=524288,wsize=524288,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.25,minorversion=0,local_lock=none,addr=192.168.1.27)

ONE-Node01:~ # chkconfig nfs on

ONE-Node01:~ # rcnfs start

步驟八:於 ONE-Master主機上調整 ONE 啟用支援 XEN 環境

完成基本組態步驟之後,接著我們必須調整 ONE 組態檔案 ( 預設,組態檔案是定義使用 KVM ),將 XEN 虛擬化環境作為主要的支援項目,編輯 /etc/one/oned.conf 檔案,將 135 ~ 138 行與217 ~ 222註解,開啟 146 ~ 149 行與234 ~ 239 行:

註解

IM_MAD = [
name = "im_kvm",
executable = "one_im_ssh",
arguments = "-r 0 -t 15 kvm" ]

VM_MAD = [
name = "vmm_kvm",
executable = "one_vmm_exec",
arguments = "-t 15 -r 0 kvm",
default = "vmm_exec/vmm_exec_kvm.conf",
type = "kvm" ]

開啟

IM_MAD = [
name = "im_xen",
executable = "one_im_ssh",
arguments = "xen" ]

VM_MAD = [
name = "vmm_xen",
executable = "one_vmm_exec",
arguments = "-t 15 -r 0 xen",
default = "vmm_exec/vmm_exec_xen.conf",
type = "xen" ]

步驟九:於 ONE-Master 與 ONE-Node01 主機上調整 oneadmin 使用者 sudo 權限配置

因為筆者將 ONE-Master 與 ONE-Node01 都作為 XEN Host使用,因此在 ONE 運作過程中會需要使用到一些基本的 xentop、xm等指令,因此我們必須先將執行權限透過 visudo 指令工具添加下列規格:

oneadmin ALL=(ALL) NOPASSWD: /usr/sbin/xm *
oneadmin ALL=(ALL) NOPASSWD: /usr/sbin/xentop *
oneadmin ALL=(ALL) NOPASSWD: /usr/sbin/ovs_vsctl *

除此之外,讀者也必須更替一下 ONE-Master與ONE-Node01主機上的 oneadmin 使用者帳號密碼:

ONE-Master:~ # passwd oneadmin
Changing password for oneadmin.
New Password:
Bad password: too simple
Reenter New Password:
Password changed.

ONE-Node01:~ # passwd oneadmin
Changing password for oneadmin.
New Password:
Bad password: too simple
Reenter New Password:
Password changed.

步驟十:於 ONE-Master 啟動 ONE 伺服器服務

完成前面的基礎配置之後,接著我們可以在ONE-Master這台主機中,以oneadmin使用者帳號執行 one start,將 ONE 伺服器啟動,操作方式如下所示:

ONE-Master:~ # su - oneadmin
oneadmin@ONE-Master:~> one start
oneadmin@ONE-Master:~> ls  one.db
one.db

第一次啟動ONE伺服器時,會在 oneadmin 使用者帳號家目錄內產生一個 one.db 資料檔案,這裡面便是所運行的 ONE 伺服器相關資訊 ( ONE 也支援改用 MYSQL 作為儲存這些資訊的資料庫,有興趣的朋友可以參考官方網站說明配置 )

步驟十一:將 ONE-Master 與 ONE-Node01 XEN 資源添加到 ONE 伺服器中

順利啟動 ONE 伺服器之後,接著我們可以將運行中的 XEN 伺服器資源添加到 ONE 伺服器內,操作方式如下所示: ( -i  Set the information driver for the host , -v  Set the virtualization driver for the host , -n Set the network driver for the host )

oneadmin@ONE-Master:~> onehost create ONE-Master -i im_xen -v vmm_xen -n dummy
ID: 0
oneadmin@ONE-Master:~> onehost create ONE-Node01 -i im_xen -v vmm_xen -n dummy
ID: 1

接著,我們可以將這些資源建立一個叢集群組,這樣便可以將整個資源進行統合使用,操作方式如下所示:

oneadmin@ONE-Master:~> onecluster create Cluster
ID: 100
oneadmin@ONE-Master:~> onecluster addhost Cluster ONE-Master
oneadmin@ONE-Master:~> onecluster addhost Cluster ONE-Node01

到這邊為止我們便已經順利完成 ONE 運作環境,相關細部操作或者是語法使用問題讀者可以參考後面的 Ref. 文件進行閱覽。

參考文件:

延伸閱讀:


Viewing all articles
Browse latest Browse all 23310


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>