天天看點

OpenStack安裝流程(juno版)- 添加塊存儲服務(cinder)在controller節點上的安裝和配置在block節點上的安裝和配置The NAT network驗證操作安裝時出現的問題及解決方法

OpenStack的Block Storage服務(cinder)是為虛拟機提供長期持久性存儲的。

在controller節點上的安裝和配置

建立cinder的資料庫,服務證書和API端點

  1. 建立資料庫:

    使用

    root

    身份進入資料庫:

    $ mysql -u root -p

    建立

    cinder

    資料庫:

    <pre>

    CREATE DATABASE cinder;

    </pre>

    把cinder資料庫的通路權限賦予名為cinder,來自任何主機位址的使用者,并設定通路密碼為CINDER_DBPASS(替換為合适的密碼):

    <pre>

    GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';</pre>

退出資料庫。

  1. 啟動

    admin

    證書:

    $ source admin-openrc.sh

  2. 建立服務證書:

    建立

    cinder

    使用者:

    <pre>

    $ keystone user-create --name cinder --pass CINDER_PASS

Property Value
email
enabled True
id 9408ad96b4c84f60bc8e7234831e30dd
name cinder
username cinder

+----------+----------------------------------+</pre>

用合适的密碼代替CINDER_PASS。

admin

角色賦予給

nova

使用者:

$ keystone user-role-add --user cinder --tenant service --role admin

這條指令不産生輸出顯示。

建立

cinder

服務實體:

<pre>

$ keystone service-create --name cinder --type volume \

--description "OpenStack Block Storage"
Property Value
description OpenStack Block Storage
enabled True
id f9684c0c5ac847dba5272a921c0029bd
name cinder
type volume

+-------------+----------------------------------+</pre>

<pre>

$ keystone service-create --name cinderv2 --type volumev2 \

--description "OpenStack Block Storage"
Property Value
description OpenStack Block Storage
enabled True
id 3a0192ba67b14b8996260439a2c63922
name cinderv2
type volumev2

+-------------+----------------------------------+</pre>

Block Storage服務需要兩個不同的服務實體,來支援API版本1和版本2。

  1. 建立Block Storage服務的API端點:

    <pre>

    $ keystone endpoint-create \

--service-id $(keystone service-list | awk '/ volume / {print $2}') \

--publicurl http://controller:8776/v1/%(tenant_id)s \

--internalurl http://controller:8776/v1/%(tenant_id)s \

--adminurl http://controller:8776/v1/%(tenant_id)s \

--region regionOne
Property Value
adminurl http://controller:8776/v1/%(tenant_id)s
id 81c2597ca13246f0adb767bf4f8abff3
internalurl http://controller:8776/v1/%(tenant_id)s
publicurl http://controller:8776/v1/%(tenant_id)s
region regionOne
service_id f9684c0c5ac847dba5272a921c0029bd

+-------------+-----------------------------------------+</pre>

<pre>

$ keystone endpoint-create \ --service-id $(keystone service-list | awk '/ volumev2 / {print $2}') \ --publicurl http://controller:8776/v2/%(tenant_id)s \ --internalurl http://controller:8776/v2/%(tenant_id)s \ --adminurl http://controller:8776/v2/%(tenant_id)s \

--region regionOne
Property Value
adminurl http://controller:8776/v2/%(tenant_id)s
id b064cab8aeaa4cbca3983900f222a378
internalurl http://controller:8776/v2/%(tenant_id)s
publicurl http://controller:8776/v2/%(tenant_id)s
region regionOne
service_id 3a0192ba67b14b8996260439a2c63922

+-------------+-----------------------------------------+</pre>

同理,Block Storage服務也需要兩個不同的端點來支援API版本1和版本2。

在controller節點上安裝和配置Block Storage元件

  1. 安裝所需包:

    # apt-get install cinder-api cinder-scheduler python-cinderclient

  2. 編輯# /etc/cinder/cinder.conf檔案:

    [database]

    部分,設定資料庫的通路選項:

    <pre>

    [database]

...

connection = mysql://cinder:[email protected]/cinder</pre>

