cinder块存储服务概述
OpenStack 块存储服务(cinder)将持久存储添加到虚拟机。块存储提供用于管理卷的基础结构,并与 OpenStack Compute 进行交互,以提供实例的卷。该服务还支持管理卷快照和卷类型。
块存储服务由以下组件组成:
-
cinder-api
接受 API 请求,并将它们路由到 操作。
cinder-volume
-
cinder-volume
直接与块存储服务和进程(如 )进行交互。它还通过消息队列与这些进程进行交互。该服务响应发送到块存储服务的读取和写入请求以维护状态。它可以通过驱动程序体系结构与各种存储提供程序进行交互。
cinder-scheduler
cinder-volume
-
cinder-scheduler daemon
选择要在其中创建卷的最佳存储提供程序节点。与 类似的组件。
nova-scheduler
-
cinder-backup daemon
该服务向备份存储提供程序提供任何类型的备份卷。与服务一样,它可以通过驱动程序体系结构与各种存储提供程序进行交互。
cinder-backup
cinder-volume
-
Messaging queue
在块存储进程之间路由信息。
安装和配置控制器节点
本节介绍如何在控制器节点上安装和配置块存储服务,代号为block。此服务至少需要一个额外的存储节点,该节点向实例提供卷。
先决条件¶
在安装和配置块存储服务之前,必须创建数据库、服务凭据和 API 终结点。
-
若要创建数据库,请完成以下步骤:
-
使用数据库访问客户端以用户方式连接到数据库服务器:
root
$ mysql -u root -p
-
创建数据库:
cinder
MariaDB [(none)]> CREATE DATABASE cinder;
-
授予对数据库的适当访问权限:
cinder
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';
替换为合适的密码。
CINDER_DBPASS
-
退出数据库访问客户端。
-
-
源凭据以访问仅管理员 CLI 命令:
admin
$ . admin-openrc
-
若要创建服务凭据,请完成以下步骤:
-
创建用户:
cinder
$ openstack user create --domain default --password-prompt cinder User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 40361f373b0d48e4a7189df45ac78410 | | name | cinder | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
-
将角色添加到用户:
admin``cinder
$ openstack role add --project service --user cinder admin
注意
此命令不提供输出。
-
创建 和服务实体:
cinderv2
cinderv3
$ openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | 6d4a9e3b739a4a78bce91910a41c3054 | | name | cinderv2 | | type | volumev2 | +-------------+----------------------------------+
$ openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | b15215fcf7364e728b24c65f2f50d0b2 | | name | cinderv3 | | type | volumev3 | +-------------+----------------------------------+
注意
块存储服务需要两个服务实体。
-
-
创建块存储服务 API 终结点:
[root@controller ~]# openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s +--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 404b00216d784b4c8557914fe21b2cd6 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 6d4a9e3b739a4a78bce91910a41c3054 | | service_name | cinderv2 | | service_type | volumev2 | | url | http://controller:8776/v2/%(project_id)s | +--------------+------------------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s [root@controller ~]# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s +--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | e1f2f38033574041ab3047db3452abef | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 6d4a9e3b739a4a78bce91910a41c3054 | | service_name | cinderv2 | | service_type | volumev2 | | url | http://controller:8776/v2/%(project_id)s | +--------------+------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s +--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | adde633c1f3f49578cf532982587a380 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | b15215fcf7364e728b24c65f2f50d0b2 | | service_name | cinderv3 | | service_type | volumev3 | | url | http://controller:8776/v3/%(project_id)s | +--------------+------------------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s +--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | a5e8507d8b894bd2a9a145781f86ca18 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | b15215fcf7364e728b24c65f2f50d0b2 | | service_name | cinderv3 | | service_type | volumev3 | | url | http://controller:8776/v3/%(project_id)s | +--------------+------------------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s +--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 1b2874ea8ac1490eb0a1fd6facbcb77b | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | b15215fcf7364e728b24c65f2f50d0b2 | | service_name | cinderv3 | | service_type | volumev3 | | url | http://controller:8776/v3/%(project_id)s |
注意
块存储服务需要每个服务实体的终结点。
安装和配置组件¶
-
安装包:
# yum install openstack-cinder
-
编辑文件并完成以下操作:
/etc/cinder/cinder.conf
-
在 本节中,配置数据库访问:
[database]
[database] # ... connection = mysql+pymysql://cinder:cinder@controller/cinder
替换为为块存储数据库选择的密码。
CINDER_DBPASS
-
在 部分中,配置消息队列访问:
[DEFAULT]``RabbitMQ
[DEFAULT] # ... transport_url = rabbit://openstack:openstack@controller
替换为为 帐户选择的密码。
RABBIT_PASS``openstack``RabbitMQ
-
在 和 部分中,配置标识服务访问:
[DEFAULT]``[keystone_authtoken]
[DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = cinder
替换为"标识"服务中为用户选择的密码。
CINDER_PASS
cinder
注意
注释掉或删除部分中任何其他选项。
[keystone_authtoken]
-
在 本节中,配置使用控制器节点的管理接口 IP 地址的选项:
[DEFAULT]``my_ip
[DEFAULT] # ... my_ip = 172.16.30.30
-
-
在 本节中,配置锁定路径:
[oslo_concurrency]
[oslo_concurrency] # ... lock_path = /var/lib/cinder/tmp
-
填充块存储数据库:
# su -s /bin/sh -c "cinder-manage db sync" cinder
注意
忽略此输出中的任何弃用消息。
将计算配置为使用块存储¶
-
编辑该文件并添加以下内容:
/etc/nova/nova.conf
[cinder] os_region_name = RegionOne
完成安装¶
-
重新启动计算 API 服务:
# systemctl restart openstack-nova-api.service
-
启动块存储服务并将其配置为在系统启动时启动:
# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service # systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
安装和配置存储节点
先决条件¶
在存储节点上安装和配置块存储服务之前,必须准备存储设备。
在存储节点上执行这些步骤。
-
安装支持实用程序包:
-
安装 LVM 软件包:
# yum install lvm2 device-mapper-persistent-data
-
启动 LVM 元数据服务并将其配置为在系统启动时启动:
# systemctl enable lvm2-lvmetad.service # systemctl start lvm2-lvmetad.service
注意
默认情况下,某些发行版包括 LVM。
-
-
创建 LVM 物理卷:
/dev/sdb
# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created
-
创建 LVM 卷组:
cinder-volumes
# vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created
块存储服务在此卷组中创建逻辑卷。
-
只有实例可以访问块存储卷。但是,基础操作系统管理与卷关联的设备。默认情况下,LVM 卷扫描工具扫描目录中包含卷的块存储设备。如果项目在卷上使用 LVM,扫描工具将检测这些卷并尝试缓存它们,这可能会导致基础操作系统和项目卷出现各种问题。您必须重新配置 LVM 以仅扫描包含卷组的设备。编辑文件并完成以下操作:
/dev
cinder-volumes
/etc/lvm/lvm.conf
-
在 本节中,添加接受设备并拒绝所有其他设备的筛选器:
devices
/dev/sdb
devices { ... filter = [ "a/sdb/", "r/.*/"]
筛选器数组中的每一项都从接受或拒绝开始,并包括设备名称的正则表达式。阵列必须以拒绝任何剩余设备结束。您可以使用vgs -vv 命令来测试筛选器。
a
r
r/.*/
警告
如果存储节点在操作系统磁盘上使用 LVM,则还必须将关联的设备添加到筛选器中。例如,如果设备包含操作系统:
/dev/sda
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
同样,如果计算节点在操作系统磁盘上使用 LVM,则还必须修改这些节点上文件中的筛选器,以仅包括操作系统磁盘。例如,如果设备包含操作系统:
/etc/lvm/lvm.conf``/dev/sda
filter = [ "a/sda/", "r/.*/"]
-
安装和配置组件¶
-
安装包:
# yum install openstack-cinder targetcli python-keystone
-
编辑文件并完成以下操作:
/etc/cinder/cinder.conf
-
在 本节中,配置数据库访问:
[database]
[database] # ... connection = mysql+pymysql://cinder:cinder@controller/cinder
替换为为块存储数据库选择的密码。
CINDER_DBPASS
-
在 部分中,配置消息队列访问:
[DEFAULT]
RabbitMQ
[DEFAULT] # ... transport_url = rabbit://openstack:openstack@controller
替换为为 帐户选择的密码。
RABBIT_PASS
openstack
RabbitMQ
-
在 和 部分中,配置标识服务访问:
[DEFAULT]
[keystone_authtoken]
[DEFAULT] # ... auth_strategy = keystone [keystone_authtoken] # ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = cinder password = cinder
替换为"标识"服务中为用户选择的密码。
CINDER_PASS
cinder
注意
注释掉或删除部分中任何其他选项。
[keystone_authtoken]
-
在 本节中,配置选项:
[DEFAULT]``my_ip
[DEFAULT] # ... my_ip = 172.16.2.2
替换为存储节点上管理网络接口的 IP 地址,通常为示例体系结构中第一个节点的 10.0.0.41。
MANAGEMENT_INTERFACE_IP_ADDRESS
-
在本节中,使用 LVM 驱动程序、卷组、iSCSI 协议和相应的 iSCSI 服务配置 LVM endpoint。如果该节不存在,请创建它:
[lvm]
cinder-volumes
[lvm]
[lvm] volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes target_protocol = iscsi target_helper = lioadm
-
在本节中,启用 LVM 端:
[DEFAULT]
[DEFAULT] # ... enabled_backends = lvm
注意
端端名称是任意的。例如,本指南使用驱动程序的名称作为端名。
-
在 本节中,配置影像服务 API 的位置:
[DEFAULT]
[DEFAULT] # ... glance_api_servers = http://controller:9292
-
在 本节中,配置锁定路径:
[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
验证 cinder 操作
验证块存储服务的操作。
注意
在控制器节点上执行这些命令。
-
源凭据以访问仅管理员 CLI 命令:
admin
$ . admin-openrc
-
列出服务组件以验证每个进程是否成功启动:
$ openstack volume service list +------------------+------------+------+---------+-------+----------------------------+ | Binary | Host | Zone | Status | State | Updated At | +------------------+------------+------+---------+-------+----------------------------+ | cinder-scheduler | controller | nova | enabled | up | 2020-12-10T09:36:49.000000 | | cinder-volume | cinder@lvm | nova | enabled | up | 2020-12-10T09:36:42.000000 | +------------------+------------+------+---------+-------+----------------------------+