自建雲端:Eucalyptus

July 4th, 2009 | Categories: Linux, 電腦網路, 電腦軟體 | Tags:

Blog.XDite.net U+00BB. 自建雲端:Eucalyptus

Eucalyptus 是自建雲端的 open-source infrastructure。提供與 Amazon EC2 相容的 API (也就是可以拿 amazon 提供的 ami-tools 惡搞…)。

不過因為文件其實蠻缺乏的…XD,要架起來需要摸索很久 …

Orlando Ruby User Group 上次就有人分享了他架設的經驗,降低大家的學習曲線。該場 talk 在這裡。

============================================================

http://trac.nchc.org.tw/grid/wiki/Eucalyptus/Install

Eucalyptus 管理者手冊


【0.序言】

  • 本文件參考 Eucalyptus Administrator Guide v1.5,分為5部份:(1)必要環境的設定,(2)安裝,(3)配置,(4)管理,(5)問題排解
  • Euc 分為三個元件: 元件間透過 SOAP with WS-security 溝通,一個 Cluster 只會有一個 head node 來執行Cluster controller 和每個 node 都個有一個 Node controller
  • Euc 3個元件的架構圖:
    1. Cloud controller (CLC) -> Java 寫的程式,負責高階的資源排程和系統 accounting,此外也提供 Web services 和網頁介面讓外界使用者可以連接
    2. Cluster controller (CC) -> 用 C 撰寫,在 Apache 內當成 Web server 來佈署
    3. Node controller (NC) -> 用 C 撰寫,在 Apache 內當成 Web server 來佈署

【1.必要環境】

1.1 編譯 Euc 所需的套件

  • (1)C compilers (2)Java Developer Kit – SDK version 1.6 or above (3)Apache ant 1.6.5 or above (4)Curl development package (5)openssl development package (6)zlib development package

1.2 執行 Euc 所需的套件

Front-end (1) Java6 (2) Apache ant -> cloud controller (3)Java(TM) Cryptography Extension-JCE (4) Run a server on port 25 & Exim, postfix to send mail (5) Dhcp3-server (6) iptables, vlan(vconfig) (7) 如果從 rpm 安裝的話,必須再安裝 xen-libs RPM
Node (1) xen > 3.0.X: enabule Unix Socket for Euc to contorl Xen -> xend-unix-server yes,Euc 透過 libvirt >0.6.0 與 hypervisior 互動,需確定 libvrt 是正常的來執行 Eucalyptus Node Controller (2) Euc 支援各種網路型式 : vlan (vconfig), bridge-utils, xen-utils
與 Euc 互動的套件 需安裝 EC2 command-line tools: (1)ec2-api-tools-1.3-30349 (2)ec2-ami-tools-1.3-26357

【2.安裝】

2.1 從 Source 安裝

2.2 從套件檔安裝 (deb)

2.2.1 環境設定

  • Euc 套件檔依賴 Rampart, Axis2C, and Java libraries
  • Front-end、Node 和 Client 的時鐘需同步
  • 防火牆需允許 8443、8773、8774(Front-end) 和 8775(Node)
  • 正確的 locales (dpkg-reconfigure locales)
  • Euc 的需由 root 執行
  • Cloud Controller: eucalyptus-cloud
    • Fix cacerts for openjdk-6-jdk (missing from the package).
      $ su -
      $ echo deb http://debian.osuosl.org/debian lenny non-free >> /etc/apt/sources.list
      $ apt-get update
    • Install sun-java6-jre and create link for cacerts
      $ su -
      $ apt-get install ca-certificates sun-java6-jre
      $ mkdir -p /etc/ssl/certs/java/
      $ ln -sf /etc/java-6-sun/security/cacerts /etc/ssl/certs/java/cacerts
  • Node Controllers: eucalyptus-nc
    • 確認 Xen 的設定
      $ su -
      $ vim /etc/xend/xend-config.sxp
      (xend-http-server yes)
      (xend-unix-server yes)
      (xend-unix-path /var/lib/xend/xend-socket)
      (xend-address localhost)
      (network-script network-bridge)
      (vif-script vif-bridge)
      (dom0-min-mem 196)
      (dom0-cpus 0)
      (vncpasswd '')

2.2.2 下載 DEB 檔

  • 下載網址
  • 將 Euc 套件新增到 apt source
    $ tar zxvf eucalyptus-1.5.1-*.tar.gz
    $ cd eucalyptus-1.5.1-*
    $ su -
    $ echo deb file://${PWD} ./ >> /etc/apt/sources.list
    $ apt-get update

