第二部分 OpenStack安裝與配置

第二部分 OpenStack安裝與配置

1、引言

 

本章內容講解如何在3臺物理機上搭建最小化雲平臺,這3臺機器分爲稱爲Server一、Server2和Client1,以後的各章也是如此。Server1承載着Nova、Glance、Swift、Keystone及Horizon(OpenStack的Web UI)服務。Server2只用來運行實例管理的nova運算工做站。因爲OpenStack組件採用分佈式結構,其中的任何一部分或幾個部分均可以安裝在任意服務器上。html

 

Client1並非安裝所必須的,在本例中,它僅用來製做打包鏡像,並使用它訪問Horizon在Web上管理OpenStack設施。因而就避免了使用服務器來完成鏡像打包等諸如此類的任務了,並且在製做桌面系統鏡像時若是包含視窗界面的話,咱們也只能相應地使用有GUI的電腦來完成,故而最好仍是別在服務器上玩火了吧。建議Client1支持虛擬化技術,以便在製做完鏡像打包時能夠運行KVM。node

 

 

 

 

 

 

OpenStack安裝須要設定主機名、IP地址等,按你實際的環境進行配置。下表是譯者安裝的網絡參數清單:python

 

如下是教程中網絡設置參數, 本教程均採用這些參數,但在實際安裝中請參照上表進行設置
 

2、Server1

 

正如上表所示,Server1包含了全部的Nova服務:nova-compute、nova-api、nova-volume、nova-network以及Glance、Swift、Keystone和Horizon。這臺服務器上須要雙網卡。mysql

 

(一)安裝底層OS

 

沒必要多想,請參照下述說明,記住相關參數,選擇64位Ubuntu12.04版,進行安裝。linux

l 建立的第一個用戶命名爲「localadmin」sql

l 爲eth0和eth1設定IP及其相關參數數據庫

l 在安裝服務包中,僅選擇「Openssh-server」做爲預裝項apache

 

 

由於Server1上也將安裝nova-volume軟件,而nova-volume須要一塊專用分區,因此在安裝Ubuntu Server時請選擇手動分區,並另行建立一塊合適大小的分區。從本章起,教程都將以/dev/sda6做爲這塊分區。你能夠根據本身分區的實際狀況進行修改。此外,請使用fdisk工具將該分區須要格式化爲LVM(8e)格式,這一操做在安裝中或剛安裝完畢格式化都可。進一步,若是你還計劃在這臺服務器上再新建一個分區配給Swift的話,那麼就新建一塊分區並參照本章後文「安裝Swift」一節相關內容進行安裝。ubuntu

待12.04的UbuntuOS安裝完畢後 ,使用下列命令更新系統:swift

sudo apt-get update

sudo apt-get upgrade

 

 

安裝網橋工具bridge-utils:

sudo apt-get install bridge-utils

 

 

(二)配置網絡

 

編輯/etc/network/interfaces文件,以下所示:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 10.10.10.2

netmask 255.255.255.0

broadcast 10.10.10.255

gateway 10.10.10.1

dns-nameservers 10.10.8.3

auto eth1

iface eth1 inet static

address 192.168.3.1

netmask 255.255.255.0

network 192.168.3.0

broadcast 192.168.3.255

 

隨後從新啓動網絡:

sudo /etc/init.d/networking restart

 

 

(三)NTP服務器

 

安裝NTP軟件包。這個時間服務器將爲全部節點提供支持。OpenStack全部組件的時間都必須同步,因而咱們就在Server1上安裝NTP服務而且讓其餘服務器或節點與之保持同步。

sudo apt-get install ntp

 

譯者注:NTP(Network Time Protocol),是用來使計算機時間同步化的一種協議,它可使計算機對其服務器或時鐘源(如石英鐘,GPS等等)作同步化,它能夠提供高精準度的時間校訂(LAN上與標準間差小於1毫秒,WAN上幾十毫秒),且可介由加密確認的方式來防止惡毒的協議攻擊。[來源:百度百科]

 

 

打開文件/etc/ntp.conf增長如下三行內容,目的是讓本服務器時間與外部服務器時間同步。若是不能訪問外網,NTP服務器將使用本機硬件時鐘做爲第二選擇。

server ntp.ubuntu.com

server 127.127.1.0

fudge 127.127.1.0 stratum 10

 

 

而後重啓NTP使配置生效:

sudo service ntp restart

 

請確保服務器IP地址能夠被DNS解析。若是不能,則在/etc/hosts文件中手工加入。

 

 

(四)數據庫

 

咱們有不少選擇:MySQL、PostgreSQL或者SQLite等都能很好地對Nova和Glance提供數據支持。究竟選哪一個,本身定吧。本例中採用MySQL。

 

 

MySQL

安裝mysql-server和python-mysqldb包:

sudo apt-get install mysql-server python-mysqldb

 

 

爲mysql建立root密碼,在此使用「mygreatsecret」。隨後編輯mysql配置文件/etc/mysql/my.cnf,將綁定地址從127.0.0.1改成0.0.0.0,以下所示:

bind-address = 0.0.0.0

 

 

重啓MySQL服務器讓其開始監聽全部端口:

sudo restart mysql

 

 

