Jump to: navigation, search

Difference between revisions of "Obsolete:Aaron Huang"

Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
Openstack Nova (模式:單一控制台與多個節點 )繁體中文 安裝紀錄
+
第一篇 建立nova 系統 控制中心Nova 也被稱為 [[OpenStack]] Compute , 是一套用開源控制基礎架構Iaas 的雲端運算平台軟體。它的架構與功能類似Amazon EC2 與 Rackspace Cloud Servers. Nova 它本身是不包含虛擬化軟體,它是定義了一個驅動既有底層虛擬化作業系統的機制,並且將功能擴展為透過web API來進行操作。  Openstack Nova (模式:單一控制台與多個節點 )繁體中文 安裝紀錄nova安裝硬體條件'''一 環境要求'''1.至少兩台一般電腦 安裝nova-compute需求CPU有支援Virtualization- CPU,若要查是否自己的cpu是否支援可以打egrep -c '(vmx|svm)' /proc/cpuinfo 檢查cpu是否支援虛擬化,如果算出來的數字大於 0 的話,就表示有支援了,不過還是記得要去 BIOS 裡確認是否有 Enable CPU Virtualization 的功能喔上 AMD 的官方網站查詢CPU是否支援ñ  [http://www.amdtaiwan.com.tw/us-en/Processors/ProductInformation/0<sub>30_118,00.shtml http://www.amdtaiwan.com.tw/us-en/Processors/ProductInformation/0</sub>30_11...]上 Intel 的官方網頁查詢CPU是否支援ñ  http://processorfinder.intel.com/Default.aspx2. A.網路環境要求每台電腦配裝雙網卡(最好能上 GIGALAN )    B.需要網路環境有兩台一般Switch或者 Hub C.需要有兩個區段的網段,且兩部機器的外部網路(public),  與內部網路(Rang)必須個別的可找到對方使用ping 指令能有回應3.Linux版本:ubuntu 11.04 Server LTS4.硬碟空間則須看你把openstack nova 的分成幾個元件安裝,我們的例子是裝一台All in one的
 +
{| border="1" cellpadding="2" cellspacing="0"
 +
|-
 +
 +
|  {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image002.gif
 +
|}
  
建立nova Controller
+
'''二 網路拓璞架構圖''''''圖一'''''' '''
 +
{| border="1" cellpadding="2" cellspacing="0"
 +
|<tablestyle="margin-left:2.75pt;border-collapse:collapse;"<sup>|  width="161px" style="width:120.45pt;border:solid black 1.0pt;  border-right:none;padding:2.75pt 2.75pt 2.75pt 2.75pt">電腦
 +
|<</sup>|  width="161px" style="width:120.45pt;border:solid black 1.0pt;  border-right:none;padding:2.75pt 2.75pt 2.75pt 2.75pt"> eth0
 +
|<<sup>|  width="161px" style="width:120.5pt;border:solid black 1.0pt;  border-right:none;padding:2.75pt 2.75pt 2.75pt 2.75pt">eth1
 +
|-
 +
|<<sup>|  width="161px" style="width:120.45pt;border-top:none;border-left:  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;  padding:2.75pt 2.75pt 2.75pt 2.75pt">Nova-CC
 +
|<</sup>|  width="161px" style="width:120.45pt;border-top:none;border-left:  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;  padding:2.75pt 2.75pt 2.75pt 2.75pt">10.10.10.1/24
 +
|<<sup>|  width="161px" style="width:120.5pt;border-top:none;border-left:  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;  padding:2.75pt 2.75pt 2.75pt 2.75pt">192.168.104.11/24
 +
|-
 +
|<<sup>|  width="161px" style="width:120.45pt;border-top:none;border-left:  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;  padding:2.75pt 2.75pt 2.75pt 2.75pt">Nova-1
 +
|<</sup>|  width="161px" style="width:120.45pt;border-top:none;border-left:  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;  padding:2.75pt 2.75pt 2.75pt 2.75pt">10.10.10.2/24
 +
|<<sup>|  width="161px" style="width:120.5pt;border-top:none;border-left:  solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none;  padding:2.75pt 2.75pt 2.75pt 2.75pt">192.168.104.12/24
 +
|}
  
Nova 也被稱為 [[OpenStack]] Compute , 是一套用開源控制基礎架構Iaas 的雲端運算平台軟體。它的架構與功能類似Amazon EC2 與 Rackspace Cloud Servers. Nova 它本身是不包含虛擬化軟體,它是定義了一個驅動既有底層虛擬化作業系統的機制,並且將功能擴展為透過web API來進行操作。如圖一所示 API Server 透過Openstack API 與EC2 API 來管理所有的Hypervisor 機制
+
若以此圖將網路環境設好後請利用ping指令測試兩台電腦的兩個網段是否可以互相連接成功'''三'''''':''''''安裝 ''''''nova-controler '''Setp-1 更新安裝之前先進行更新 '''sudo apt-get update ;sudo apt-get upgrade''' Setp-2 '''設定安裝網路環境''''''目標:安裝 bridge ''''''指令'''''': sudo apt-get install bridge-utils ''''''檢查 '''''':dpkg -l | grep bridge-utils ''''''成功結果 :'''ii bridge-utils 1.4-5ubuntu2 Utilities for configuring the Linux Ethernet bridge'''錯誤狀況''''''/''''''故障排除'''''': '''網路可能不通 或者 apt-get 因網路環境無法更新''' '''指令:''' sudo nano /etc/network/interfaces ''''''編輯''''''ok ''''''重啟 ''''''sudo /etc/init.d/networking restart'''auto loiface lo inet loopbackauto br100iface br100 inet staticbridge_ports eth0bridge_stp offbridge_maxwait 0bridge_fd 0address 10.10.10.1netmask 255.255.255.0 auto eth1iface eth1 inet staticaddress 192.168.104.11netmask 255.255.255.0broadcast 192.168.104.255gateway 192.168.104.254dns-nameservers 61.64.127.1 檢查 :ifconfig成功結果 : br100    Link encap:Ethernet HWaddr 00:21:5e:01:02:33          inet addr:10.10.10.1 Bcast:10.10.10.255 Mask:255.255.255.0          inet6 addr: fe80::221:5eff:fe01:233/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:189 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:0 (0.0 B) TX bytes:18749 (18.7 KB) eth0      Link encap:Ethernet HWaddr 00:10:18:1a:48:13          inet addr:192.168.104.11 Bcast:192.168.104.255 Mask:255.255.255.0          inet6 addr: fe80::210:18ff:fe1a:4813/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:6470 errors:0 dropped:0 overruns:0 frame:0          TX packets:473 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:690979 (690.9 KB) TX bytes:108272 (108.2 KB)          Interrupt:16 eth1      Link encap:Ethernet HWaddr 00:21:5e:01:02:33          inet6 addr: fe80::221:5eff:fe01:233/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:98 errors:0 dropped:0 overruns:0 frame:0          TX packets:148 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:8820 (8.8 KB) TX bytes:17781 (17.7 KB)          Interrupt:17 lo        Link encap:Local Loopback          inet addr:127.0.0.1 Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING MTU:16436 Metric:1          RX packets:4 errors:0 dropped:0 overruns:0 frame:0          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:240 (240.0 B) TX bytes:240 (240.0 B)'''錯誤狀況''''''/''''''故障排除'''''': ''''''失敗 ''''''networking ''''''是無法 ''''''restart ''''''大概就是編輯錯誤''''''Setp-3 安裝NTP Server'''Nova的各個所有組件的[[OpenStack]]要同步。 我們需要運做 NTPServer將每個組件同步時間'''指令'''''': ''''''sudo apt-get install ntp''''''檢查 :''''''dpkg -l | grep ntp ''''''成功結果 '''''':''''''ii ntp                  1:4.2.6.p2+dfsg-1ubuntu5.1                Network Time Protocol daemon and utility programs''''''ii ntpdate          1:4.2.6.p2+dfsg-1ubuntu5.1                client for setting system time from NTP servers''''''錯誤狀況''''''/''''''故障排除'''''':''''''網路可能不通 或者 ''''''apt-get ''''''因網路環境無法更新'''安裝完成後接著我們必須編輯sudo vi /etc/ntp.conf 將底下這兩行加入後存檔server 127.127.1.0fudge 127.127.1.0 stratum 10 然後我們將 NTP Server 重新啟動sudo /etc/init.d/ntp restart* Stopping NTP server ntpd                                                                                            [ OK ] * Starting NTP server ntpd                                                                                            [ OK ]'''Setp-4 安裝mysql-server 設定nova需要的資料庫環境'''''' '''[[OpenStack]] Nova提供兩種Database PostgreSQL or MySQL 我們選擇以MySQL進行'''目標:安裝 mysql-server ''''''指令'''''': ''''''sudo apt-get install -y mysql-server '''接著我們會看到安裝的過程會需要設MySQL 的password 且需要輸入兩次一樣密碼按 ok,請設定一組密碼並將該密碼記住
 +
{| border="1" cellpadding="2" cellspacing="0"
 +
|-
 +
 +
|  {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image005.gif
 +
|}
  
nova安裝硬體條件
+
    '''檢查 :''''''dpkg -l | grep mysql-server''''''成功結果 :'''ii mysql-server  5.1.54-1ubuntu4    MySQL database server (metapackage depending on the latest version)ii mysql-server-5.1  5.1.54-1ubuntu4  MySQL database server binaries and system database setupii mysql-server-core-5.1  5.1.54-1ubuntu4          MySQL database server binaries'''錯誤狀況''''''/''''''故障排除'''''': '''網路可能不通 或者 apt-get 因網路環境無法更新安裝完成後必須在將nova的資料庫環境設定完成請一以下步驟完成,我們以較簡單 4.個步驟完成方式將底下的$MYSQL_PASS 都改成 剛剛所設定的[[MySql]]密碼,例如都設成novapasswd1'''.sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;' '''2.'''sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;" '''3.'''sudo mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR 'root'@'%' = PASSWORD('$MYSQL_PASS');" ''' 1'''.''''''sudo mysql -uroot -p'''novapasswd''' -e 'CREATE DATABASE nova;' '''2.'''sudo mysql -uroot -p'''novapasswd''' -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;" '''3.'''sudo mysql -uroot -p'''novapasswd''' -e "SET PASSWORD FOR 'root'@'%' = PASSWORD(''''novapasswd'''');" ''''''4.''''''sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf ; sudo service mysql restart'''mysql start/running, process 22072'''5.''''''接著我們安裝 ''''''phpmysql''''''sudo apt-get -y install apache2 php5 libapache2-mod-auth-mysql php5-mysql ''''''phpmyadmin ''''''來方便以後查詢''''''nova database''''''狀態'''''',''''''安裝過程一樣需要輸入密碼'''''',''''''請輸入''''''mysql root ''''''密碼 這個例子中我們輸入'''novapasswd'''
 +
''''''我們可以輸入網址 '''[http://nova-cc/ http:// nova-cc]''' ip/phpmyadmin/ ''''''來查看與管理資料庫'''
 +
{| border="1" cellpadding="2" cellspacing="0"
 +
|-
 +
 +
|  {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image007.jpg
 +
|}
  
* 一 環境要求
+
    '''
 +
{| border="1" cellpadding="2" cellspacing="0"
 +
|-
 +
|  
 +
|  {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image009.jpg
 +
|}
  
1.至少兩台一般電腦 安裝nova-compute需求CPU有支援Virtualization- CPU,若要查是否自己的cpu是否支援可以打
+
  <<BR>> Setp-5 安裝Nova-Volumes'''先將硬碟分割完成'''fdisk /dev/sda''''''我們先把空間分出一區做''''''Linux LVM ''''''sudo apt-get install lvm2 ''''''partprobe''''''fdisk -l'''''' ''' Device Boot      Start        End      Blocks  Id System/dev/sda1  *          1        2432    19530752  83 Linux/dev/sda2            2432        3428    8000512  82 Linux swap / Solaris/dev/sda4            3428        9729    50615904+  5 Extended'''/dev/sda5  '''        3428        9729    50615873  8e Linux LVM'''pvcreate /dev/sda5'''Physical volume "/dev/sda5" successfully created'''vgcreate nova-volumes /dev/sda5''' Volume group "nova-volumes" successfully created'''sudo sed -i 's/false/true/g' /etc/default/iscsitarget ''''''service iscsitarget start''''''service nova-volume start'''  '''Setp-6 安裝nova 元件''''''目標:安裝 Nova Components''''''指令'''''': ''''''sudo apt-get install -y rabbitmq-server nova-common nova-doc python-nova nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute apt-get install glance''''''檢查 '''''':'''dpkg -l | grep rabbitmq-server; dpkg -l | grep nova-common;dpkg -l | grep nova-doc; dpkg -l | grep python-nova ; dpkg -l | grep nova-api; dpkg -l | grep nova-network; dpkg -l | grep nova-volume; dpkg -l | grep nova-objectstore; dpkg -l | grep nova-scheduler; dpkg -l | grep nova-compute ; dpkg -l | grep euca2ools ; dpkg -l |grep unzip; dpkg -l | grep bridge-utils '''成功結果 :'''ii rabbitmq-server  2.3.1-1ubuntu1  An AMQP server written in Erlangii nova-common    2011.2-0ubuntu1 [[OpenStack]] Compute - Nova - common filesii nova-doc    2011.2-0ubuntu1        [[OpenStack]] Compute - Nova - documetationii python-nova    2011.2-0ubuntu1  [[OpenStack]] Compute - Nova - Python librariesii python-novaclient  2.4-0ubuntu1  client library for [[OpenStack]] Compute APIii nova-api 2011.2-0ubuntu1            [[OpenStack]] Compute - Nova - API frontendii nova-network  2011.2-0ubuntu1  [[OpenStack]] Compute - Nova - Network thingamajigii nova-volume 2011.2-0ubuntu1    [[OpenStack]] Compute - Nova - storageii nova-objectstore 2011.2-0ubuntu1 [[OpenStack]] Compute - Nova - object storeii nova-scheduler 2011.2-0ubuntu1  [[OpenStack]] Compute - Nova - Schedulerii nova-compute 2011.2-0ubuntu1  [[OpenStack]] Compute - Nova - compute nodeii euca2ools    1.3.1-0ubuntu7            managing cloud instances for Eucalyptusii unzip    6.0-4ubuntu1                  De-archiver for .zip filesii glance      2011.2-0ubuntu1        [[OpenStack]] Image Registry and Delivery Service - Daemonsii python-glance    2011.2-0ubuntu1  [[OpenStack]] Image Registry and Delivery Service - Python library'''錯誤狀況''''''/''''''故障排除'''''': '''網路可能不通 或者 apt-get 因網路環境無法更新設定nova 環境 '''sudo vi /etc/nova/nova.conf'''--dhcpbridge_flagfile=/etc/nova/nova.conf--dhcpbridge=/usr/bin/nova-dhcpbridge--logdir=/var/log/nova--state_path=/var/lib/nova--lock_path=/var/lock/nova--verbose--s3_host=192.168.104.11  ###外部ip--rabbit_host=10.10.10.1    ###內部ip--cc_host=10.10.10.1          ###內部ip--ec2_url=http://192.168.104.11:8773/services/Cloud  ###外部ip--fixed_range=10.0.0.0/8  --network_size=256--FAKE_subdomain=ec2  --routing_source_ip=10.10.10.1    ###內部ip--sql_connection=mysql://root:nova@192.168.104.11/nova ###外部ip 需要mysql帳號:密碼--glance_host=10.10.10.1    ###內部ip--image_service=nova.image.glance.[[GlanceImageService]]--iscsi_ip_prefix=10.10.10.    接著設定好後需要建立'''1.sudo sed -i 's/false/true/g' /etc/default/iscsitarget ; sudo service iscsitarget restart'''''' '''* Removing iSCSI enterprise target devices:                [ OK ] * Stopping iSCSI enterprise target service:                  [ OK ] * Removing iSCSI enterprise target modules:            [ OK ] * Starting iSCSI enterprise target service                  [ OK ]                                                                                    [ OK ]'''2.''''''指令'''''': ''''''sudo groupadd nova ; chmod 644 /etc/nova/nova.conf ''''''  ''''''檢查 '''''':''''''ls -la /etc/nova/nova.conf''''''成功結果 '''''':'''-rw-r--r-- 1 root nova 544 2011-08-06 01:15 /etc/nova/nova.conf'''3.''''''指令'''''': ''''''sudo /etc/init.d/libvirt-bin start; sudo start nova-network; sudo start nova-compute; sudo start nova-api; sudo start nova-objectstore; sudo start nova-scheduler; sudo start nova-volume; sudo start glance-api; sudo start glance-registry''''''成功結果 '''''':'''Since the script you are attempting to invoke has been converted to anUpstart job, you may also use the start(8) utility, e.g. start libvirt-binstart: Job is already running: nova-networkstart: Job is already running: nova-computestart: Job is already running: nova-apistart: Job is already running: nova-objectstorestart: Job is already running: nova-schedulernova-volume start/running, process 21386start: Job is already running: glance-apistart: Job is already running: glance-registry  '''4.sudo nova-manage db sync ''''''sudo nova-manage user admin nova'''export EC2_ACCESS_KEY=7f29fa0c-7ad1-4c4f-9105-3637daa9cd6dexport EC2_SECRET_KEY=4617cac1-6851-47e8-9c2f-1aef37f1bcef'''sudo nova-manage project create mycloud nova''''''sudo nova-manage network create 10.10.10.0/24 1 256''''''mkdir -p /home/nova/creds''''''sudo nova-manage project zipfile mycloud nova /home/nova/creds/novacreds.zip''''''unzip /home/nova/creds/novacreds.zip -d /home/nova/creds/'''Archive: /home/nova/creds/novacreds.zip extracting: /home/nova/creds/novarc extracting: /home/nova/creds/pk.pem extracting: /home/nova/creds/cert.pem extracting: /home/nova/creds/cacert.pem'''root@nova-cc:~# sudo chown -R nova:nova /home/nova/creds/''''''root@nova-cc:~# ls -la /home/nova/creds/'''total 32drwxr-xr-x 2 nova nova 4096 2011-08-06 03:15 .drwxr-xr-x 3 root root 4096 2011-08-06 03:10 ..-rw------- 1 nova nova 1029 2011-08-06 03:11 cacert.pem-rw------- 1 nova nova 2503 2011-08-06 03:11 cert.pem-rw-r--r-- 1 nova nova 5786 2011-08-06 03:11 novacreds.zip-rw------- 1 nova nova 981 2011-08-06 03:11 novarc-rw------- 1 nova nova 887 2011-08-06 03:11 pk.pem'''source /home/nova/creds/novarc''''''sudo /etc/init.d/libvirt-bin restart; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry '''Since the script you are attempting to invoke has been converted to anUpstart job, you may also use the stop(8) and then start(8) utilities,e.g. stop libvirt-bin ; start libvirt-bin. The restart(8) utility is also available.libvirt-bin stop/waitinglibvirt-bin start/running, process 23598nova-network start/running, process 23620nova-compute start/running, process 23648nova-api start/running, process 23663nova-objectstore start/running, process 23674nova-scheduler start/running, process 23699nova-volume start/running, process 23708glance-api start/running, process 23715glance-registry start/running, process 23732root@nova-cc:~# '''euca-describe-availability-zones verbose'''AVAILABILITYZONE        nova    availableAVAILABILITYZONE        |- nova-ccAVAILABILITYZONE        | |- nova-compute      enabled :-) 2011-08-06 08:15:15AVAILABILITYZONE        | |- nova-scheduler    enabled :-) 2011-08-06 08:15:13AVAILABILITYZONE        | |- nova-network      enabled :-) 2011-08-06 08:15:13AVAILABILITYZONE        | |- nova-volume        enabled :-) 2011-08-06 08:15:13 '''Nova Dashboard ''''''安裝''''''sudo apt-get install -y bzr  ''''''sudo easy_install virtualenv '''Searching for virtualenvReading http://pypi.python.org/simple/virtualenv/Reading http://virtualenv.openplans.orgReading http://www.virtualenv.orgBest match: virtualenv 1.6.4Downloading http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz#md5=1072b66d53c24e019a8f1304ac9d9fc5Processing virtualenv-1.6.4.tar.gzRunning virtualenv-1.6.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-qWaoju/virtualenv-1.6.4/egg-dist-tmp-yFJeF5warning: no previously-included files matching '*.*' found under directory 'docs/_templates'Adding virtualenv 1.6.4 to easy-install.pth fileInstalling virtualenv script to /usr/local/bin Installed /usr/local/lib/python2.7/dist-packages/virtualenv-1.6.4-py2.7.eggProcessing dependencies for virtualenvFinished processing dependencies for virtualenv '''sudo bzr init-repo . '''Shared repository with trees (format: 2a)Location: shared repository: .'''sudo bzr branch lp:openstack-dashboard -r 46 /opt/osdb ''' {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image011.jpg||width="639",height="55"}} '''cd /opt/osdb ''''''sudo sh run_tests.sh ''' {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image013.jpg||width="603",height="529"}}
 
+
'''cd openstack-dashboard'''''' ''''''cat /home/nova/creds/novarc''''''sudo nano /opt/osdb/openstack-dashboard/local/local_settings.py ''' {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image015.jpg||width="634",height="199"}} {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image017.jpg||width="558",height="115"}}
egrep -c '(vmx|svm)' /proc/cpuinfo 檢查cpu是否支援虛擬化,如果算出來的數字大於 0 的話,就表示有支援了,不過還是記得要去 BIOS 裡確認是否有 Enable CPU Virtualization 的功能喔
+
'''sudo tools/with_venv.sh dashboard/manage.py syncdb ''' {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image019.jpg||width="642",height="83"}} '''sudo tools/with_venv.sh dashboard/manage.py runserver 0.0.0.0:8000'''''' ''''''輸入 ''''''http://IP:8000''' {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image021.jpg||width="642",height="382"}}
 
+
'''這樣我們就完成了一個具備 ''''''Dashboard (Web interface )''''''的 ''''''Nova ''''''控制中心'''''',''''''這個控制中心具有''''''nova-compute''''''功能但這樣無法表現''''''openstack''''''最大的優勢'''''',''''''彈性擴張計算能力''''''接著我們建立其他的''''''node(nova-compute),''''''讓整理系統擴大'''''',''''''您可以以此方法建立更多的節點'''''',''''''請繼續第二篇說明''''''有就是圖一''''''nova-1''''''電腦''''''第二篇''''''接著我們必須一樣先設定好網路環境與NTPServer''''''目標:設定網路環境''''''指令'''''':''''''sudo apt-get install bridge-utils''''''檢查 :''''''dpkg -l | grep bridge-utils ''''''成功結果 '''''':'''ii bridge-utils 1.4-5ubuntu2 Utilities for configuring the Linux Ethernet bridge'''錯誤狀況''''''/''''''故障排除'''''':'''網路可能不通 或者 apt-get 因網路環境無法更新''' '''指令:''' sudo vi /etc/network/interfaces ''''''編輯''''''ok ''''''重啟 ''''''sudo /etc/init.d/networking restart'''auto loiface lo inet loopbackauto br100iface br100 inet staticbridge_ports eth0bridge_stp offbridge_maxwait 0bridge_fd 0address 10.10.10.2netmask 255.255.255.0 auto eth0iface eth0 inet staticaddress 192.168.104.12netmask 255.255.255.0broadcast 192.168.104.255gateway 192.168.104.254dns-nameservers 61.64.127.1 檢查 :ifconfig成功結果 : br100    Link encap:Ethernet HWaddr 00:21:5e:01:02:33          inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0          inet6 addr: fe80::221:5eff:fe01:233/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:189 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:0 (0.0 B) TX bytes:18749 (18.7 KB) eth0      Link encap:Ethernet HWaddr 00:10:18:1a:48:15          inet addr:192.168.104.12 Bcast:192.168.104.255 Mask:255.255.255.0          inet6 addr: fe80::210:18ff:fe1a:4813/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:6470 errors:0 dropped:0 overruns:0 frame:0          TX packets:473 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:690979 (690.9 KB) TX bytes:108272 (108.2 KB)          Interrupt:16 eth1      Link encap:Ethernet HWaddr 00:21:5e:01:02:33          inet6 addr: fe80::221:5eff:fe02:233/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:98 errors:0 dropped:0 overruns:0 frame:0          TX packets:148 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:8820 (8.8 KB) TX bytes:17781 (17.7 KB)          Interrupt:17 lo        Link encap:Local Loopback          inet addr:127.0.0.1 Mask:255.0.0.0         inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING MTU:16436 Metric:1          RX packets:4 errors:0 dropped:0 overruns:0 frame:0          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:240 (240.0 B) TX bytes:240 (240.0 B)'''錯誤狀況''''''/''''''故障排除'''''': ''''''失敗 ''''''networking ''''''是無法 ''''''restart ''''''大概就是編輯錯誤''''''安裝NTP Server'''Nova的各個所有組件的[[OpenStack]]要同步。 我們需要運做 NTPServer將每個組件同步時間'''指令'''''': ''''''sudo apt-get install ntp''''''檢查 :''''''dpkg -l | grep ntp ''''''成功結果 '''''':''''''ii ntp                  1:4.2.6.p2+dfsg-1ubuntu5.1                Network Time Protocol daemon and utility programs''''''ii ntpdate          1:4.2.6.p2+dfsg-1ubuntu5.1                client for setting system time from NTP servers''''''錯誤狀況''''''/''''''故障排除'''''':''''''網路可能不通 或者 ''''''apt-get ''''''因網路環境無法更新'''安裝完成後接著我們必須編輯sudo vi /etc/ntp.conf 將底下這兩行加入後存檔server 192.168.104.11  #NTP Server nova 控制中心的ip'''sudo /etc/init.d/ntp restart '''然後我們將 NTP Server 重新啟動* Stopping NTP server ntpd                                                                                            [ OK ]* Starting NTP server ntpd                                                                                            [ OK ]'''安裝nova 元件''''''目標:安裝 Nova Components''''''指令'''''': ''''''sudo apt-get install -y nova-common python-nova nova-compute vlan euca2ools unzip '''  設定nova 環境 '''sudo vi /etc/nova/nova.conf'''''' (''''''這裡我們可以把剛剛設好的 ''''''nova-cc ''''''的內容複製過來 改一下綠色的部分即可'''''')''' --dhcpbridge_flagfile=/etc/nova/nova.conf--dhcpbridge=/usr/bin/nova-dhcpbridge--logdir=/var/log/nova--state_path=/var/lib/nova--lock_path=/var/lock/nova--verbose--s3_host=192.168.104.11  ###外部ip--rabbit_host=10.10.10.1    ###內部ip--cc_host=10.10.10.1          ###內部ip--ec2_url=http://192.168.104.11:8773/services/Cloud  ###外部ip--fixed_range=10.0.0.0/8  --network_size=256--FAKE_subdomain=ec2  '''--routing_source_ip=10.10.10.2 ###''''''內部''''''ip -------- ''''''把''''''routing source ''''''改成這個節的的內部網路''''''IP '''--sql_connection=mysql://root:nova@192.168.104.11/nova ###外部ip 需要mysql帳號:密碼--glance_host=10.10.10.1    ###內部ip--image_service=nova.image.glance.[[GlanceImageService]]--iscsi_ip_prefix=10.10.10.      這樣就完成一個node 非常的簡單 安裝過程大部分較困難的地方為 nova 控制中心 因為我們這裡採用All in one方式,簡化了許多各個元件溝通與透過兩張網卡方式減少許多繁瑣的地方方便玩成實際測試環境的過程,不過若真正要真正達成以此營運的目的建議還是最好把nova-network nova-volume nova-objectstore nova-scheduler nova-compute nova-glance 各自分開,當某一個元件失效不至於造成全系統不能運作            手動制作linux image先建立一個5G大小的img aaron@nova-cc:/home/nova$ sudo kvm-img create -f raw ubuntu1104ser.img 5G Formatting 'ubuntu1104ser.img', fmt=raw size=5368709120下載或者若有光碟機也可以利用作ISO檔wget http://releases.ubuntu.com/natty/ubuntu-11.04-server-amd64.iso製作光碟 sudo dd if=/dev/cdrom of=/home/nova/[http://releases.ubuntu.com/natty/ubuntu-11.04-server-amd64.iso ubuntu-11.04-server-amd64.iso]root@nova-cc:/home/nova# sudo kvm -m 512 -cdrom ubuntu-11.04-server-amd64.iso -drive file=ubuntu1104ser.img,if=scsi,index=0 -boot d -net nic -net user -vnc :0 這個時候Terminal會停住我們要利用VNC 連到安裝的介面需要安裝 sudo apt-get install xvnc4viewer接著我們另開一個Terminal輸入vncviewer IP:1接著就可以安裝了安裝的過程需要注意在分割區工作時的把 5GB 空間全部分割為 ext4 根目錄/ ,一個就好也不用建立 swap 若有警告則不予理會安裝好重新開機接著我們必須用vncviewersudo kvm -hda ubuntu1104ser.img -vnc :0再進入一次調整一下這個OS 的相關設定sudo apt-get update; sudo apt-get upgrade;sudo apt-get install openssh-server cloud-init如果做的是Centos or Fedora yum update yum install openssh-server chkconfig sshd on安裝完成無誤後輸入 sudo rm - rf / etc/udev/rules.d/70-persistent-net.rules 目的在於砍掉當時對eth0的設定讓每次使用的時產生新的該VM網路卡的rule安裝完後 關機 shutdown -h nowsudo losetup -f  ubuntu1104ser.imgsudo losetup -a 你可以看到這樣的結果/dev/loop [0801]:16908388 ($filepath) 接著我們找出起始的sector root@nova-cc:/home/nova# sudo fdisk -cul /dev/loop0Disk /dev/loop1: 5368 MB, 5368709120 bytes 149 heads, 8 sectors/track, 8796 cylinders, total 10485760 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00048055 Device Boot      Start        End      Blocks  Id System '''/dev/loop1p0 *        2048    10483711    5240832  83 Linux '''上面最後一行顯示sector 是從2048开始的,單一sector是512bytes , 2048 x 512 = 1048576 這個數字要記接著我們要要複製 loop0 先Unmount loop0 sudo losetup -f -o 1048576 server.imgsudo losetup -d /dev/loop0sudo losetup -a 可以看到底下這行/dev/loop0: [0801]:550044 (/home/nova/ubuntutemplate.img), offset 1048576sudo dd if=/dev/loop0 of=ubuntu1104server_template.img10483712+0 records in 10483712+0 records out 5367660544 bytes (5.4 GB) copied, 133.322 s, 40.3 MB/s複製之後先卸載 loop0 sudo losetup -d /dev/loop0再來我們先mountsudo mount -o loop serverfinal.img /mnt將最底下的這行註解掉#UUID=548c16fd-889a-4248-bc45-e75c9802d69a /              ext4    errors=remount-ro $改成 LABEL=uec-rootfs /ext4 defaults 0 0 sudo cp /mnt/boot/vmlinuz-2.6.38-7-server /home/nova
上 AMD 的官方網站查詢CPU是否支援
 
 
 
* [http://www.amdtaiwan.com.tw/us-en/Processors/ProductInformation/0<sub>30_118,00.shtml http://www.amdtaiwan.com.tw/us-en/Processors/ProductInformation/0</sub>30_11...]
 
 
 
上 Intel 的官方網頁查詢CPU是否支援
 
 
 
* http://processorfinder.intel.com/Default.aspx
 
 
 
2. A.網路環境要求每台電腦配裝雙網卡(最好能上 GIGALAN )
 
 
 
* B.需要網路環境有兩台一般Switch或者 Hub C.需要有兩個區段的網段,且兩部機器的外部網路(public),與內部網路(Rang)必須個別的可找到對方使用ping 指令能有回應
 
 
 
3.Linux版本:ubuntu 11.04 Server LTS
 
 
 
二 架構圖
 
 
 
{{data:image/png;base64,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[[W0wtqtrZtm]]+[[Y2Y3ec]]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[[HwV1pvrm]]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[[XbtozuuP56jh3]]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[[BlfstVj7xtf3]]/RlsnvGASB67qO4xQ7Jbgj3BGUBO5YGKpH9H2fKhdpIZXV//bfGr/zwlX3/F+L2ce6uyN3djRNM1Y9CUDNgTvWkVi9I7U+00exesd2ux1FURiG1BG70Wgkf7zWxx2pezgVl/Qi7x7gjnBHUBK4YzE8z+M6RcovRoUtCaLjOH/0wld+ed/nwzBkdxSrJwleEmuzBkAu4I51xPd9TdPIsTRNE+sR2b0Iscu267okZ9ybkDepgzvGOphHWyecaydwR7gjKAncsRimaYqjoblTI7kjdYL8hf9+/M5bH7E70iDrdrvdbrepxzn/YIY7AqmBO9YRsc2aUkJQ/WLUQQRjHRkty4oNA6yDO6bWMlLH8+w7gTvCHUFJ4I7FiDVAUzWkuNwwjD964SvPvvyaOGMWFeD8a980TSrxTNOEOwJ5gTvWkVh/x1jfmqQI8i9ggjt0d9mkDAXckUaOJ5fnHV0Id4Q7gpLAHQfKsy+/RgOuRfjnved5sVZsAGQE7lhHYu7Ybrd1XafO1LE2a2rzpeYS+iFLmXrEvdXBHek0YlWM9Hfl2gncEe4ISgJ3HCh33vqIBlwDoDBwx5oSs70wDOmXq59A3MR13aQm9j1tWDF3pLYbrhAl383bagN3hDuCksAdB82zL7+2cvuDqs8CgAECdwS5KTzO2vM8lsV2u12g7QbuCHcEJYE7Dpo7b3309It3Hj76pOoTAWBQwB1BbgrXO5Y/NNwR7ghKAnccAqh6BGoDdwS5KdzfUeyIGQQB5arMtRO4I9wRlATuOARKVj2ePn1KA+qybdunWq1Wfy+5IQN3BLkp7I5ikvMoiijnWa6dwB3hjqAkcMfh8NzXXy9c9XjkyJGvnpqvvAxBDCgUKJzhjiA3hd0xiiLbtjnfUBRFyA2O4gkMGbjjcHj3w3bhqke4o9qhQOEMdwS5KeOO0Va6yjAMObluduCOI1U8gUEAdxwa8xfuFqt6hDuqHQoUznBHkJuS7hhFkeM4lJ8yb/4guONIFU9gEMAdh0bhqke4o9qhQOEMd+wPK7c/ODDjjU5M/smtSh4/cMeRKp7AIIA7DpNiVY9wR7VDgcIZ7tgfRqo4LpzfsTxwx5EqnsAgGKnCqnKo6vHBxw9zbQV3VDsUKJzhjv1hpIpjuKMUoUDxBAbBSBVWdWD+wt3lq+/k2gTuqHYoUDjDHfvDSBXHcEcpQoHiCQyCkSqs6sC7H7affOFWrqpHuKPaoUDhDHfsDyNVHBceK2OaZoF5CEXgjiNVPIFBMFKFVU3IW/UId1Q7FCic4Y79YaSK48L1jo1GQ9d1Xddt2w7DsMCh4Y4jVTyBQTBShVVNyFv1CHdUOxQonOGO/WGkiuMybdaO4zSbTc7RgzkJUTyBITNShVV9eOlba9mrHuGOaocChTPcsT+MVHFc0h0pp2O73XYcR0z6mAW440gVT2AQjFRhVR8efPzwqfnbGase4Y5qhwKFM9yxP4xUcVzSHV3XtSxL13XLsvJ2f4Q7jlTxBAbBSBVWtWL56jsZqx7hjmqHAoUz3LE/jFRxXMwdwzCkikbDMFzXLXZouONIFU9gEIxUYVUrslc9wh3VDgUKZ7hjfxip4hjjrKUIBYonMAhGqrCqGxmrHuGOaocChTPcsT+MVHFcuN6x/KHhjiNVPIFBMFKFVd2gqsd3P2x3Xw3uqHYoUDjDHfvDSBXHhesdU8m1E7jjSBVPYBCMVGFVQ5avvjN/4W73deCOaocChTPcsT+MVHFczB39LSg1D72GO6J4AkNmpAqrGvLg44dPvnCre9Uj3FHtUKBwhjv2h5EqjkvOSWgYBqXpiaII7ojiCQyZkSqs6knPqke4o9qhQOEMd+wPI1Ucwx2lCAWKJzAIRqqwqic9qx7hjmqHAoUz3LE/jFRxXNIdbdt2HCeKona7DXdE8QSGzEgVVrXlm957Xaoe4Y5qhwKFM9yxP4xUcVzSHYMgoCyPNLF1rm3hjiNVPIFBMFKFVW15+[[OiTp1]]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[[LiYh]]+9Z2Qh/+7L9Qp3lCIUKJ7AIIA71p+q3BExnFCgcK67O05NTc3OzubdSu/MIE6S8DzPMAw6imma5bNLOo7T3xPe3Nycmpqam5sruR+4oxShQPEEBgHcsf7AHdUOBQrnWrsj5WsssCEJnJNGv8/xn/A8T9M0y7JofmqSyJITxfbdHYm5ubmS+gh3lCIUKJ7AIIA71h+4o9qhQOFcX3csozi6rhuG0dfT6YFpmqLntdttqn0ss88BuWMURVNTU2UuXLijFKFA8QQGAdyx/sAd1Q4FCueaumOr1dq3b1/hzXu6o+M4Yptyu912HKfd/v/neHVd1zAMwzBs2w7DkJd7nmdZVvIj27ZjlZq0Dr9tNpumaRqGQXWT4prtdtu2bVrfdV3xJEV3bDQatE5yD3nZ3NwcGxsrnLsH7ihFKFA8gUEAd6w/cEe1Q4HCuabuODk5WSYXT093pBZtfuv7vqZpvu/TW2pxJh2k1+SIjuNQw7TjOLZtdzkK1TtalkVvLcviDU3T1DSt0WjQR0EQ0H6S+xTdkT6iU6I9NJvNwt9PFEVLS0vT09PFtoU7ShEKFE9gEMAd6w/cUe1QoHCuozuura3t3r27zB6ov6ORgGv1urhjo9HQNI0r9sgCbdumrVgHeU02ThHLstg4qSukWKEofkqVkeKZ8FFEd+RzIEzTFM+kAJubmzt27Cg2dSHcUYpQoHgCgwDuWH/gjmqHAoVzHd1xeXn52LFjZfZQxh1jMhdFUachL53ckWoZuWaRqgzFFcIw5BOInUm0ZZbR4+5I1Z+NRkNsQC/JxMTE6upqgQ2PHDly9MVXD8x4lcTKze9WfudLEQoUT2AQwB3rD9xR7fj/2ju/EDuy/L7XU1aP+xQGQ0TroRI9xNAYCfRQDy2WyD1ZO9vlsLN60SIoFA3IZBR0rday9rRMp3ZwNvrDUmQywoMC1au1IEgp7LaiRKHaIw/tnZQYG2H31kOjeB5q4zysiItELIupPHzTP86cqnv7VnffW6dOfT/8WG6fW/+utjjnM7/zz4LK2UR3vHHjxiH3QTlMn7U2TlFDerFB3R1F8tSS+gXxALivNnhRlFF1xyzLPM9zHEc6uCf+A0zFgWfMsF7rRVhQPZFZQHc0H9axdocFlbOJ7niYoXhgRu4o4yDjOM7zXBslmec5DtBsUpuCrT5AnudqhhI0uqPcAvLqOM7hJ5IfeFAp67VehAXVE5kFdEfzYR1rd1hQOZvojmmaLi0tHeYK07jjuJGL0mUsYHAhhi2qM1TUszAs0vO8ehc2FFDta1aVUXuSSnFNcUdMA1evUO8HPwALCwuvXr06wIms13oRFlRPZBbQHc2HdazdYUHlbKI7VlV18uTJw2xCKBpXBwcgQYhFeYqiQCYP32pTW9I0dV03iiKtXDsLwpckiXovDJTE6EYRxLIscXf8CQuUbmv4KHKi2lwZVTHrgtuWJ0+eLC8vH+xc1mu9CAuqJzIL6I7mwzrW7rCgcjbUHQ85XQYjERuB6iVJIvNpoIZqXzOkDd9ibR2US2exelYURbDD+r0k9xnHsXo7rV8ba+7gsurtVHesX+GQa/QceKJMxXqtJ2FB9URmAd3RfFjH2h0WVM6GumN1uCUeGzOOat6xqqqiKKIogvnhFPUK+BZDEtXyNE3DMJQRipJcbLyXdm4cx9qa5AIGMkZRpJ5SlqX2wLiCNj7yABxyRCnrtV6EBdUTmQV0R/NhHWt3WFA5m+uOr1+/Xlxc/Pzzz7t+ENt48uTJysrKmzdvDnwF1mu9CAuqJzIL6I7mwzrW7rCgcjbXHauqev369dLSEvXxCDm8OFas13oSFlRPZBbQHc2HdazdYUHlbLQ7VlX1+vXrM2fOHHK5R1JV1Zs3b27cuLG8vHxIcaxYr/UkLKieyCygO5oP61i7w4LK2XR3rPak58yZM4eZeT1wtre3FxcXj0rBWa/1IiyonsgsoDuaD+tYu8OCyrkH7gi2t7dPnjz57rvv/vSnrPVa8OrVq5WVlaM1b9ZrvQgLqicyC+iO5sM61u6woHLujTuCDz/8cGFh4erVqzTIfXn16tXFixcXFhYOPF19HKzXehEWVE9kFtAdzYd1rN1hQeXcM3esqurNmzd37tx56623Ll68yGk0jaRpurKysrCwMKO3k/VaL8KC6onMArqj+bCOtTssqJz7547C/fv3FxcXT548eefOnYPtrWcZOzs7a2trCwsLS0tLR55rVGG91ouwoHois4DuaD6sY+0OCyrnHrsj2NnZuXr1KoRpmBK5s7PzwQcfQKPX1tbm8C/Aeq0XYUH1RGYB3dF8WMfaHRZUzr13RyFNU0jkyZMnb9y40bh9izW8efPmyZMn6u+dZ/c967VehAXVE5kFdEfzYR1rd1hQOdvjjgLycEtLS47jLC0t3bhx48mTJxbMrXn16tXjx4+vXr26uLh47Nix5eXlrvKsrNd6ERZUT2QW0B3Nh3Ws3WFB5WyhO6qkafrBBx8sLy+/9dZbX/3qV6GS9+/f397e7vrR9idN0w8//PDq1atLS0vHjh1bWFhYWVm5c+dO5zOEWK/1IiyonsgsoDuaD+tYu8OCytlyd1R5/fo1VPLixYtnzpxxHOfMmTMXL15cW1t78uRJmqYdjpXc2dlJ0/Tx48dra2vnz59fXFxE0vTdd9+9c+dOmqaH3wzmCGG91ouwoHois4DuaD6sY+0OCyrnAbljne3t7fv376+trS0vLy8tLS0sLDiOc+zYsaWlpaWlpatXr66trX344YepwgESlumXuXPnztra2rvvvou7OI7jOM7JkyeXlpZWVlbW1tZ+9KMfdZ5ZnAzrtV6EBdUTmQV0R/MZTh37h89//K/jT4PvfxJ8/5Pv/8Gn//Wzzzp/pDmEBZXzoN2xkTdv3jRKHkDCshVLX0ZT0q5/7kEYTr3W67CgeiKzgO5oPkOoYz//SXb9o+ffeH/r3GoqsfL+1vd++OlPXnX/eDMNCypnuiNpzRDqNQvCguqJzAK6o/lYX8f+5NWLb/7u1tvfSVVxRHz9u1v/4vYnnT/hTMOCypnuSFpjfb1mR1hQPZFZQHc0H+vr2O/98NOvf3erLo6If/Y7W7//R9udP+TswoLKme5IWmN9vWZHWFA9kVlAdzQfu+vYz3+STRBHxNvfSTt/ztmFBZUz3ZG0xu56zZqwoHois4DuaD5217GPtn6sDXOsxzfe39p6Ye28GQsqZ7ojaY3d9Zo1YUH1RGYB3dF83nvvvbaTMnvEPzz77mRxPLeafu1f/fEv/fJy1086Qx4/ftz1W3Yo6I6kNXTHXgTdkTRCdyTd8jT76Td+55PJ7vgba8//Yvd1109KxkJ3JK2hO/Yi6I6kEboj6ZYv/tf/WXl/H3d8+ztbP//F33X9pGQsdEfSGrpjL4LuSBqhO5LO+Zf/7sW56/9fE//J3gcpefs7W7/3B3/V9TOSSdAdSWvojr0IuiNphO5IOudnf/vzCanHb61/yqSj4dAdSWvsHsdtE30fjk1mAd2RmMBf7L7+1vqf1sXx4u/92f/82Zuun47sg/3uGATBaDTSCvM89zyvLMsgCDzPS5JEO8D3/SAI6lfzfT/P87bPUJZlT7cfJIRYBt2RGMIP/9v/qLtj+ud/0/Vzkf2x3x2jKHJdVysMgsD3/aqqPM9zXRefhTiOHcfxPK9+tYO5o+/7YRi2PYsQQo4cuiMxhPTP/6bujn/11/+76+ci+2O/O1ZV5bqulvZzXTeO46qqPM8LgkCTS9/3Pc9rdMc6WZbtW+h5nuaOeZ43OmhRFI3l09yFEEL2he5IDOHnv/i74N/+WBXH3/ro864fikzFINzR9301sxjHscgirM7zPKgkcF13NBo1uqPrujA23/dHo5G7h5wOE0U6E33lvu87juO6LvQRd8cBIrVZlnme5/s+CtVbh2GoXVC7SL1HnhBCxkF3JObws7/9+fce/OW51fTXvvsnP3icl//3F10/EZmKQbhjmqZqZhHah89wxyiKRC7jOA6CAEJZv5S4IxKTZVlWSrd4lmWu66IQN8VnyTsWRaEmQTHaEic6jhNFUVVVZVm6rovPuAjuiIunaaoWlmVZT2oSQsg46I7ENPhO9o5BuGOldFLD3oqiQDnEC4Uo8X0/TdNp3FGMDVZXVVWe547jhGGo9TurB6tfSXZTrqAdPxqN1IxpnueY36MWjntUQgipw3aamAbfyd4xFHcMwxC+FUWRalpiaei2Fok8mDtWe13MQA5QD47jWDqspXt6nDs25hTV04VD/wsRQgYB22liGnwne8dQ3FHSjdrQRpEzdFtHUYSleQ7sjnI7dGTLjBwcnCSJ67qyJJDcZZw7aksFpWlaluW49YMIIWRf2E4T0+A72TuG4o6VMrtFLdRGInqeh8GIB3PHelITwxblYO2ymNBdjXdHzInBoEncPYoirVDrwiaEkAmwnSamwXeydwzIHaFcWsZOVUD0BePzgfOOmEODgYxyBUygDoIAhorlHtXlgca5Y7U3cVu7oFrouu4BlpwkhAwTttPENPhO9o4BuWPVtCAiZp/gs7q2YlmWk9dZVE/UroypNtqKklmW4YLozsbYSvVE9QraxfM8r18QhWr/OyGE7AvbaWIafCd7x7DckRBCBg7baWIafCd7B92REEIGBNtpYhp8J3sH3ZEQQgYE22liGnwnewfdkRAyaG7fvuUMiX/0tSt/3/W6for5cezYV7a3t7t+y8gk6I69g+5ICBk03/72t//NrZu7X7xgWBnf/NY37t+/3/VbRiZBd+wdw3LHLMtkN0JCCKnojrYH3dF86I69YyjuiBUWZRvA+mI9R4W6UmOaplxDhxDDoTvaHXRH86E79o5BuKPv+77vS8ZRVuSeBWVZNm5jTQgxE7qj3UF3NB+6Y+8YhDvKZjCC53nq0t9xHEdRVO/O1srHrQeOD1EU4Zr4M89zbDBTlqV2d+06QpqmuF1ZlnJAnudYTlxKsPa4+vyTH2zcryOEVHRH24PuaD50x94xCHfEttHj9onBJoFIRkoXc5qm9fJx+xDiSOwxKOU4ETtQYyttual6I0HbzBA3yrIMuw7ilKIo5DB1f8UJD4anwsMkSXIE/5qE2AXd0e6gO5oP3bF3DMId8zyX8Y6+70dRJF/VrQv5ObU8iiJsJD1B0cbtbY1ybKWNQlip9oRyi6qqyrKUC2ZZ5jiO7EYIl5WzIKZTPph6C0KIQHe0O+iO5kN37B2DcEeAnl9IpOd52LEa2bhsD0nviUSqTFA0tZu47o44BgqILOCEK+MYcUdVNOUiAEnKyQ+m/grXdRuTr4QMGbqj3UF3NB+6Y+8YhDtqww0lsYesnvdloijSjE04jDuKMjYKnOaOYRiOc0f1t4RhuK87qnepj/skhNAd7Q66o/nQHXuH/e6o9kQLkC3kF1WTy7KsLEutvCgKjFY8jDsixzmu41hLRvq+P84d1YGSQRD4vj/5wdSJPrObXU5If6E72h10R/OhO/YO+92x2puGIr29URTJIEJ1BCFGJUK21HK1a1gK1YV+JrijOkVG8pr1J8QgSDwSHq/RHfEkmFKNrzD9ZcKDqeUQTUKICt3R7qA7mg/dsXcMwh2rL68NrmXv1K8ay2WONnRNZk/v646YDS3GhlPGrZUDc5Up243uWO2pISZfa7nGxgdTJwkd6l+QEEuhO9oddEfzoTv2jqG4Ixi3J2FRFI0DAYuiqI9NPPCQQczUafwKE3fkz30XFW98hnohpLYoCi7uSMg46I52B93RfOiOvWNY7tgVZVmqvdJ1kHSEPqLP+kgmRHNyDCH7Qne0O+iO5kN37B10x3mAfmR17GOdMAyli/yoFvH2fZ+L8hAyGbqj3UF3NB+6Y++gOxJCBg3d0e6gO5oP3bF30B0JIYOG7mh30B3Nh+7YO+iOhJBBQ3e0O+iO5kN37B10R0LIoOmXOyabG4jOn6QvQXc0H7pj77DfHX3fr6+[[Mg1nPk8]]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[[TuJifmnTi]]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[[G4Yx]]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||height="481px",width="677px"}}
 
 
 
三:安裝 nova-controler
 
 
 
Setp-1 更新
 
 
 
安裝之前先進行更新 sudo apt-get update''' ;'''sudo apt-get upgrade
 
 
 
==== Setp-2 安裝Bridge mode ====
 
sudo apt-get install bridge-utils
 
 
 
'''查看 是否安裝 結果與版本 '''
 
 
 
dpkg -l | grep bridge-utils
 
 
 
'''結果''' ii  bridge-utils                    1.4-5ubuntu2                      Utilities for configuring the Linux Ethernet bridge
 
 
 
==== Setp-3 網路環境設定 ====
 
auto lo iface lo inet loopback #內部網路 auto br100 iface br100 inet static bridge_ports eth1 bridge_stp off bridge_maxwait 0 bridge_fd 0 address 10.10.10.1 netmask 255.255.255.0 #外部網路 auto eth0 iface eth0 inet static address 192.168.7.82 netmask 255.255.255.0 broadcast 192.168.7.255 gateway 192.168.7.1 sudo /etc/init.d/networking restart
 
 
 
目標:安裝 nova-control
 
 
 
指令:'''sudo apt-get install rabbitmq-server'''
 
 
 
檢查: (指令+成功結果) :'''sudo rabbitmq-multi status'''
 
 
 
Status of all running nodes... Node 'rabbit@hostnane' with Pid XXXX: running (可以查出狀態) done.
 
 
 
錯誤狀況/故障排除: 網路相關問題
 
 
 
相關聯結 :http://www.rabbitmq.com/
 
 
 
目標:安裝 '''Nova packages'''
 
 
 
指令:
 
 
 
* 請依照順序
 
 
 
sudo apt-get install python-software-properties
 
 
 
sudo add-apt-repository ppa:nova-core/trunk
 
 
 
sudo apt-get update
 
 
 
sudo apt-get install python-nova
 
 
 
sudo apt-get install python-greenlet python-mysqldb python-nova nova-common nova-doc nova-api nova-network nova-objectstore nova-scheduler nova-compute euca2ools unzip
 
 
 
'''檢查: (指令+成功結果) :'''
 
 
 
sudo apt-get install python-greenlet python-mysqldb python-nova nova-common nova-doc nova-api nova-network nova-objectstore nova-scheduler nova-compute euca2ools unzip
 
 
 
成功結果
 
 
 
euca2ools is already the newest version. python-mysqldb is already the newest version. unzip is already the newest version. python-greenlet is already the newest version. python-nova is already the newest version. nova-scheduler is already the newest version. nova-objectstore is already the newest version. nova-network is already the newest version. nova-doc is already the newest version. nova-compute is already the newest version. nova-common is already the newest version. nova-api is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 
 
 
錯誤狀況/故障排除: 網路相關問題
 
 
 
目標:
 
 
 
指令:
 
 
 
檢查:
 
 
 
(指令+成功結果)
 
 
 
圖示: 錯誤狀況/故障排除
 
 
 
----
 
[[Category:Homepage]] [[Category:Homepage]]
 

Revision as of 16:25, 23 August 2011

第一篇 建立nova 系統 控制中心Nova 也被稱為 OpenStack Compute , 是一套用開源控制基礎架構Iaas 的雲端運算平台軟體。它的架構與功能類似Amazon EC2 與 Rackspace Cloud Servers. Nova 它本身是不包含虛擬化軟體,它是定義了一個驅動既有底層虛擬化作業系統的機制,並且將功能擴展為透過web API來進行操作。  Openstack Nova (模式:單一控制台與多個節點 )繁體中文 安裝紀錄nova安裝硬體條件一 環境要求1.至少兩台一般電腦 安裝nova-compute需求CPU有支援Virtualization- CPU,若要查是否自己的cpu是否支援可以打egrep -c '(vmx|svm)' /proc/cpuinfo 檢查cpu是否支援虛擬化,如果算出來的數字大於 0 的話,就表示有支援了,不過還是記得要去 BIOS 裡確認是否有 Enable CPU Virtualization 的功能喔上 AMD 的官方網站查詢CPU是否支援ñ   30_118,00.shtml http://www.amdtaiwan.com.tw/us-en/Processors/ProductInformation/030_11...上 Intel 的官方網頁查詢CPU是否支援ñ   http://processorfinder.intel.com/Default.aspx2. A.網路環境要求每台電腦配裝雙網卡(最好能上 GIGALAN )     B.需要網路環境有兩台一般Switch或者 Hub C.需要有兩個區段的網段,且兩部機器的外部網路(public),   與內部網路(Rang)必須個別的可找到對方使用ping 指令能有回應3.Linux版本:ubuntu 11.04 Server LTS4.硬碟空間則須看你把openstack nova 的分成幾個元件安裝,我們的例子是裝一台All in one的
{{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image002.gif
二 網路拓璞架構圖'圖一' 
width="161px" style="width:120.45pt;border:solid black 1.0pt; border-right:none;padding:2.75pt 2.75pt 2.75pt 2.75pt">電腦 width="161px" style="width:120.45pt;border:solid black 1.0pt; border-right:none;padding:2.75pt 2.75pt 2.75pt 2.75pt"> eth0 width="161px" style="width:120.5pt;border:solid black 1.0pt; border-right:none;padding:2.75pt 2.75pt 2.75pt 2.75pt">eth1
width="161px" style="width:120.45pt;border-top:none;border-left: solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none; padding:2.75pt 2.75pt 2.75pt 2.75pt">Nova-CC width="161px" style="width:120.45pt;border-top:none;border-left: solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none; padding:2.75pt 2.75pt 2.75pt 2.75pt">10.10.10.1/24 width="161px" style="width:120.5pt;border-top:none;border-left: solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none; padding:2.75pt 2.75pt 2.75pt 2.75pt">192.168.104.11/24
width="161px" style="width:120.45pt;border-top:none;border-left: solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none; padding:2.75pt 2.75pt 2.75pt 2.75pt">Nova-1 width="161px" style="width:120.45pt;border-top:none;border-left: solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none; padding:2.75pt 2.75pt 2.75pt 2.75pt">10.10.10.2/24 width="161px" style="width:120.5pt;border-top:none;border-left: solid black 1.0pt;border-bottom:solid black 1.0pt;border-right:none; padding:2.75pt 2.75pt 2.75pt 2.75pt">192.168.104.12/24
若以此圖將網路環境設好後請利用ping指令測試兩台電腦的兩個網段是否可以互相連接成功三':'安裝 'nova-controler Setp-1 更新安裝之前先進行更新 sudo apt-get update ;sudo apt-get upgrade Setp-2 設定安裝網路環境'目標:安裝 bridge '指令': sudo apt-get install bridge-utils '檢查 ':dpkg -l | grep bridge-utils '成功結果 :ii bridge-utils 1.4-5ubuntu2 Utilities for configuring the Linux Ethernet bridge錯誤狀況'/'故障排除': 網路可能不通 或者 apt-get 因網路環境無法更新 指令: sudo nano /etc/network/interfaces '編輯'ok '重啟 'sudo /etc/init.d/networking restartauto loiface lo inet loopbackauto br100iface br100 inet staticbridge_ports eth0bridge_stp offbridge_maxwait 0bridge_fd 0address 10.10.10.1netmask 255.255.255.0 auto eth1iface eth1 inet staticaddress 192.168.104.11netmask 255.255.255.0broadcast 192.168.104.255gateway 192.168.104.254dns-nameservers 61.64.127.1 檢查 :ifconfig成功結果 : br100     Link encap:Ethernet HWaddr 00:21:5e:01:02:33          inet addr:10.10.10.1 Bcast:10.10.10.255 Mask:255.255.255.0          inet6 addr: fe80::221:5eff:fe01:233/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:0 errors:0 dropped:0 overruns:0 frame:0          TX packets:189 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:0 (0.0 B) TX bytes:18749 (18.7 KB) eth0      Link encap:Ethernet HWaddr 00:10:18:1a:48:13          inet addr:192.168.104.11 Bcast:192.168.104.255 Mask:255.255.255.0          inet6 addr: fe80::210:18ff:fe1a:4813/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:6470 errors:0 dropped:0 overruns:0 frame:0          TX packets:473 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:690979 (690.9 KB) TX bytes:108272 (108.2 KB)          Interrupt:16 eth1      Link encap:Ethernet HWaddr 00:21:5e:01:02:33          inet6 addr: fe80::221:5eff:fe01:233/64 Scope:Link          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1          RX packets:98 errors:0 dropped:0 overruns:0 frame:0          TX packets:148 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:8820 (8.8 KB) TX bytes:17781 (17.7 KB)          Interrupt:17 lo        Link encap:Local Loopback          inet addr:127.0.0.1 Mask:255.0.0.0          inet6 addr: ::1/128 Scope:Host          UP LOOPBACK RUNNING MTU:16436 Metric:1          RX packets:4 errors:0 dropped:0 overruns:0 frame:0          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0          RX bytes:240 (240.0 B) TX bytes:240 (240.0 B)錯誤狀況'/'故障排除': '失敗 'networking '是無法 'restart '大概就是編輯錯誤'Setp-3 安裝NTP ServerNova的各個所有組件的OpenStack要同步。 我們需要運做 NTPServer將每個組件同步時間指令': 'sudo apt-get install ntp'檢查 :'dpkg -l | grep ntp '成功結果 ':'ii ntp                  1:4.2.6.p2+dfsg-1ubuntu5.1                 Network Time Protocol daemon and utility programs'ii ntpdate           1:4.2.6.p2+dfsg-1ubuntu5.1                 client for setting system time from NTP servers'錯誤狀況'/'故障排除':'網路可能不通 或者 'apt-get '因網路環境無法更新安裝完成後接著我們必須編輯sudo vi /etc/ntp.conf 將底下這兩行加入後存檔server 127.127.1.0fudge 127.127.1.0 stratum 10 然後我們將 NTP Server 重新啟動sudo /etc/init.d/ntp restart* Stopping NTP server ntpd                                                                                            [ OK ] * Starting NTP server ntpd                                                                                            [ OK ]Setp-4 安裝mysql-server 設定nova需要的資料庫環境' OpenStack Nova提供兩種Database PostgreSQL or MySQL 我們選擇以MySQL進行目標:安裝 mysql-server '指令': 'sudo apt-get install -y mysql-server 接著我們會看到安裝的過程會需要設MySQL 的password 且需要輸入兩次一樣密碼按 ok,請設定一組密碼並將該密碼記住
{{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image005.gif
   檢查 :'dpkg -l | grep mysql-server'成功結果 :ii mysql-server   5.1.54-1ubuntu4     MySQL database server (metapackage depending on the latest version)ii mysql-server-5.1   5.1.54-1ubuntu4   MySQL database server binaries and system database setupii mysql-server-core-5.1   5.1.54-1ubuntu4          MySQL database server binaries錯誤狀況'/'故障排除': 網路可能不通 或者 apt-get 因網路環境無法更新安裝完成後必須在將nova的資料庫環境設定完成請一以下步驟完成,我們以較簡單 4.個步驟完成方式將底下的$MYSQL_PASS 都改成 剛剛所設定的MySql密碼,例如都設成novapasswd1.sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;' 2.sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;" 3.sudo mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR 'root'@'%' = PASSWORD('$MYSQL_PASS');"  1.'sudo mysql -uroot -pnovapasswd -e 'CREATE DATABASE nova;' 2.sudo mysql -uroot -pnovapasswd -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;" 3.sudo mysql -uroot -pnovapasswd -e "SET PASSWORD FOR 'root'@'%' = PASSWORD('novapasswd');" '4.'sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf ; sudo service mysql restartmysql start/running, process 220725.'接著我們安裝 'phpmysql'sudo apt-get -y install apache2 php5 libapache2-mod-auth-mysql php5-mysql 'phpmyadmin '來方便以後查詢'nova database'狀態','安裝過程一樣需要輸入密碼','請輸入'mysql root '密碼 這個例子中我們輸入novapasswd
'我們可以輸入網址 http:// nova-cc ip/phpmyadmin/ '來查看與管理資料庫
{{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image007.jpg
   
{{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image009.jpg
 <
> Setp-5 安裝Nova-Volumes先將硬碟分割完成fdisk /dev/sda'我們先把空間分出一區做'Linux LVM 'sudo apt-get install lvm2 'partprobe'fdisk -l' Device Boot Start End Blocks Id System/dev/sda1 * 1 2432 19530752 83 Linux/dev/sda2 2432 3428 8000512 82 Linux swap / Solaris/dev/sda4 3428 9729 50615904+ 5 Extended/dev/sda5 3428 9729 50615873 8e Linux LVMpvcreate /dev/sda5Physical volume "/dev/sda5" successfully createdvgcreate nova-volumes /dev/sda5 Volume group "nova-volumes" successfully createdsudo sed -i 's/false/true/g' /etc/default/iscsitarget 'service iscsitarget start'service nova-volume start Setp-6 安裝nova 元件'目標:安裝 Nova Components'指令': 'sudo apt-get install -y rabbitmq-server nova-common nova-doc python-nova nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute apt-get install glance'檢查 ':dpkg -l | grep rabbitmq-server; dpkg -l | grep nova-common;dpkg -l | grep nova-doc; dpkg -l | grep python-nova ; dpkg -l | grep nova-api; dpkg -l | grep nova-network; dpkg -l | grep nova-volume; dpkg -l | grep nova-objectstore; dpkg -l | grep nova-scheduler; dpkg -l | grep nova-compute ; dpkg -l | grep euca2ools ; dpkg -l |grep unzip; dpkg -l | grep bridge-utils 成功結果 :ii rabbitmq-server 2.3.1-1ubuntu1 An AMQP server written in Erlangii nova-common 2011.2-0ubuntu1 OpenStack Compute - Nova - common filesii nova-doc 2011.2-0ubuntu1 OpenStack Compute - Nova - documetationii python-nova 2011.2-0ubuntu1 OpenStack Compute - Nova - Python librariesii python-novaclient 2.4-0ubuntu1 client library for OpenStack Compute APIii nova-api 2011.2-0ubuntu1 OpenStack Compute - Nova - API frontendii nova-network 2011.2-0ubuntu1 OpenStack Compute - Nova - Network thingamajigii nova-volume 2011.2-0ubuntu1 OpenStack Compute - Nova - storageii nova-objectstore 2011.2-0ubuntu1 OpenStack Compute - Nova - object storeii nova-scheduler 2011.2-0ubuntu1 OpenStack Compute - Nova - Schedulerii nova-compute 2011.2-0ubuntu1 OpenStack Compute - Nova - compute nodeii euca2ools 1.3.1-0ubuntu7 managing cloud instances for Eucalyptusii unzip 6.0-4ubuntu1 De-archiver for .zip filesii glance 2011.2-0ubuntu1 OpenStack Image Registry and Delivery Service - Daemonsii python-glance 2011.2-0ubuntu1 OpenStack Image Registry and Delivery Service - Python library錯誤狀況'/'故障排除': 網路可能不通 或者 apt-get 因網路環境無法更新設定nova 環境 sudo vi /etc/nova/nova.conf--dhcpbridge_flagfile=/etc/nova/nova.conf--dhcpbridge=/usr/bin/nova-dhcpbridge--logdir=/var/log/nova--state_path=/var/lib/nova--lock_path=/var/lock/nova--verbose--s3_host=192.168.104.11 ###外部ip--rabbit_host=10.10.10.1 ###內部ip--cc_host=10.10.10.1 ###內部ip--ec2_url=http://192.168.104.11:8773/services/Cloud ###外部ip--fixed_range=10.0.0.0/8 --network_size=256--FAKE_subdomain=ec2 --routing_source_ip=10.10.10.1 ###內部ip--sql_connection=mysql://root:nova@192.168.104.11/nova ###外部ip 需要mysql帳號:密碼--glance_host=10.10.10.1 ###內部ip--image_service=nova.image.glance.GlanceImageService--iscsi_ip_prefix=10.10.10. 接著設定好後需要建立1.sudo sed -i 's/false/true/g' /etc/default/iscsitarget ; sudo service iscsitarget restart' * Removing iSCSI enterprise target devices: [ OK ] * Stopping iSCSI enterprise target service: [ OK ] * Removing iSCSI enterprise target modules: [ OK ] * Starting iSCSI enterprise target service [ OK ] [ OK ]2.'指令': 'sudo groupadd nova ; chmod 644 /etc/nova/nova.conf ' '檢查 ':'ls -la /etc/nova/nova.conf'成功結果 ':-rw-r--r-- 1 root nova 544 2011-08-06 01:15 /etc/nova/nova.conf3.'指令': 'sudo /etc/init.d/libvirt-bin start; sudo start nova-network; sudo start nova-compute; sudo start nova-api; sudo start nova-objectstore; sudo start nova-scheduler; sudo start nova-volume; sudo start glance-api; sudo start glance-registry'成功結果 ':Since the script you are attempting to invoke has been converted to anUpstart job, you may also use the start(8) utility, e.g. start libvirt-binstart: Job is already running: nova-networkstart: Job is already running: nova-computestart: Job is already running: nova-apistart: Job is already running: nova-objectstorestart: Job is already running: nova-schedulernova-volume start/running, process 21386start: Job is already running: glance-apistart: Job is already running: glance-registry 4.sudo nova-manage db sync 'sudo nova-manage user admin novaexport EC2_ACCESS_KEY=7f29fa0c-7ad1-4c4f-9105-3637daa9cd6dexport EC2_SECRET_KEY=4617cac1-6851-47e8-9c2f-1aef37f1bcefsudo nova-manage project create mycloud nova'sudo nova-manage network create 10.10.10.0/24 1 256'mkdir -p /home/nova/creds'sudo nova-manage project zipfile mycloud nova /home/nova/creds/novacreds.zip'unzip /home/nova/creds/novacreds.zip -d /home/nova/creds/Archive: /home/nova/creds/novacreds.zip extracting: /home/nova/creds/novarc extracting: /home/nova/creds/pk.pem extracting: /home/nova/creds/cert.pem extracting: /home/nova/creds/cacert.pemroot@nova-cc:~# sudo chown -R nova:nova /home/nova/creds/'root@nova-cc:~# ls -la /home/nova/creds/total 32drwxr-xr-x 2 nova nova 4096 2011-08-06 03:15 .drwxr-xr-x 3 root root 4096 2011-08-06 03:10 ..-rw------- 1 nova nova 1029 2011-08-06 03:11 cacert.pem-rw------- 1 nova nova 2503 2011-08-06 03:11 cert.pem-rw-r--r-- 1 nova nova 5786 2011-08-06 03:11 novacreds.zip-rw------- 1 nova nova 981 2011-08-06 03:11 novarc-rw------- 1 nova nova 887 2011-08-06 03:11 pk.pemsource /home/nova/creds/novarc'sudo /etc/init.d/libvirt-bin restart; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry Since the script you are attempting to invoke has been converted to anUpstart job, you may also use the stop(8) and then start(8) utilities,e.g. stop libvirt-bin ; start libvirt-bin. The restart(8) utility is also available.libvirt-bin stop/waitinglibvirt-bin start/running, process 23598nova-network start/running, process 23620nova-compute start/running, process 23648nova-api start/running, process 23663nova-objectstore start/running, process 23674nova-scheduler start/running, process 23699nova-volume start/running, process 23708glance-api start/running, process 23715glance-registry start/running, process 23732root@nova-cc:~# euca-describe-availability-zones verboseAVAILABILITYZONE nova availableAVAILABILITYZONE |- nova-ccAVAILABILITYZONE | |- nova-compute enabled :-) 2011-08-06 08:15:15AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-08-06 08:15:13AVAILABILITYZONE | |- nova-network enabled :-) 2011-08-06 08:15:13AVAILABILITYZONE | |- nova-volume enabled :-) 2011-08-06 08:15:13 Nova Dashboard '安裝'sudo apt-get install -y bzr 'sudo easy_install virtualenv Searching for virtualenvReading http://pypi.python.org/simple/virtualenv/Reading http://virtualenv.openplans.orgReading http://www.virtualenv.orgBest match: virtualenv 1.6.4Downloading http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.6.4.tar.gz#md5=1072b66d53c24e019a8f1304ac9d9fc5Processing virtualenv-1.6.4.tar.gzRunning virtualenv-1.6.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-qWaoju/virtualenv-1.6.4/egg-dist-tmp-yFJeF5warning: no previously-included files matching '*.*' found under directory 'docs/_templates'Adding virtualenv 1.6.4 to easy-install.pth fileInstalling virtualenv script to /usr/local/bin Installed /usr/local/lib/python2.7/dist-packages/virtualenv-1.6.4-py2.7.eggProcessing dependencies for virtualenvFinished processing dependencies for virtualenv sudo bzr init-repo . Shared repository with trees (format: 2a)Location: shared repository: .sudo bzr branch lp:openstack-dashboard -r 46 /opt/osdb {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image011.jpg||width="639",height="55"}} cd /opt/osdb 'sudo sh run_tests.sh {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image013.jpg||width="603",height="529"}} 'cd openstack-dashboard' 'cat /home/nova/creds/novarc'sudo nano /opt/osdb/openstack-dashboard/local/local_settings.py {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image015.jpg||width="634",height="199"}} {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image017.jpg||width="558",height="115"}} sudo tools/with_venv.sh dashboard/manage.py syncdb {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image019.jpg||width="642",height="83"}} sudo tools/with_venv.sh dashboard/manage.py runserver 0.0.0.0:8000' '輸入 'http://IP:8000' {{file:///C:/DOCUME%7E1/aaron/LOCALS%7E1/Temp/msohtml1/01/clip_image021.jpg||width="642",height="382"}} 這樣我們就完成了一個具備 'Dashboard (Web interface )'的 'Nova '控制中心','這個控制中心具有'nova-compute'功能但這樣無法表現'openstack'最大的優勢','彈性擴張計算能力'接著我們建立其他的'node(nova-compute),'讓整理系統擴大','您可以以此方法建立更多的節點','請繼續第二篇說明'有就是圖一'nova-1'電腦'第二篇'接著我們必須一樣先設定好網路環境與NTPServer'目標:設定網路環境'指令':'sudo apt-get install bridge-utils'檢查 :'dpkg -l | grep bridge-utils '成功結果 ':ii bridge-utils 1.4-5ubuntu2 Utilities for configuring the Linux Ethernet bridge錯誤狀況'/'故障排除':網路可能不通 或者 apt-get 因網路環境無法更新 指令: sudo vi /etc/network/interfaces '編輯'ok '重啟 'sudo /etc/init.d/networking restartauto loiface lo inet loopbackauto br100iface br100 inet staticbridge_ports eth0bridge_stp offbridge_maxwait 0bridge_fd 0address 10.10.10.2netmask 255.255.255.0 auto eth0iface eth0 inet staticaddress 192.168.104.12netmask 255.255.255.0broadcast 192.168.104.255gateway 192.168.104.254dns-nameservers 61.64.127.1 檢查 :ifconfig成功結果 : br100 Link encap:Ethernet HWaddr 00:21:5e:01:02:33 inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0 inet6 addr: fe80::221:5eff:fe01:233/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:189 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:18749 (18.7 KB) eth0 Link encap:Ethernet HWaddr 00:10:18:1a:48:15 inet addr:192.168.104.12 Bcast:192.168.104.255 Mask:255.255.255.0 inet6 addr: fe80::210:18ff:fe1a:4813/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6470 errors:0 dropped:0 overruns:0 frame:0 TX packets:473 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:690979 (690.9 KB) TX bytes:108272 (108.2 KB) Interrupt:16 eth1 Link encap:Ethernet HWaddr 00:21:5e:01:02:33 inet6 addr: fe80::221:5eff:fe02:233/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:98 errors:0 dropped:0 overruns:0 frame:0 TX packets:148 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:8820 (8.8 KB) TX bytes:17781 (17.7 KB) Interrupt:17 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:240 (240.0 B) TX bytes:240 (240.0 B)錯誤狀況'/'故障排除': '失敗 'networking '是無法 'restart '大概就是編輯錯誤'安裝NTP ServerNova的各個所有組件的OpenStack要同步。 我們需要運做 NTPServer將每個組件同步時間指令': 'sudo apt-get install ntp'檢查 :'dpkg -l | grep ntp '成功結果 ':'ii ntp 1:4.2.6.p2+dfsg-1ubuntu5.1 Network Time Protocol daemon and utility programs'ii ntpdate 1:4.2.6.p2+dfsg-1ubuntu5.1 client for setting system time from NTP servers'錯誤狀況'/'故障排除':'網路可能不通 或者 'apt-get '因網路環境無法更新安裝完成後接著我們必須編輯sudo vi /etc/ntp.conf 將底下這兩行加入後存檔server 192.168.104.11 #NTP Server nova 控制中心的ipsudo /etc/init.d/ntp restart 然後我們將 NTP Server 重新啟動* Stopping NTP server ntpd [ OK ]* Starting NTP server ntpd [ OK ]安裝nova 元件'目標:安裝 Nova Components'指令': 'sudo apt-get install -y nova-common python-nova nova-compute vlan euca2ools unzip 設定nova 環境 sudo vi /etc/nova/nova.conf' ('這裡我們可以把剛剛設好的 'nova-cc '的內容複製過來 改一下綠色的部分即可') --dhcpbridge_flagfile=/etc/nova/nova.conf--dhcpbridge=/usr/bin/nova-dhcpbridge--logdir=/var/log/nova--state_path=/var/lib/nova--lock_path=/var/lock/nova--verbose--s3_host=192.168.104.11 ###外部ip--rabbit_host=10.10.10.1 ###內部ip--cc_host=10.10.10.1 ###內部ip--ec2_url=http://192.168.104.11:8773/services/Cloud ###外部ip--fixed_range=10.0.0.0/8 --network_size=256--FAKE_subdomain=ec2 --routing_source_ip=10.10.10.2 ###'內部'ip -------- '把'routing source '改成這個節的的內部網路'IP --sql_connection=mysql://root:nova@192.168.104.11/nova ###外部ip 需要mysql帳號:密碼--glance_host=10.10.10.1 ###內部ip--image_service=nova.image.glance.GlanceImageService--iscsi_ip_prefix=10.10.10. 這樣就完成一個node 非常的簡單 安裝過程大部分較困難的地方為 nova 控制中心 因為我們這裡採用All in one方式,簡化了許多各個元件溝通與透過兩張網卡方式減少許多繁瑣的地方方便玩成實際測試環境的過程,不過若真正要真正達成以此營運的目的建議還是最好把nova-network nova-volume nova-objectstore nova-scheduler nova-compute nova-glance 各自分開,當某一個元件失效不至於造成全系統不能運作 手動制作linux image先建立一個5G大小的img aaron@nova-cc:/home/nova$ sudo kvm-img create -f raw ubuntu1104ser.img 5G Formatting 'ubuntu1104ser.img', fmt=raw size=5368709120下載或者若有光碟機也可以利用作ISO檔wget http://releases.ubuntu.com/natty/ubuntu-11.04-server-amd64.iso製作光碟 sudo dd if=/dev/cdrom of=/home/nova/ubuntu-11.04-server-amd64.isoroot@nova-cc:/home/nova# sudo kvm -m 512 -cdrom ubuntu-11.04-server-amd64.iso -drive file=ubuntu1104ser.img,if=scsi,index=0 -boot d -net nic -net user -vnc :0 這個時候Terminal會停住我們要利用VNC 連到安裝的介面需要安裝 sudo apt-get install xvnc4viewer接著我們另開一個Terminal輸入vncviewer IP:1接著就可以安裝了安裝的過程需要注意在分割區工作時的把 5GB 空間全部分割為 ext4 根目錄/ ,一個就好也不用建立 swap 若有警告則不予理會安裝好重新開機接著我們必須用vncviewersudo kvm -hda ubuntu1104ser.img -vnc :0再進入一次調整一下這個OS 的相關設定sudo apt-get update; sudo apt-get upgrade;sudo apt-get install openssh-server cloud-init如果做的是Centos or Fedora yum update yum install openssh-server chkconfig sshd on安裝完成無誤後輸入 sudo rm - rf / etc/udev/rules.d/70-persistent-net.rules 目的在於砍掉當時對eth0的設定讓每次使用的時產生新的該VM網路卡的rule安裝完後 關機 shutdown -h nowsudo losetup -f ubuntu1104ser.imgsudo losetup -a 你可以看到這樣的結果/dev/loop [0801]:16908388 ($filepath) 接著我們找出起始的sector root@nova-cc:/home/nova# sudo fdisk -cul /dev/loop0Disk /dev/loop1: 5368 MB, 5368709120 bytes 149 heads, 8 sectors/track, 8796 cylinders, total 10485760 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00048055 Device Boot Start End Blocks Id System /dev/loop1p0 * 2048 10483711 5240832 83 Linux 上面最後一行顯示sector 是從2048开始的,單一sector是512bytes , 2048 x 512 = 1048576 這個數字要記接著我們要要複製 loop0 先Unmount loop0 sudo losetup -f -o 1048576 server.imgsudo losetup -d /dev/loop0sudo losetup -a 可以看到底下這行/dev/loop0: [0801]:550044 (/home/nova/ubuntutemplate.img), offset 1048576sudo dd if=/dev/loop0 of=ubuntu1104server_template.img10483712+0 records in 10483712+0 records out 5367660544 bytes (5.4 GB) copied, 133.322 s, 40.3 MB/s複製之後先卸載 loop0 sudo losetup -d /dev/loop0再來我們先mountsudo mount -o loop serverfinal.img /mnt將最底下的這行註解掉#UUID=548c16fd-889a-4248-bc45-e75c9802d69a / ext4 errors=remount-ro $改成 LABEL=uec-rootfs /ext4 defaults 0 0 sudo cp /mnt/boot/vmlinuz-2.6.38-7-server /home/nova