2.2.3 安裝 DEB 檔

  • Front-end
    $ aptitude install eucalyptus-cc eucalyptus-cloud
  • Nodes
    $ aptitude install eucalyptus-nc

【3.配置】

3.1 系統配置

  • 3.1.1 Front-end
    $ euca_conf -addcluster <clustername> <clusterhost>
  • 3.1.2 Node controler
    $EUCALYPTUS/usr/sbin/euca_conf -nodes "<nodehost1> ... <nodehostN>" $EUCALYPTUS/etc/eucalyptus/eucalyptus.conf
    $EUCALYPTUS/usr/sbin/euca_sync_key
  • 3.1.3 設定 storage 存放 image template
    for x in hostname1 hostname2 ... hostnameN ; do \
        ssh $x "mkdir -p /usr/local/instances/; /usr/sbin/euca_conf -hypervisor xen -instances /usr/local/instances /etc/eucalyptus/eucalyptus.conf"
    done
  • 3.1.4 四種網路配置

【0. 四 種 Mode】

  • 四種模式簡介:
    • SYSTEM Mode -> 最簡單的網路配置,Euc 發 MAC 位址,使用 Xen Bridge,配合已有的 DHCP DHCP 來發 IP,適合小環境測試用
    • STATIC Mode -> 此模式可讓 Euc 管理者管理 VM 的 MAC 和 IP 位址(和 SYSTEM Mode 一樣會使用到 Xen Bridge 和 DHCP),適合當管理者有一群 MAC/IP 時
    • MANAGED Mode -> 最有特色的 modes,但也相當多的約束,Euc 管理需定義一個大的網路 (private 且 unrouteable)給 VMs,Euc 使用者可定義 ‘named networks’ 和 ’security groups’,舉例來說使用者可以選擇是否允許 ping (ICMP) 或 ssh (TCP, port 22)到他們的 VMs,此外,Eua 也可定義一個 Public Network Pool(在Amazon 稱為 elastic IP)。此 mode 適用於需要 security groups, elastic IPs 和 VM network isolation

使用 SYSTEM和 STATIC 會關掉一些特色 (1)VMs間的進出規則(在Amzaon EC2 稱為 security groups) (2)使用者可控制和動態IPs分配再開機和執行期間(在Amazon EC2 稱為 elastic IPs) (3)VMs間的網路流量的的隔離

  • MANAGED-NOVLAN Mode -> 相似於 MANAGED 但沒 VM Network (VLAN) 的隔離
  • 網路模式配置,只需修改 front-end 和 node 的 ‘eucalyptus.conf’設定檔

【1. SYSTEM Mode】

### Front-end ###
VNET_MODE="SYSTEM"

### Nodes ###
VNET_MODE="SYSTEM"
VNET_BRIDGE="eth0"

【2. STATIC Mode】

### Front-end ###
VNET_MODE="STATIC"
VNET_INTERFACE
VNET_DHCPDAEMON
*VNET_DHCPUSER
VNET_SUBNET
VNET_NETMASK
VNET_BROADCAST
VNET_ROUTER
VNET_DNS
VNET_MACMAP

VNET_DHCPDAEMON="/usr/sbin/dhcpd3"
VNET_DHCPUSER="dhcpd"

VNET_SUBNET="192.168.1.0"
VNET_NETMASK="255.255.255.0"
VNET_BROADCAST="192.168.1.255"
VNET_ROUTER="192.168.1.1"
VNET_DNS="192.168.1.2"

VNET_MACMAP="AA:DD:11:CE:FF:ED=192.168.1.3 AA:DD:CE:FF:EE=192.168.1.4"

### Nodes ###
VNET_MODE="STATIC"
VNET_BRIDGE="eth0"
VNET_INTERFACE="eth0"

【3. MANAGED Mode】

### Front-end ###
VNET_MODE="MANAGED"
VNET_INTERFACE
VNET_DHCPDAEMON
*VNET_DHCPUSER
VNET_SUBNET
VNET_NETMASK
VNET_DNS
VNET_ADDRSPERNET
*VNET_PUBLICIPS

### Nodes ###
VNET_MODE="MANAGED"
VNET_INTERFACE
  • Command
    ### Front-end ###
    $ vconfig add <interface> 10
    $ ifconfig <interface>.10 192.168.1.1 up
    
    ### Nodes ###
    vconfig add <interface> 10
    ifconfig <interface>.10 192.168.1.2 up

