OpenStack的Block Storage服务(cinder)是为虚拟机提供长期持久性存储的。
在controller节点上的安装和配置
创建cinder的数据库,服务证书和API端点
- 创建数据库: 使用
root
身份进入数据库:$ mysql -u root -p
创建
<pre>cinder
数据库: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
服务实体:
$ 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 :8776/v1/%(tenant_id)s \--internalurl :8776/v1/%(tenant_id)s \--adminurl :8776/v1/%(tenant_id)s \--region regionOne | |
---|---|
Property | Value |
adminurl | :8776/v1/%(tenant_id)s |
id | 81c2597ca13246f0adb767bf4f8abff3 |
internalurl | :8776/v1/%(tenant_id)s |
publicurl | :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 :8776/v2/%(tenant_id)s \--internalurl :8776/v2/%(tenant_id)s \--adminurl :8776/v2/%(tenant_id)s \
--region regionOne | |
---|---|
Property | Value |
adminurl | :8776/v2/%(tenant_id)s |
id | b064cab8aeaa4cbca3983900f222a378 |
internalurl | :8776/v2/%(tenant_id)s |
publicurl | :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文件:
在
<pre>[database]
部分,设定数据库的访问选项:[database]
...
connection = mysql://cinder:CINDER_DBPASS@controller/cinder</pre> CINDER_DBPASS为创建cinder数据库时设立的密码。在[DEFAULT]
部分,设定RabbitMQ的访问选项:
[DEFAULT]...rpc_backend = rabbitrabbit_host = controllerrabbit_password = RABBIT_PASS
</pre> RABBIT_PASS为RabbitMQ guest账户的密码。 在[DEFAULT]
和[keystone_authtoken]
部分,设定认证服务的访问选项:
[DEFAULT]...auth_strategy = keystone
</pre> <pre>[keystone_authtoken]...auth_uri = :5000/v2.0identity_uri = :35357admin_tenant_name = serviceadmin_user = cinderadmin_password = CINDER_PASS
</pre> CINDER_PASS为创建cinder
用户时使用的密码。在[keystone_authtoken]部分,注释掉 auth_host,auth_port,和auth_protocol的选项,因为identity_uri选项是直接代替它们的。 在[DEFAULT]
部分,设定my_ip选项,其值为controller节点在management网络中的IP地址:
[DEFAULT]...my_ip = 10.10.10.10
</pre> 在[DEFAULT]
部分,开启“详细输出日志”选项:
[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
文件,添加如下代码:
# The management network interfaceauto eth0iface eth0 inet static
address 10.10.10.13netmask 255.255.255.0
The NAT network
auto eth1
iface eth1 inet dhcp</pre>配置命名的解决方案,更改# vi /etc/hostname
文件,将主机名改为block,更改# vi /etc/hosts文件,添加以下代码:
10.10.10.10 controller10.10.10.11 compute10.10.10.12 network10.10.10.13 block10.10.10.14 object110.10.10.15 object2
</pre> 之后重启系统激活配置。
配置NTP
修改配置文件# vi /etc/ntp.conf
,添加如下代码:
<pre>server controller iburst
</pre>
/var/lib/ntp/ntp.conf.dhcp
文件存在,则删除之。 重启NTP服务:# service ntp restart
配置LVM
安装LVM包:
# apt-get install lvm2
创建LVM物理卷(physical volume)/dev/sdb
:
# pvcreate /dev/sdbPhysical 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
文件:在
<pre>[database]
部分,设定数据库的访问选项:[database]
...
connection = mysql://cinder:CINDER_DBPASS@controller/cinder</pre> CINDER_DBPASS为创建cinder数据库时设立的密码。在[DEFAULT]
部分,设定RabbitMQ的访问选项:
[DEFAULT]...rpc_backend = rabbitrabbit_host = controllerrabbit_password = RABBIT_PASS
</pre> RABBIT_PASS为RabbitMQ guest账户的密码。 在[DEFAULT]
和[keystone_authtoken]
部分,设定认证服务的访问选项:
[DEFAULT]...auth_strategy = keystone
</pre> <pre>[keystone_authtoken]...auth_uri = :5000/v2.0identity_uri = :35357admin_tenant_name = serviceadmin_user = cinderadmin_password = CINDER_PASS
</pre> CINDER_PASS为创建cinder
用户时使用的密码。在[keystone_authtoken]部分,注释掉 auth_host,auth_port,和auth_protocol的选项,因为identity_uri选项是直接代替它们的。 在[DEFAULT]
部分,设定my_ip选项:
[DEFAULT]...my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
</pre> MANAGEMENT_INTERFACE_IP_ADDRESS为block节点在management网络中的IP地址,10.10.10.13。 在[DEFAULT]
部分,设定镜像服务的位置:
[DEFAULT]...glance_host = controller
</pre> 在[DEFAULT]
部分,开启“详细输出日志”选项:
[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 u" "trusty-updates/juno main" > /etc/apt/sources.list.d/cloudarchive-juno.list
,# apt-get update && apt-get dist-upgrade
,更新完后重启controller和block节点重启创立volume。