OpenStack的Block Storage服務(cinder)是為虛拟機提供長期持久性存儲的。
在controller節點上的安裝和配置
建立cinder的資料庫,服務證書和API端點
-
建立資料庫:
使用
身份進入資料庫: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>
退出資料庫。
- 啟動
證書:admin
$ source admin-openrc.sh
-
建立服務證書:
建立
cinder
使用者:
<pre>
$ keystone user-create --name cinder --pass CINDER_PASS
Property | Value |
---|---|
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。
-
建立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元件
- 安裝所需包:
# apt-get install cinder-api cinder-scheduler python-cinderclient
-
編輯# /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>
- 同步資料庫:
# cinder-manage db sync
完成安裝
- 重新開機Block Storage服務:
# service cinder-scheduler restart
# service cinder-api restart
- 删除Ubuntu預設産生的SQLite資料庫:
# rm -f /var/lib/cinder/cinder.sqlite
在block節點上的安裝和配置
block節點的基礎環境配置
由前文所述的虛拟機模版建立block節點,基礎環境配置如下:
配置存儲
為block節點增添一塊硬碟:設定->存儲->控制器:SATA->添加虛拟硬碟。
配置網絡
block節點虛拟機網絡設定,設定->網絡:
- 網卡1,連接配接方式->僅主機(Host-Only)擴充卡,界面名稱->VirtualBox Host-Only Ethernet Adapter #2,控制晶片->準虛拟化網絡(virtio-net),混雜模式->全部允許,接入網線->勾選;
- 網卡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元件
- 安裝包:
# apt-get install cinder-volume python-mysqldb
- 編輯
# 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>
完成安裝
- 重新開機Block Storage volume服務和它的依賴庫:
# service tgt restart
# service cinder-volume restart
- 删除Ubuntu預設産生的SQLite資料庫:
# rm -f /var/lib/cinder/cinder.sqlite
驗證操作
在controller節點上執行以下操作。
- 啟動
證書:admin
$ source admin-openrc.sh
-
顯示服務清單,驗證各個程序已成功啟動:
<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>
- 啟動
證書:demo
$ source demo-openrc.sh
-
建立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>
-
驗證建立是否成功,建立的卷是否可用:
<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。