CINDER_DBPASS為建立cinder資料庫時設立的密碼。

[DEFAULT]

部分,設定RabbitMQ的通路選項:

<pre>

[DEFAULT] ... rpc_backend = rabbit rabbit_host = controller rabbit_password = RABBIT_PASS

</pre>

RABBIT_PASS為RabbitMQ guest賬戶的密碼。

[DEFAULT]

[keystone_authtoken]

部分,設定認證服務的通路選項:

<pre>

[DEFAULT] ... auth_strategy = keystone

</pre>

<pre>

[keystone_authtoken] ... auth_uri = http://controller:5000/v2.0 identity_uri = http://controller:35357 admin_tenant_name = service admin_user = cinder admin_password = CINDER_PASS

</pre>

CINDER_PASS為建立

cinder

使用者時使用的密碼。在[keystone_authtoken]部分,注釋掉 auth_host,auth_port,和auth_protocol的選項,因為identity_uri選項是直接代替它們的。

[DEFAULT]

部分,設定my_ip選項,其值為controller節點在management網絡中的IP位址:

<pre>

[DEFAULT] ... my_ip = 10.10.10.10

</pre>

[DEFAULT]

部分,開啟“詳細輸出日志”選項:

<pre>

[DEFAULT] ... verbose = True

</pre>

  1. 同步資料庫:

# cinder-manage db sync

完成安裝

  1. 重新開機Block Storage服務:

# service cinder-scheduler restart

# service cinder-api restart

  1. 删除Ubuntu預設産生的SQLite資料庫:

# rm -f /var/lib/cinder/cinder.sqlite

在block節點上的安裝和配置

block節點的基礎環境配置

由前文所述的虛拟機模版建立block節點,基礎環境配置如下:

配置存儲

為block節點增添一塊硬碟:設定->存儲->控制器:SATA->添加虛拟硬碟。

配置網絡

block節點虛拟機網絡設定,設定->網絡:

  1. 網卡1,連接配接方式->僅主機(Host-Only)擴充卡,界面名稱->VirtualBox Host-Only Ethernet Adapter #2,控制晶片->準虛拟化網絡(virtio-net),混雜模式->全部允許,接入網線->勾選;
  2. 網卡2,連接配接方式->網絡位址轉換(NAT),控制晶片->準虛拟化網絡(virtio-net),接入網線->勾選。

啟動虛拟機後,配置其網絡,通過更改

# vi /etc/network/interfaces

檔案,添加如下代碼:

<pre>

# The management network interface auto eth0 iface eth0 inet static

address 10.10.10.13
netmask 255.255.255.0
           

The NAT network

auto eth1

iface eth1 inet dhcp</pre>

配置命名的解決方案,更改

# vi /etc/hostname

檔案,将主機名改為block,更改# vi /etc/hosts檔案,添加以下代碼:

<pre>

10.10.10.10 controller 10.10.10.11 compute 10.10.10.12 network 10.10.10.13 block 10.10.10.14 object1 10.10.10.15 object2

</pre>

之後重新開機系統激活配置。

配置NTP

修改配置檔案

# vi /etc/ntp.conf

,添加如下代碼:

<pre>

server controller iburst

</pre>

其他server全部都注釋掉。如果

/var/lib/ntp/ntp.conf.dhcp

檔案存在,則删除之。

重新開機NTP服務:

# service ntp restart

配置LVM

安裝LVM包:

# apt-get install lvm2

建立LVM實體卷(physical volume)

/dev/sdb

<pre>

# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created

</pre>

建立LVM卷的group,命名為cinder-volume:

<pre>

# vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created

</pre>

Block Storage服務在這個group中建立logical volume。

編輯檔案

/etc/lvm/lvm.conf

[devices]

部分,增添一個過濾器,來接受

/dev/sdb

裝置,拒絕其他裝置:

<pre>