【4. MANAGED-NOVLAN Mode】

### Forent-end ###
VNET_MODE="MANAGED-NOVLAN"
VNET_INTERFACE="eth0"
VNET_DHCPDAEMON="/usr/sbin/dhcpd3"
VNET_DHCPUSER="root"
VNET_SUBNET="192.168.0.0"
VNET_NETMASK="255.255.0.0"
VNET_DNS="140.110.16.1"
VNET_ADDRSPERNET="64"
VNET_PUBLICIPS=""

### Nodes ###
VNET_MODE="MANAGED-NOVLAN"
VNET_BRIDGE="eth0"

3.2 啟動 Euc

  • 啟動/停止
    $ $EUCALYPTUS/etc/init.d/eucalyptus start
    $ $EUCALYPTUS/etc/init.d/eucalyptus stop
  • 設定開機自動啟動
    $ ln -sf $EUCALYPTUS/etc/init.d/eucalyptus /etc/init.d/eucalyptus
    
    ### 以下兩者擇一即可 ###
    $ update-rc.d eucalyptus defaults
    $ chkconfig eucalyptus on
  • 第1次執行 Euc 的設定
    1. 在 CLC 那台 登入 https://localhost:8443/ (admin/admin)
      • 修改 admin 密碼
      • 修改 mail
      • 確認網址和 Walrus service(Euc Storage)
    2. 到’Configuration’標籤,選擇’Add Cluster’再’Save clusters’之後,會產生認証的 Key,需手動分配給所有的 nodes
      ### 這個指令會使用 rsync 和 ssh 來散佈 key ###
      $ $EUCALYPTUS/usr/sbin/euca_sync_key -c $EUCALYPTUS/etc/eucalyptus/eucalyptus.conf
    3. 最後,你必須產生使用者的認証,選擇 ‘Credentials’ 標籤和按下 ‘Download certificates’ 來下載,你能使用 基於 x509 的 EC2 tools 和第3方工具(rightscale.com)
      $ mkdir $HOME/.euca
      
      ### 當你要使用 Euc時,source 此檔案 ###
      $ source $HOME/.euca/eucarc

【4.管理】

4.1 Euc 印象檔管理

注意事項

  • 為了讓 VM Image可執行,需上傳和註冊 root disk image, Kernel or Ramdisk 到 Walrus
  • 已 source ‘eucarc’ 檔案
  • user 可以註冊 Image,但只有管理者可以註冊 kernel/ramdisks
  • 已安裝EC2 tools: ec2-api-tools-1.3-30349 和 ec2-ami-tools-1.3-26357
    • 設定好路徑 JAVA_HOME,EC2_HOME,EC2_AMITOOL_HOME,PATH
  • 可下載 Euc 提供的 Image

4.1.1 新增 Image

  • 增加 root FS,Kernel 和 Ramdisks
    ### 1. 使用 Euc 提供的 test image ###
    $ tar zxvf euca-ttylinux.tgz
    
    ### 2. 新增 Kernel 到 Walrus 並再 Euc 註冊 ###
    $ ec2-bundle-image -i ttylinux/vmlinuz-2.6.16.33-xen --kernel true
    $ ec2-upload-bundle -b kernel-bucket -m /tmp/vmlinuz-2.6.16.33-xen.manifest.xml
    $ ec2-register kernel-bucket/vmlinuz-2.6.16.33-xen.manifest.xml
    
    ### 3. 增加 root FS Image 給 Walrus ###
    $ ec2-bundle-image -i ttylinux/ttylinux.img
    $ ec2-upload-bundle -b image-bucket -m /tmp/ttylinux.img.manifest.xml
    $ ec2-register image-bucket/ttylinux.img.manifest.xml
    
    ### 4. 測試的 Image 可以不用 ramdisks,但若需要可以用以下指令新增 ###
    $ ec2-bundle-image -i <path/to/my/>initrd.img --ramdisk true
    $ ec2-upload-bundle -b <bucket_name> -m <path/to/my/>initrd.img.manifest.xml
    $ ec2-register <bucket_name>/initrd.img.manifest.xml
  • 分配 Kernel 和 Ramdisks 給 VMs (有三種方法)
    • 在 ‘ec2-bundle-image’ 步驟指定
      $ ec2-bundle-image -i <path/to/my/>vmimage.img --kernel <eki-XXXXXXXX> --ramdisk <eri-XXXXXXXX>
    • 再 ‘ec2-run-instances’ 步驟指定
      $ ec2-run-instances <emi-XXXXXXXX> --kernel <eki-XXXXXXXX> --ramdisk <eri-XXXXXXXX>
    • https://your.cloud.server:8443 選擇 ‘Configuration’ 標籤,新增 <eki-xxxxxxxx> 和 <eri-xxxxxxxx> 作為預設的 kernel 和 ramdisk