建立數據庫

咱們將要爲nova、glance和keystone建立不少東東,各類數據庫、表及用戶。話音未落,這就開始了:

 

建立名爲「nova」的數據庫:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'

 

 

新建一個用戶,名爲「novadbadmin」:

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'

 

 

授予novadbadmin用戶nova數據庫所有權限:

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"

 

 

爲novadbadmin同志建立密碼(譯者注:密碼是novasecret,後文相似之處很少言,請詳見命令):

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"

 

 

Glance登場,仍是重複剛纔的道道,首先建立一個名爲glance的數據庫:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'

 

 

而後爲這個新建的數據庫添加一個用戶「glancedbadmin」:

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'

 

 

接着,光榮授予他本數據庫的所有權限:

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"

 

 

是的,最後一步,爲該用戶分配密碼:

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glancesecret');"

 

 

很煩的,keystone出場了。剛纔的大循環,至此開始演繹第三遍:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret')"

 

如今,MySQL部分的工做結束。

 

 

(五)Keystone

 

Keystone是OpenStack的認證服務。使用如下命令進行安裝:

sudo apt-get install keystone python-keystone python-keystoneclient

 

 

打開/etc/keystone/keystone.conf文件,將這一行:

admin_token = ADMIN

改成:

admin_token = admin

(本教程中咱們將一直使用admin做爲令牌)

 

 

本例中,咱們使用MySQL來存儲keystone配置,則將 /etc/keystone/keystone.conf中的這句配置:

connection = sqlite:////var/lib/keystone/keystone.db

換成:

connection = mysql://keystonedbadmin:keystonesecret@10.10.10.2/keystone

 

 

而後,重啓Keystone:

sudo service keystone restart

 

 

接着,執行如下命令同步數據庫:

sudo keystone-manage db_sync

 

 

最後,有些環境變量是OpenStack運行所必須的:

export SERVICE_ENDPOINT="http://localhost:35357/v2.0"

export SERVICE_TOKEN=admin

固然爲了不下次系統重啓後,還得將這些變量再次export,最穩妥的辦法就是將其寫入~/.bashrc中。

 

 

建立租間

使用如下命令建立兩個租間,admin和service:

keystone tenant-create --name admin

keystone tenant-create --name service

 

 

建立用戶

執行如下命令,建立四個用戶admin、nova、glance及swift:

keystone user-create --name admin --pass admin --email admin@foobar.com

keystone user-create --name nova --pass nova --email nova@foobar.com

keystone user-create --name glance --pass glance --email glance@foobar.com

keystone user-create --name swift --pass swift --email swift@foobar.com

 

 

建立角色

使用命令建立兩個角色,admin和Member(譯者注:注意是大寫M):

keystone role-create --name admin

keystone role-create --name Member

 

 

查看租間、用戶和角色

剛纔創建的租間、用戶和角色能夠經過以下命令進行查看:

租間列表:

keystone tenant-list

+----------------------------------+--------------------+---------+

| id | name | enabled |

+----------------------------------+--------------------+---------+

| 7f95ae9617cd496888bc412efdceabfd | admin | True |

| c7970080576646c6959ee35970cf3199 | service | True |

+----------------------------------+--------------------+---------+

 

用戶列表:

keystone user-list

+----------------------------------+---------+-------------------+--------+

| id | enabled | email | name |

+----------------------------------+---------+-------------------+--------+

| 1b986cca67e242f38cd6aa4bdec587ca | True | swift@foobar.com | swift |

| 518b51ea133c4facadae42c328d6b77b | True | glance@foobar.com | glance |

| b3de3aeec2544f0f90b9cbfe8b8b7acd | True | admin@foobar.com | admin |

| ce8cd56ca8824f5d845ba6ed015e9494 | True | nova@foobar.com | nova |

+----------------------------------+---------+-------------------+--------+

 

角色列表:

keystone role-list

+----------------------------------+----------------------+

| id | name |

+----------------------------------+----------------------+

| 2bbe305ad531434991d4281aaaebb700 | admin |

| d983800dd6d54ee3a1b1eb9f2ae3291f | Member |

+----------------------------------+----------------------+

 

請你們格外注意id列中的值,雖然很長,但隨後爲用戶綁定角色,繼而把用戶配入租間中時可全靠它們了。

 

 

爲特定租間中的用戶綁定角色

如今咱們先爲剛剛建立的用戶綁定角色,經過以下命令格式能夠將特定租間中的特定用戶增長角色(譯者注:僅是命令格式,隨後纔是真正執行的命令):

keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID

其中id字段能夠經過keystone user-list,keystone role-list和keystone tenant-list命令得到。

 

 

下面開始爲「admin」租間中的「admin」用戶綁定「admin」角色:

keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd

 

 

接着執行以下命令,爲「service」租間中的「nova」、「glance」、「swift」用戶綁定「admin」角色:

keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199

keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199

keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199

 

 

Horizon和Swift只「Member」角色便可,因此相應地執行以下命令:

keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd

 

注意,在執行本身的安裝時,請千萬按照實際安裝中的id進行設置,照抄本文id必將出錯!

 

 

建立服務

