块存储服务概述

OpenStack块存储服务(cinder)给虚拟机添加持久存储。块存储给管理卷提供一个基础设施,并与OpenStac计算服务进行交互从而给云主机实例提供卷。该服务也启用了卷快照和卷类型的管理。

块存储服务由下面组件构成:

cinder-api

接受API请求,并将它们路由到cinder-volume的ation。

cinder-volume

直接和存储服务交互,并处理如cinder-scheduler等。它也这些进程通过消息队列进行交互。Cinder-volume服务反馈读和写请求到块存储服务以维持状态。通过驱动结构它能与各种存储提供商进行交互。

cinder-scheduler daemon

选择最佳的存储供应节点然后在其上创建卷。和nova-scheduler类似。

cinder-backup daemon

cinder-backup服务为备份存储供应程序提供任何类型的卷备份。如cinder-volume服务,它能通过驱动结构与各种存储供应程序交互。

Messaging queue

在各个存储进程之间进行信息转发。

 



安装和配置控制节点

这部分描述如何在控制节点安装块存储服务。此服务要求至少一个额外存储节点来给云主机实例提供卷。



先决条件

1.以下几步完成数据库创建:

l用root账号登陆数据库

mysql -u root -p

l创建cinder数据库

CREATE DATABASE cinder;

l给cinder数据库授权

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

l退出数据库

2.加载admin凭证

. admin-openrc

3.创建服务凭证

l创建cinder用户

openstack user create --domain default --password-prompt cinder

openstack利用存储再创建虚机 openstack存储服务_数据库

l将admin角色添加给cinder用户

openstack role add --project service --user cinder admin

l创建cinder和cinderv2服务entities

openstack service create --name cinder --description "OpenStack Block Storage" volume
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

openstack利用存储再创建虚机 openstack存储服务_操作系统_02

备注:块存储服务要求两个服务

 

4.创建块存储服务 API endpoints

openstack endpoint create --region RegionOne volume public http://controller:8776/v1/%\(tenant_id\)s

openstack利用存储再创建虚机 openstack存储服务_mysql_03

openstack endpoint create --region RegionOne volume internal http://controller:8776/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne volume admin http://controller:8776/v1/%\(tenant_id\)s

openstack利用存储再创建虚机 openstack存储服务_openstack利用存储再创建虚机_04

openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(tenant_id\)s

openstack利用存储再创建虚机 openstack存储服务_操作系统_05

openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(tenant_id\)s

openstack利用存储再创建虚机 openstack存储服务_操作系统_06

备注:块存储要求为两个服务实体每个都要创建对应的endpoint。

 



安装和配置组件

1.安装软件包

yum install openstack-cinder

2.编辑/etc/cinder/cinder.conf文件,并修改操作:

l在[database]部分,配置数据库访问

[database]
...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

将CINDER_DBPASS替换成正确的密码

l在[DEFAULT]和[oslo_messaging_rabbit]部分,配置RabbitMQ消息队列访问

[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS

将RABBIT_PASS替换成正确的密码

l在[DEFAULT] and [keystone_authtoken]部分,配置Identity服务访问

[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS

         将CINDER_PASS替换成正确的密码

l在[default]部分,my_ip为控制节点的管理网络IP地址

[DEFAULT]
...
my_ip = 192.168.213.81

l在[oslo_concurrency]部分,配置lock path

[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp

3.同步数据库

su -s /bin/sh -c "cinder-manage db sync" cinder



配置计算服务使用块存储

1.编辑/etc/nova/nova.conf文件并添加下面内容

[cinder]
os_region_name = RegionOne



完成安装

1.重启计算API服务

systemctl restart openstack-nova-api.service

2.启动块存储服务并配置开机启动

systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service



安装和配置存储节点

这部分描述如何在存储节点安装块存储服务。为简单起见,这个配置将引用一个带有一个空的本地存储设备的存储节点。此操作指南使用/dev/sdb,但你可以替换成你特定节点不同的值。

该服务在此设备上使用LVM驱动提供逻辑卷,并通过iSCSI端口将它们提供给云主机实例。你可以按照这些指引进行较小的修改,以水平扩展你的环境与额外的存储节点。

 



先决条件

在存储节点开始安装和配置块存储服务前,你必须准备存储设备。

1.安装支持工具包

l安装LVM包

yum install lvm2

l启动LVM元数据服务并配置开机自启动

systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service

2.创建LVM物理卷/dev/sdb

pvcreate /dev/sdb

3.创建LVM卷组cinder-volumes

vgcreate cinder-volumes /dev/sdb

         块存储服务会在这个卷组里创建逻辑卷。

4.只有云主机实例能访问块存储卷。然而,底层操作系统管理与卷相关的设备。默认情况下,LVM卷扫描工具会为包含卷的块存储设备扫描/dev目录。如果项目在他们的卷上使用LVM,扫描工具检测到这些卷,并试图对其进行缓存,缓存这些可导致一系列与底层操作系统和工程量都相关的问题。你必须重新配置LVM来只扫描包含cinder-volume卷组的设备。编辑/etc/lvm/lvm.conf文件并完成下面步骤。

l在devices部分,添加一个filter来接受/dev/sdb设备并拒绝所有的其它设备

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

在filter数组里的每一项,以a开头表示接受,以r开头表示拒收,并且包含一个正则表达式设备名。数组必须以r/.*/结尾来拒收任何剩下的设备。你可以用vgs –vvvv命令来测试filters

警告:如果你的存储节点在操作系统盘使用LVM,你必须也添加相关的设备到filter。例如,如果/dev/sda设备包含操作系统:filter = [ "a/sda/", "a/sdb/", "r/.*/"]。

类似的,如果你的计算节点在操作系统盘使用LVM,你必须也要修改这些节点的/etc/lvm/lvm.conf文件里的filter,将操作系统盘包括进去。例如,如果/dev/sda设备包含操作系统:filter = [ "a/sda/", "r/.*/"]



安装和配置组件

1.安装软件包

yum install openstack-cinder targetcli

2.编辑/etc/cinder/cinder.conf文件

l在[database]部分,配置数据库访问

[database]
...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

将CINDER_DBPASS正确的密码

l在[DEFAULT] 和 [oslo_messaging_rabbit]部分,RabbitMQ消息队列

[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS

RABBIT_PASS正确的密码

l在[DEFAULT] 和 [keystone_authtoken]部分,配置Identity服务访问

[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS

CINDER_PASS正确的密码

l在[default]部分,配置my_ip

[DEFAULT]
...
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

         将MANAGEMENT_INTERFACE_IP_ADDRESS替换成存储节点管理网络接口IP地址。

l在[lvm]部分,配置

[lvm]
...
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm

l在[default]部分,配置

[DEFAULT]
...
enabled_backends = lvm

l在[default]部分,配置

[DEFAULT]
...
glance_api_servers = http://controller:9292

l在[oslo_concurrency]部分,配置

[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp



完成安装

启动块存储卷服务包括它的依赖,并配置开机启动

systemctl enable openstack-cinder-volume.service target.service
systemctl start openstack-cinder-volume.service target.service

 



验证操作

下列操作在控制节点进行

1.加载admin凭证

. admin-openrc

2.列出服务组件来验证每个进程成功启动

cinder service-list