devices { ... filter = [ "a/sdb/", "r/.*/"]

</pre>

如果存儲節點在作業系統的磁盤上使用LVM,則同樣必須把相應的裝置也添加到過濾器中。例如,如果

/dev/sda

裝置包含作業系統:

<pre>

filter = [ "a/sda/", "a/sdb/", "r/.*/"]

</pre>

安裝和配置Block Storage volume元件

  1. 安裝包:

# apt-get install cinder-volume python-mysqldb

  1. 編輯

    # vi /etc/cinder/cinder.conf

    檔案:

    [database]

    部分,設定資料庫的通路選項:

    <pre>

    [database]

...

connection = mysql://cinder:[email protected]/cinder</pre>

CINDER_DBPASS為建立cinder資料庫時設立的密碼。

[DEFAULT]

部分,設定RabbitMQ的通路選項:

<pre>

[DEFAULT] ... rpc_backend = rabbit rabbit_host = controller rabbit_password = RABBIT_PASS

</pre>

RABBIT_PASS為RabbitMQ guest賬戶的密碼。

[DEFAULT]

[keystone_authtoken]

部分,設定認證服務的通路選項:

<pre>

[DEFAULT] ... auth_strategy = keystone

</pre>

<pre>

[keystone_authtoken] ... auth_uri = http://controller:5000/v2.0 identity_uri = http://controller:35357 admin_tenant_name = service admin_user = cinder admin_password = CINDER_PASS

</pre>

CINDER_PASS為建立

cinder

使用者時使用的密碼。在[keystone_authtoken]部分,注釋掉 auth_host,auth_port,和auth_protocol的選項,因為identity_uri選項是直接代替它們的。

[DEFAULT]

部分,設定my_ip選項:

<pre>

[DEFAULT] ... my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

</pre>

MANAGEMENT_INTERFACE_IP_ADDRESS為block節點在management網絡中的IP位址,10.10.10.13。

[DEFAULT]

部分,設定鏡像服務的位置:

<pre>

[DEFAULT] ... glance_host = controller

</pre>

[DEFAULT]

部分,開啟“詳細輸出日志”選項:

<pre>

[DEFAULT] ... verbose = True

</pre>

完成安裝

  1. 重新開機Block Storage volume服務和它的依賴庫:

    # service tgt restart

    # service cinder-volume restart

  2. 删除Ubuntu預設産生的SQLite資料庫:

# rm -f /var/lib/cinder/cinder.sqlite

驗證操作

在controller節點上執行以下操作。

  1. 啟動

    admin

    證書:

    $ source admin-openrc.sh

  2. 顯示服務清單,驗證各個程序已成功啟動:

    <pre>

    $ cinder service-list

Binary Host Zone Status State Updated_at Disabled Reason
cinder-scheduler controller nova enabled up 2015-11-30T12:43:21.000000 None
cinder-volume controller nova enabled up 2015-11-30T12:43:21.000000 None

+------------------+------------+------+---------+-------+----------------------------+-----------------+</pre>

  1. 啟動

    demo

    證書:

    $ source demo-openrc.sh

  2. 建立1G的卷:

    <pre>

    $ cinder create --display-name demo-volume1 1

Property Value
attachments []
availability_zone nova
bootable false
created_at 2015-11-30T12:47:36.439726
display_description None
display_name demo-volume1
encrypted False
id 37aadd33-708e-4236-a8a7-1ddc82cca624
metadata {}
size 1
snapshot_id None
source_volid None
status creating
volume_type None

+---------------------+--------------------------------------+</pre>

  1. 驗證建立是否成功,建立的卷是否可用:

    <pre>

    $ cinder list

ID Status Display Name Size Volume Type Bootable Attached to
37aadd33-708e-4236-a8a7-1ddc82cca624 available demo-volume1 1 None false

+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+</pre>

安裝時出現的問題及解決方法

配置完cinder元件後,創立1GB的volume後執行cinder list,建立的volume狀态一直為creating,原因是block節點上cinder版本和controller節點上的版本有差別,解決過程:安裝Ubuntu雲archive keyring和庫

# apt-get install ubuntu-cloud-keyring

# echo "deb http://ubuntu-cloud.archive.c...u" "trusty-updates/juno main" > /etc/apt/sources.list.d/cloudarchive-juno.list

# apt-get update && apt-get dist-upgrade

,更新完後重新開機controller和block節點重新開機創立volume。