4.1.2 刪除 Image

### 1. 先取消註冊 ###
$ ec2-deregister <emi-XXXXXXXX>

### 2. 移除存於 bucke 的檔案 ###
$ ec2-delete-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY --url $S3_URL -b <bucket> -p <file prefix>

### 3. 移除 image 和 bucke (--clear) ###
ec2-delete-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY --url $S3_URL -b <bucket> -p <file prefix> --clear

4.2 Euc 管理

  • 管理者環境
    • 目前管理者只能透過命令列來管理,需注意Euc的路徑必須正確被宣告,才能正常執行指令
      ### 宣告 EUCALYPTUS 路徑 ###
      $ export EUCALYPTUS=/path/to/eucalyptus
  • 印象檔管理
    • 參考之前
  • Node管理
    ### 可編輯 $EUCALYPTUS/etc/eucalyptus/eucalyptus.conf 來修改 node 列表 ###
    NODES="vm-container-0-0 vm-container-0-1"
    
    ### 當增加node,記的將 key 複製給 node ###
    ${EUCALYPTUS}/usr/sbin/euca_sync_key
  • 使用者管理
    • 使用者註冊 -> 可到 https://your.front.end.hostname:8443/ 註冊,點選Apply for account,之候選填相關的資訊,直到管理者審核後會發mail通知註冊成功
    • 增加使用者 -> 管理者也可直接透過 wen 介面增加,點選 ‘Users’ 標籤並選 ‘Add User’
    • 管理使用者 -> 管理者透過網頁 ‘disable’ 或 ‘delete’ 使用者

【5.問題排解】

  • 重新啟動
    • 當 front-end 要重啟時,需要關掉所有的 VMs (可使用 client tools ),或是手動使用 ‘xm destroy’
      ### 再 head node 執行 ###
      /etc/init.d/eucalyptus restart
  • 問題判斷
    • 若是有些無法正常運作,第一步可以參考文件檢查 installation/configuration/networking 部份,來確定元件是否正常運作,資源是否可被 instances 使用,eucarc 使否正確被 source和認証,也可使用以下指令來了解系Cloud 系統狀態
      $ ec2-describe-availability-zones verbose
      AVAILABILITYZONE        cluster <hostname of your front-end>
      AVAILABILITYZONE        |- vm types     free / max   cpu   ram  disk
      AVAILABILITYZONE        |- m1.small     0128 / 0128   1    128    10
      AVAILABILITYZONE        |- c1.medium    0128 / 0128   1    256    10
      AVAILABILITYZONE        |- m1.large     0064 / 0064   2    512    10
      AVAILABILITYZONE        |- m1.xlarge    0064 / 0064   2   1024    20
      AVAILABILITYZONE        |- c1.xlarge    0032 / 0032   4   2048    20
      ...
  • log file -> $EUCALYPTUS/var/log/eucalyptus/
    • 在 front-end 的 CLC -> ‘cloud-output.log’ 和 ‘cloud-debug.log’
    • 在 front-end/Head Node 的 CC ‘cc.log’ 和 ‘httpd-cc_error_log’
    • 每個 node 的 NC -> ‘nc.log’ 和 ‘httpd-nc_error_log

【Reference】

============================================================

http://trac.nchc.org.tw/grid/wiki/Eucalyptus/User

Eucalyptus 使用者手冊