至此,咱們該建立受權用戶能夠享用的服務了,命令格式以下:

keystone service-create --name service_name --type service_type --description 'Description of the service'

 

安裝上述格式,建立nova-compute、nova-volume、glance、swift、keystone及ec2服務:

keystone service-create --name nova --type compute --description 'OpenStack Compute Service'

keystone service-create --name volume --type volume --description 'OpenStack Volume Service'

keystone service-create --name glance --type image --description 'OpenStack Image Service'

keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'

keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'

keystone service-create --name ec2 --type ec2 --description 'EC2 Service'

 

 

剛纔建立的每一個服務都擁有惟一的id,要查看服務id,使用以下命令便可:

keystone service-list

+----------------------------------+----------+--------------+----------------------------+

| id | name | type | description |

+----------------------------------+----------+--------------+----------------------------+

| 1e93ee6c70f8468c88a5cb1b106753f3 | nova | compute | OpenStack Compute Service |

| 28fd92ffe3824004996a3e04e059d875 | ec2 | ec2 | EC2 Service |

| 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity | OpenStack Identity Service |

| 96f35e1112b143e59d5cd5d0e6a8b22d | swift | object-store | OpenStack Storage Service |

| f38f4564ff7b4e43a52b2f5c1b75e5fa | volume | volume | OpenStack Volume Service |

| fbafab6edcab467bb734380ce6be3561 | glance | image | OpenStack Image Service |

+----------------------------------+----------+--------------+----------------------------+

這些id將被用於定義所屬服務的入口(endpoint)。

 

 

建立入口

建立服務入口的命令格式是:

keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url --internalurl internal_url

 

 

使用以下命令建立nova-compute入口:

keystone endpoint-create --region myregion --service_id 1e93ee6c70f8468c88a5cb1b106753f3 --publicurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --adminurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --internalurl 'http://10.10.10.2:8774/v2/$(tenant_id)s'

使用以下命令建立nova-volume入口:

keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --adminurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --internalurl 'http://10.10.10.2:8776/v1/$(tenant_id)s'

使用以下命令建立glance入口:

keystone endpoint-create --region myregion --service_id fbafab6edcab467bb734380ce6be3561 --publicurl 'http://10.10.10.2:9292/v1' --adminurl 'http://10.10.10.2:9292/v1' --internalurl 'http://10.10.10.2:9292/v1'

 

使用以下命令建立swift入口:

keystone endpoint-create --region myregion --service_id 96f35e1112b143e59d5cd5d0e6a8b22d --publicurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s' --adminurl 'http://10.10.10.2:8080/v1' --internalurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s'

使用以下命令建立keystone入口:

keystone endpoint-create --region myregion --service_id 7d4ec192dfa1456996f0f4c47415c7a7 --publicurl http://10.10.10.2:5000/v2.0 --adminurl http://10.10.10.2:35357/v2.0 --internalurl http://10.10.10.2:5000/v2.0

使用以下命令建立ec2入口:

keystone endpoint-create --region myregion --service_id 28fd92ffe3824004996a3e04e059d875 --publicurl http://10.10.10.2:8773/services/Cloud --adminurl http://10.10.10.2:8773/services/Admin --internalurl http://10.10.10.2:8773/services/Cloud

 

 

(六)Glance

 

使用如下命令安裝glance:

sudo apt-get install glance glance-api glance-client glance-common glance-

registry python-glance

 

 

配置Glance服務

Glance默認使用SQLite,MySQL或PostgreSQL也能夠很好地與Glance工做。

打開 /etc/glance/glance-api-paste.ini文件並在末尾編輯以下內容:

admin_tenant_name = %SERVICE_TENANT_NAME%

admin_user = %SERVICE_USER%

admin_password = %SERVICE_PASSWORD%

這些值須要用剛纔咱們安裝中的實際值進行替換,admin_tenant_name應該是「service」,admin_user這裏是「glance」、admin_password是「glance」。

 

 

編輯完這三行應該是以下的樣子:

admin_tenant_name = service

admin_user = glance

admin_password = glance

 

 

接着再打開 /etc/glance/glance-registry-paste.ini文件,也如上述操做同樣在文件尾部進行一樣的編輯。

 

而後,修改glance數據庫鏈接爲MySQL,編輯 /etc/glance/glance-registry.conf,找到「sql_connection =」這句做以下修改:

sql_connection = mysql://glancedbadmin:glancesecret@10.10.10.2/glance

 

緊接着仍是這份文件,在底部增長以下設置,目的是讓glance使用keystone受權:

[paste_deploy]

flavor = keystone

 

 

打開 /etc/glance/glance-api.conf文件,在文件末尾增長以下配置:

[paste_deploy]

flavor = keystone

 

 

在MySQL數據庫中建立glance schema,進行同步:

sudo glance-manage version_control 0

sudo glance-manage db_sync

 

 

上述改動所有完成後,重啓glance-api和glance-registry服務:

sudo restart glance-api

sudo restart glance-registry

 

 

設置以下環境變量,你也能夠將其寫入 ~/.bashrc中:

export SERVICE_TOKEN=admin

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://localhost:5000/v2.0/"