【1.註冊】

  • https://IP:8443 註冊個人資料,註冊完後等待 mail 通知
  • 註冊成功且登入後,下載使用者的 Certificate
    $ mkdir ~/.euca
    $ cd ~/.euca
    $ unzip name-of-the-key-zip.zip
    $ chmod 0700 ~/.euca
    $ chmod 0600 ~/.euca/*

【2.安裝 EC2 command line tools】

$ wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-30349.zip
$ unzip ec2-api-tools-1.3-30349.zip

$ export EC2_HOME=/path/to/installed/ec2-commandline-tools
$ export PATH=$PATH:$EC2_HOME/bin
$ source ~/.euca/eucarc

【3.快速開始】

  • 使用者使用 EC2 tools 來控制 Euc
  • 查詢 Euc 系統
    $ ec2-describe-images
    
    $ ec2-describe-instances
    
    $ ec2-describe-availability-zones
    
    $ ec2-describe-keypairs
  • 申請 key pair,以便 ssh 登入 instance
    $ ec2-add-keypair mykey >mykey.private
    ('mykey' is the name for the key in Eucalyptus, 'mykey.private' is the file to be used by ssh)
    
    $ chmod 0600 mykey.private
    
    $ ec2-run-instances <emi-id> -k mykey -n <number of instances to start>
  • ### 允許 instance 開啟 22 port ###
    $ ec2-authorize default -P tcp -p 22 -s 0.0.0.0/0
    
    ### 給予 Instance IP ###
    $ ec2-allocate-address
    $ ec2-associate-address <IP from allocate> -i <instance ID>
    
    ### 使用 ssh 登入 ###
    $ ssh -i mykey.private root@<accessible-instance-ip>
    
    ### 關掉 Instances ###
    $ ec2-terminate-instances <instance-id1> <instance-id2> ... <instance-idn>

Regerence

============================================================

http://trac.nchc.org.tw/grid/wiki/Eucalyptus/News1


Eucalyptus成為商業性的私有雲項目

(2009/05/04 作者:Niky)

通過來自Benchmark Capital的550萬美元,Eucalyptus準備向用戶出售開源軟件的部署、諮詢和維護服務。

當Rich Wolski 和 Woody Rollins開始Eucalyptus項目之時,他們還不知道這個項目會演變成一個商業性的通用的「私有雲」項目。現在,有了來自Benchmark Capital的550萬美元之後,Eucalyptus就成為了這樣的一個項目。

該項目起初是多所大學聯合舉行的項目的一部分,該項目旨在幫助各所學校在國家自然科學基金會超級計算機、公共雲以及大學數據中心上運行非常大型的應 用程序,但是隨著Eucalyptus的開發人員構建了一個倣傚Amazon Web Services LLC(AWS)的內部部署的軟件層和API(應用程序編程接口),Eucalyptus最終成為一個不同於原來方向的項目。

Canonical最近宣佈該公司將出貨 Eucalyptus API,將其作為 Ubuntu Linux 最新版本的一部分。通過這個API,Ubutu客戶可以構建內部雲,該內部雲可以像AWS雲那樣運作,並可以同AWS雲協同工作從而創建所謂的復合雲。 Eucalyptus 也將會像 Google App Engine(谷歌應用引擎)那樣運作。

Eucalyptus改採用的命令和其他工具同公共雲對話的命令相同,而且可以將這些命令轉換為Eucalyptus控制,讓用戶可以隨需配置內部 服務器和資源。不過,Eucalyptus的目標並不是通過私有雲來創建更為自動化的數據中心,Eucalyptus也不會動態地、自動地擴展應用程序或 支持實時遷移。

Eucalyptus的用戶可以利用他們現有的服務器,只要他們是在特定類型的架構上運行這些服務器。Eucalyptus數據中心不支持 VMware或微軟的Hyper-V虛擬化,而是要求使用Citrix System Inc.的Xen、基於Linux內核的虛擬機或Sun的xVM,這對於用戶來說可能是個很大的限制。Eucalyptus目前還只能在 Ubuntu,CentOS,Debian或OpenSUSE上運行。

Eucalyptus一邊會繼續開源地提供同名的軟件,一邊會開始出售相關的部署、諮詢和維護服務。今年第三季度,新的產品將會問世,而且該產品的功能將超出AWS的功能範圍。

Eucalyptus希望提供針對新存儲架構的支持,不同的用戶收費方式,以及更加精細的服務水平協議管理等。Eucalyptus聯合創始人Wolski在一次採訪時表示:「公共雲並不一定會根據企業自己數據中心的要求對其功能進行調整。」

迄今為止,Eucalyptus的代碼下載次數已達1.4萬次,下載用戶來自350多家公司,而且Eucalyptus已經收到了來自一些財富100強公司的意向,雖然這些大公司希望構建靈活的、可擴展的計算資源池,不過它們仍然不放心將數據放在網絡上。

Wolski預計Eucalyptus將會有多種使用情境。除了作為私有雲和復合雲的一部分外,他預計一些公司還會將Eucalyptus作為開發 平台以構建應用程序,然後將這些應用程序運行在AWS上,這樣這些公司就會得到一個內部測試環境,或者在Amazon出現故障的時候,它們可以擁有一個故 障復原模式。

No comments yet.