export SERVICE_ENDPOINT=http://localhost:35357/v2.0

 

 

如今咱們可使用這個命令來測試glance是否正確安裝:

glance index

若是這條命令沒有返回任何結果,則說明glance已經正確安裝完畢,並與Keystone正常通訊。如果稍微探究一下的話,上述命令其實有返回值,正確安裝狀況下的返回值是0,可使用echo $?進行查看。

 

 

在Glance正確配置且使用keystone做爲受權機制後,咱們即可以上傳鏡像到glance了,相關內容詳見後文中的「鏡像管理(Image Management)」。

 

(七)Nova

 

先使用以下命令安裝nova及其相關組件:

sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth

 

 

配置Nova

以以下配置爲例,編輯nova主配文件 /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=/run/lock/nova

--allow_admin_api=true

--use_deprecated_auth=false

--auth_strategy=keystone

--scheduler_driver=nova.scheduler.simple.SimpleScheduler

--s3_host=10.10.10.2

--ec2_host=10.10.10.2

--rabbit_host=10.10.10.2

--cc_host=10.10.10.2

--nova_url=http://10.10.10.2:8774/v1.1/

--routing_source_ip=10.10.10.2

--glance_api_servers=10.10.10.2:9292

--image_service=nova.image.glance.GlanceImageService

--iscsi_ip_prefix=192.168.4

--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova

--ec2_url=http://10.10.10.2:8773/services/Cloud

--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens

--api_paste_config=/etc/nova/api-paste.ini

--libvirt_type=kvm

--libvirt_use_virtio_for_bridges=true

--start_guests_on_host_boot=true

--resume_guests_state_on_host_boot=true

# vnc specific configuration

--novnc_enabled=true

--novncproxy_base_url=http://10.10.10.2:60

--vncserver_proxyclient_address=10.10.10.2

--vncserver_listen=10.10.10.2

# network specific settings

--network_manager=nova.network.manager.FlatDHCPManager

--public_interface=eth0

--flat_interface=eth1

--flat_network_bridge=br100

--fixed_range=192.168.4.1/27

--floating_range=10.10.10.2/27

--network_size=32

--flat_network_dhcp_start=192.168.4.33

--flat_injected=False

--force_dhcp_release

--iscsi_helper=tgtadm

--connection_type=libvirt

--root_helper=sudo nova-rootwrap

--verbose

 

建立一個物理卷:

sudo pvcreate /dev/sda6

 

 

建立一個名爲「nova-volumnes」的卷組:

sudo vgcreate nova-volumes /dev/sda6

 

 

修改 /etc/nova文件夾的屬主及 /etc/nova/nova.conf文件的訪問權限:

sudo chown -R nova:nova /etc/nova

sudo chmod 644 /etc/nova/nova.conf

 

進入 /etc/nova/api-paste.ini文件,找到末尾三行:

admin_tenant_name = %SERVICE_TENANT_NAME%

admin_user = %SERVICE_USER%

admin_password = %SERVICE_PASSWORD%

 

 

用以前建立的名字進行替換(譯者注:和Glance一模一樣,只是此次是nova),編輯完畢以下所示:

admin_tenant_name = service

admin_user = nova

admin_password = nova

 

 

仍然在MySQL數據庫進行同步:

sudo nova-manage db sync

 

 

爲實例提供IP池:

sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32

 

 

輸出環境變量:

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://localhost:5000/v2.0/"

 

 

重啓nova服務:

sudo restart libvirt-bin; 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 nova-consoleauth;

 

 

執行下列命令測試nova是否正確安裝:

sudo nova-manage service list

Binary Host Zone Status State Updated_At

nova-network server1 nova enabled :-) 2012-04-20 08:58:43

nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44

nova-volume server1 nova enabled :-) 2012-04-20 08:58:44

nova-compute server1 nova enabled :-) 2012-04-20 08:58:45

nova-cert server1 nova enabled :-) 2012-04-20 08:58:43

 

 

若全部組件都是微笑,說明nova已經正確安裝完畢。

(八)OpenStack管理面板

 

執行下列命令安裝管理面板:

sudo apt-get install openstack-dashboard

 

 

重啓Apache:

sudo service apache2 restart

 

 

好消息,如今打開瀏覽器輸入server1的IP地址,就能夠看到OpenStack的管理面板登錄界面了。默認用戶名和密碼都是「admin」。在管理面板中,能夠進行建立密匙對,建立、編輯安全羣組,新建實例,添加捲等操做。具體內容詳見後文「OpenStack Dashboard」章節。

 

(九)Swift

 

安裝Swift

最重要的部分是swift的代理、帳戶、容器及對象服務器:

sudo apt-get install swift swift-proxy swift-account swift-container swift-object

 

 

隨後安裝一些支持組件,xfsprogs(支持XFS文件系統)、python.pastedeploy(訪問keystone)和curl(測試swift):

sudo apt-get install xfsprogs curl python-pastedeploy

 

 

Swift存儲端

有兩種方法來建立或製備存儲端,一種是採用現有的分區或卷做爲存儲設備,另外一種是建立環迴文件(Loopback file)並將當作存儲設備。安裝時,兩種方式自選。

 

 

1. 分區做爲存儲設備

若是在安裝OS時爲Swift預留了一個分區,你就能夠直接使用它。若是該分區沒有使用過或還是空閒空間(好比/dev/sdb3),就應該把它格式化爲xfs文件系統,接着編輯 /etc/fstab中該分區的掛載點(注意:請根據實際狀況選擇你自定的設備,本教程假定手頭未使用也沒分區的空閒空間在 /dev/sdb上):

sudo fdisk /dev/sdb

Type n for new partition

Type e for extended partion

Choose appropriate partition number ( or go with the default )

Choose first and last sectors to set the hard disk size (or go with defaults)

Note that 83 is the partition type number for Linux

Type w to write changes to the disk

 

 

上述命令將建立一個譬如 /dev/sdb3的分區,接着咱們便將其格式化爲XFS。記得格式化前要先使用命令「sudo fdisk -l」查看當前分區表,肯定系統列出的分區含有你即將格式化的目標分區。最後,若是剛纔xfsprogs成功安裝的話,咱們纔可以使用如下命令:

sudo mkfs.xfs -i size=1024 /dev/sdb3

sudo tune2fs -l /dev/sdb3 |grep -i inode

 

 

建立一個該分區的掛載點,並命名爲「swift_backend」:

sudo mkdir /mnt/swift_backend

 

 

緊接着編輯 /etc/fstab文件寫入以下內容以便系統啓動時自動加載這個分區:

/dev/sdb3 /mnt/swift_backend xfs noatime,nodiratime,nobarrier,logbufs=8 0 0

 

 

2. 環迴文件做爲存儲設備

建立一個空文件做爲Swift存儲的環回設備,在這裏咱們使用disk copy命令建立它並命名爲swift-disk,還將爲其分配1G的磁盤空間。若是空間不夠,能夠經過改變seek值來增長空間。隨後格式化爲XFS:

sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000

sudo mkfs.xfs -i size=1024 /srv/swift-disk

file /srv/swift-disk

swift-disk1: SGI XFS filesystem data (blksz 4096, inosz 1024, v2 dirs)

 

 

建立掛載點:

sudo mkdir /mnt/swift_backend

 

 

寫入 /etc/fstab:

/srv/swift-disk /mnt/swift_backend xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0

 

 

3. 使用存儲

掛載存儲分區前,須要建立一些設備節點並設置其屬主和主羣爲「Swift」:

sudo mount /mnt/swift_backend

pushd /mnt/swift_backend

sudo mkdir node1 node2 node3 node4

popd

sudo chown swift.swift /mnt/swift_backend/*

for i in {1..4}; do sudo ln -s /mnt/swift_backend/node$i /srv/node$i; done;

sudo mkdir -p /etc/swift/account-server /etc/swift/container-server /etc/

swift/object-server /srv/node1/device /srv/node2/device /srv/node3/device /srv/node4/device

sudo mkdir /run/swift

sudo chown -L -R swift.swift /etc/swift /srv/node[1-4]/ /run/swift

 

 

爲了在系統啓動時啓動Swift服務,須要把以下兩行命令寫入 /etc/rc.local裏,位置在「exit 0;」以前:

sudo mkdir /run/swift

sudo chown swift.swift /run/swift

配置遠程備份

Rsync用來維護對象副本,許多swift服務都使用它保持對象一致性及進行更新操做。全部存儲節點都將享用此配置:

 

首先編輯 /etc/default/rsync文件:

Set RSYNC_ENABLE=true

 

 

而後編輯 /etc/rsyncd.conf配置文件,以下所示:

# General stuff

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /run/rsyncd.pid

address = 127.0.0.1

 

 

# Account Server replication settings

[account6012]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/account6012.lock

 

 

[account6022]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/account6022.lock

 

 

[account6032]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/account6032.lock

 

 

[account6042]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/account6042.lock

 

 

# Container server replication settings

[container6011]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/container6011.lock

 

 

[container6021]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/container6021.lock

 

 

[container6031]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/container6031.lock

 

 

[container6041]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/container6041.lock

 

 

# Object Server replication settings

[object6010]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/object6010.lock

 

 

[object6020]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/object6020.lock

 

 

[object6030]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/object6030.lock

 

 

[object6040]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/object6040.lock

 

 

最後從新啓動服務完成rsync配置:

sudo service rsync restart

 

 

配置Swift組件

詳細的配置選項參見http://swift.openstack.org/deployment_guide.html。若是安裝了swift-doc包的話,則能夠在/usr/share/doc/swift-doc/html目錄下直接查看。Python使用paste.deploy管理配置。默認配置選項在[DEFAULT]段中,後面配置其它特殊項會覆蓋默認段中的相關內容。格式以下:

THE SYNTAX set option_name = value

 

 

如下是一份paste.deploy的配置樣例,僅供參考:

[DEFAULT]

name1 = globalvalue

name2 = globalvalue

name3 = globalvalue

set name4 = globalvalue

 

 

[pipeline:main]

pipeline = myapp

 

 

[app:myapp]

use = egg:mypkg#myapp

name2 = localvalue

set name3 = localvalue

set name5 = localvalue

name6 = localvalue

 

 

建立並編輯 /etc/swift/swift.conf文件,並寫入以下配置:

[swift-hash]

# random unique string that can never change (DO NOT LOSE). I'm using 03c9f48da2229770.

# od -t x8 -N 8 -A n < /dev/random

# The above command can be used to generate random a string.

swift_hash_path_suffix = 03c9f48da2229770

 

 

特別的,當創建更多的節點時,你須要記住隨機串。不要照抄本例,請經過如下命令生成本身的隨機字符串:

od -t x8 -N 8 -A n < /dev/random

 

1. 配置Swift代理服務器

代理服務器是swift的門衛,它的職責是檢測合法性。它將審查:1、請求是否僞造,2、請求使用資源的用戶身份。具體操做由keystone之類的認證服務器來協助完成。

 

建立並編輯 /etc/swift/proxy-server.conf並增長以下內容:

[DEFAULT]

bind_port = 8080

user = swift

swift_dir = /etc/swift

 

 

[pipeline:main]

# Order of execution of modules defined below

pipeline = catch_errors healthcheck cache authtoken keystone proxy-server

 

 

[app:proxy-server]

use = egg:swift#proxy

allow_account_management = true

account_autocreate = true

set log_name = swift-proxy

set log_facility = LOG_LOCAL0

set log_level = INFO

set access_log_name = swift-proxy

set access_log_facility = SYSLOG

set access_log_level = INFO

set log_headers = True

account_autocreate = True

 

 

[filter:healthcheck]

use = egg:swift#healthcheck

 

 

[filter:catch_errors]

use = egg:swift#catch_errors

 

 

[filter:cache]

use = egg:swift#memcache

set log_name = cache

 

 

[filter:authtoken]

paste.filter_factory = keystone.middleware.auth_token:filter_factory

auth_protocol = http

auth_host = 127.0.0.1

auth_port = 35357

auth_token = admin

service_protocol = http

service_host = 127.0.0.1

service_port = 5000

admin_token = admin

admin_tenant_name = service

admin_user = swift

admin_password = swift

delay_auth_decision = 0

 

 

[filter:keystone]

paste.filter_factory = keystone.middleware.swift_auth:filter_factory

operator_roles = admin, swiftoperator

is_admin = true

 

注意:可使用apt-get安裝swift-doc軟件包,安裝後許多文檔都收錄在/usr/share/doc/swift-doc/html下,本配置樣例也是如此。

2. 配置Swift帳戶服務器

默認swift容器服務配置文件爲 /etc/swift/account-server.conf:

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2

 

 

[pipeline:main]

pipeline = account-server

 

 

[app:account-server]

use = egg:swift#account

 

 

[account-replicator]

 

 

[account-auditor]

 

 

[account-reaper]

 

 

全部的account server配置文件都在 /etc/swift/account-server目錄中。與 /srv裏的設備相對應,咱們建立1.conf、2.conf等等文件,並將它們放到/etc/swift/account-server/下。如下是/etc/swift/account-server/1.conf配置文件的內容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6012

user = swift

log_facility = LOG_LOCAL2

 

 

[pipeline:main]

pipeline = account-server

 

 

[app:account-server]

use = egg:swift#account

 

 

[account-replicator]

vm_test_mode = no

 

 

[account-auditor]

 

 

[account-reaper]

 

 

對其它設備也是如此,好比/srv/node二、/srv/node三、/srv/node4等,咱們分別建立2.conf,3.conf和4.conf與之對應。如今利用1.conf進行復制生成其他文件,並一一設置惟一的綁定端口及本地日誌值:

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/2.conf

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/3.conf

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/4.conf

sudo sed -i 's/6012/6022/g;s/LOCAL2/LOCAL3/g;s/node1/node2/g' /etc/swift/account-server/2.conf

sudo sed -i 's/6012/6032/g;s/LOCAL2/LOCAL4/g;s/node1/node3/g' /etc/swift/account-server/3.conf

sudo sed -i 's/6012/6042/g;s/LOCAL2/LOCAL5/g;s/node1/node4/g' /etc/swift/account-server/4.conf

3. 配置Swift容器服務器

默認swift容器服務配置文件爲 /etc/swift/container-server.conf:

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2

 

 

[pipeline:main]

pipeline = container-server

 

 

[app:container-server]

use = egg:swift#container

 

 

[container-replicator]

 

 

[container-updater]

 

 

[container-auditor]

 

 

[container-sync]

 

 

與account-server相似,咱們一樣建立 /etc/swift/container-server/1.conf等等文件與 /srv設備匹配,這是1.conf文件內容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6011

user = swift

log_facility = LOG_LOCAL2

 

 

[pipeline:main]

pipeline = container-server

 

 

[app:container-server]

use = egg:swift#container

 

 

[container-replicator]

vm_test_mode = no

 

 

[container-updater]

 

 

接着利用1.conf繼續建立2.conf、3.conf和4.conf。並修改端口(分別是602一、6031和6041)及本地日誌值(LOG_LOCAL三、LOG_LOCAL4和 LOG_LOCAL5)。

 

4. 配置Swift對象服務器

默認swift容器服務配置文件爲 /etc/swift/object-server.conf:

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2

 

 

[pipeline:main]

pipeline = object-server

 

 

[app:object-server]

use = egg:swift#object

 

 

[object-replicator]

 

 

[object-updater]

 

 

[object-auditor]

 

 

與account-server和container-server同樣,咱們一樣建立 /etc/swift/object-server/1.conf等等文件與 /srv設備匹配,這是1.conf文件內容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6010

user = swift

log_facility = LOG_LOCAL2

 

 

[pipeline:main]

pipeline = object-server

 

 

[app:object-server]

use = egg:swift#object

 

 

[object-replicator]

vm_test_mode = no

 

 

[object-updater]

 

 

[object-auditor]

 

 

繼而利用1.conf繼續建立2.conf、3.conf和4.conf。並修改端口(分別是6020、6030和6040)及本地日誌值(LOG_LOCAL三、LOG_LOCAL4和 LOG_LOCAL5)。

 

5. 配置Swift Ring服務器

Ring是swift的一個極爲重要的組件,它維護着對象的真實物理位置信息,對象的副本及多種設備。建立與對象服務、容器服務和帳戶服務相對應的ring-builder文件:

pushd /etc/swift

sudo swift-ring-builder object.builder create 18 3 1

sudo swift-ring-builder container.builder create 18 3 1

sudo swift-ring-builder account.builder create 18 3 1

注意:執行以上命令時須要在 /etc/swift目錄下。

命令中的參數指定了分區、副本和小時的數量,用來限制分區屢次移動。能夠參考man頁面中的swift-ring-builder獲取更多信息。

 

 

如今添加區域以均衡ring服務。命令格式以下:

swift-ring-builder <builder_file> add <zone>-<ip_address>:<port>/<device><weight>

 

 

執行下列命令:

sudo swift-ring-builder object.builder add z1-127.0.0.1:6010/device 1

sudo swift-ring-builder object.builder add z2-127.0.0.1:6020/device 1

sudo swift-ring-builder object.builder add z3-127.0.0.1:6030/device 1

sudo swift-ring-builder object.builder add z4-127.0.0.1:6040/device 1

sudo swift-ring-builder object.builder rebalance

sudo swift-ring-builder container.builder add z1-127.0.0.1:6011/device 1

sudo swift-ring-builder container.builder add z2-127.0.0.1:6021/device 1

sudo swift-ring-builder container.builder add z3-127.0.0.1:6031/device 1

sudo swift-ring-builder container.builder add z4-127.0.0.1:6041/device 1

sudo swift-ring-builder container.builder rebalance

sudo swift-ring-builder account.builder add z1-127.0.0.1:6012/device 1

sudo swift-ring-builder account.builder add z2-127.0.0.1:6022/device 1

sudo swift-ring-builder account.builder add z3-127.0.0.1:6032/device 1

sudo swift-ring-builder account.builder add z4-127.0.0.1:6042/device 1

sudo swift-ring-builder account.builder rebalance

 

 

 

啓動Swift服務

使用如下命令啓動swift和REST API:

sudo swift-init main start

sudo swift-init rest start

 

 

測試Swift

能夠經過Swift命令或Horizon提供的Web管理面板測試Swift是否正確運行。

首先,將 /etc/swift目錄的屬主設爲swift.swift:

sudo chown -R swift.swift /etc/swift

 

 

執行如下命令查看是否能獲得正確的account、容器數量和存儲的對象信息:

swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swift -K swift stat

StorageURL: http://127.0.0.1:8080/v1/AUTH_c7970080576646c6959ee35970cf3199

Auth Token: ba9df200a92d4a5088dcd6b7dcc19c0d

Account: AUTH_c7970080576646c6959ee35970cf3199

Containers: 1

Objects: 1

Bytes: 77

Accept-Ranges: bytes

X-Trans-Id: tx11c64e218f984749bc3ec37ea46280ee

 

 

 

至此,Server1終於安裝完畢!

 

 

3、Server2

 

Server2僅運行nova的運算服務。

 

(一)安裝底層OS

 

安裝64位Ubuntu12.04服務器。

 

(二)配置網絡

 

安裝網橋軟件:

sudo apt-get install bridge-utils

 

 

編輯 /etc/network/interfaces文件,以下所示:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 10.10.10.3

netmask 255.255.255.0

broadcast 10.10.10.255

gateway 10.10.10.1

dns-nameservers 10.10.8.3

auto eth1

iface eth1 inet static

address 192.168.3.2

netmask 255.255.255.0

network 192.168.3.0

broadcast 192.168.3.255

 

 

重啓網絡:

sudo /etc/init.d/networking restart

 

(三)NTP客戶端

 

安裝NTP軟件包:

sudo apt-get install ntp

 

 

編輯 /etc/ntp.conf文件,增長以下內容以同步至server1:

server 10.10.10.2

 

 

重啓NTP服務使配置生效:

sudo service ntp restart

 

(四)Nova組件(僅nova-compute)

 

安裝Nova及其依賴包:

sudo apt-get install nova-compute

 

 

以下所示,編輯 /etc/nova/nova.conf文件。該文件與Server1中的一致:

--dhcpbridge_flagfile=/etc/nova/nova.conf

--dhcpbridge=/usr/bin/nova-dhcpbridge

--logdir=/var/log/nova

--state_path=/var/lib/nova

--lock_path=/run/lock/nova

--allow_admin_api=true

--use_deprecated_auth=false

--auth_strategy=keystone

--scheduler_driver=nova.scheduler.simple.SimpleScheduler

--s3_host=10.10.10.2

--ec2_host=10.10.10.2

--rabbit_host=10.10.10.2

--cc_host=10.10.10.2

--nova_url=http://10.10.10.2:8774/v1.1/

--routing_source_ip=10.10.10.2

--glance_api_servers=10.10.10.2:9292

--image_service=nova.image.glance.GlanceImageService

--iscsi_ip_prefix=192.168.4

--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova

--ec2_url=http://10.10.10.2:8773/services/Cloud

--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens

--api_paste_config=/etc/nova/api-paste.ini

--libvirt_type=kvm

--libvirt_use_virtio_for_bridges=true

--start_guests_on_host_boot=true

--resume_guests_state_on_host_boot=true

# vnc specific configuration

--novnc_enabled=true

--novncproxy_base_url=http://10.10.10.2:6080/vnc_auto.html

--vncserver_proxyclient_address=10.10.10.2

--vncserver_listen=10.10.10.2

# network specific settings

--network_manager=nova.network.manager.FlatDHCPManager

--public_interface=eth0

--flat_interface=eth1

--flat_network_bridge=br100

--fixed_range=192.168.4.1/27

--floating_range=10.10.10.2/27

--network_size=32

--flat_network_dhcp_start=192.168.4.33

--flat_injected=False

--force_dhcp_release

--iscsi_helper=tgtadm

--connection_type=libvirt

--root_helper=sudo nova-rootwrap

--verbose

 

 

從新啓動Server2上的nova-compute服務:

sudo service restart nova-compute

 

 

利用以下命令測試雲中第二個運算節點(即Server2)是否正常運行:

sudo nova-manage service list

Binary Host Zone Status State Updated_At

nova-network server1 nova enabled :-) 2012-04-20 08:58:43

nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44

nova-volume server1 nova enabled :-) 2012-04-20 08:58:44

nova-compute server1 nova enabled :-) 2012-04-20 08:58:45

nova-cert server1 nova enabled :-) 2012-04-20 08:58:43

nova-compute server2 nova enabled :-) 2012-04-21 10:22:27

 

若是看到相似結果,則說明安裝已經成功可使用。

 

至此,Server2安裝完畢!

 

 

 

3、Client1

 

(一)安裝OS

 

安裝64位Ubuntu12.04桌面版。

 

(二)配置網絡

 

以下所示,編輯 /etc/nova/nova.conf文件:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 10.10.10.4

netmask 255.255.255.0

broadcast 10.10.10.255

gateway 10.10.10.1

dns-nameservers 10.10.8.3

 

 

(三)NTP客戶端

 

安裝NTP軟件包:

sudo apt-get install -y ntp

 

 

編輯 /etc/ntp.conf文件,增長以下內容以同步至server1:

server 10.10.10.2

 

 

重啓NTP服務使配置生效:

sudo service ntp restart

 

(四)客戶端工具

如前所述,Ubuntu12.04桌面版用來製做鏡像,一樣它也可使用nvoa、glance和swift命令行工具管理雲。

 

使用下列命令安裝咱們須要的命令行工具:

sudo apt-get install python-novaclient glance-client swift

 

 

接着安裝qemu-kvm:

sudo apt-get install qemu-kvm

 

 

輸入環境變量,並將其添加進 ~/.bashrc腳本中:

export SERVICE_TOKEN=admin

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://10.10.10.2:5000/v2.0/"

export SERVICE_ENDPOINT=http://10.10.10.2:35357/v2.0

 

 

運行nova和glance命令查看是否與OpenStack正常鏈接:

nova list

+--------------------------------------+------------+--------+----------------------+

| ID | Name | Status | Networks

|

+--------------------------------------+------------+--------+----------------------+

| 25ee9230-6bb5-4eca-8808-e6b4e0348362 | myinstance | ACTIVE | private=192.

168.4.35 |

| c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.

168.4.36 |

+--------------------------------------+------------+--------+----------------------+

glance index

ID Name Disk Container Size

Format Format

------------------------------------ ------------------------------

----------------

65b9f8e1-cde8-40e7-93e3-0866becfb9d4 windows qcow2 ovf

7580745728

f147e666-990c-47e2-9caa-a5a21470cc4e debian qcow2 ovf

932904960

f3a8e689-02ed-460f-a587-dc868576228f openSUSE qcow2 ovf

1072300032

aa362fd9-7c28-480b-845c-85a5c38ccd86 CentOScli qcow2 ovf

1611530240

49f0ec2b-26dd-4644-adcc-2ce047e281c5 ubuntuimage qcow2 ovf

1471807488

 

 

(五)管理面板

 

打開瀏覽器輸入Server1的IP地址,如:http://10.10.10.2,便進入管理面板的登錄頁面。使用用戶名「admin」和密碼「admin」進行登錄來管理您剛建好的OpenStack吧。

相關文章
相關標籤/搜索