9.1 Cinder存储服务

Cinder 是 OpenStack 的块存储服务组件,为云平台中的虚拟机实例提供持久化的块存储设备(类似于云硬盘)。用户可以将卷(Volume)挂载到虚拟机实例上,作为额外的磁盘使用,并且卷可以在不同实例之间迁移。Cinder 支持多种后端存储技术,包括 LVM、Ceph RBD、NFS、EMC、NetApp 等,并提供快照(Snapshot)、克隆(Clone)、卷扩展(Extend)等高级特性。与临时存储不同,Cinder 卷的生命周期独立于虚拟机实例——即使实例被删除,卷中的数据仍然保留。

Cinder 的架构主要由三个核心组件构成:

  • cinder-api:接收用户对卷的创建、删除、挂载、卸载等 REST API 请求,并进行认证和授权。
  • cinder-scheduler:根据调度策略(如容量、亲和性)选择合适的后端存储节点来创建卷。
  • cinder-volume:实际管理卷的生命周期,通过驱动与后端存储设备交互(如 LVM、Ceph RBD 等)。

此外还有 cinder-backup 组件,用于将卷备份到对象存储(如 Swift)或 NFS 中。Cinder 与 Nova 紧密集成:当用户通过 Nova 创建虚拟机时,可以指定挂载已有卷或创建新卷。

下面将详细说明 Cinder 在 OpenStack 环境中的安装与配置步骤。

9.1.1 创建数据库给予权限

在控制节点上登录 MariaDB 数据库,为 Cinder 创建专用的数据库和数据库用户,并授予相应权限。这些操作是 Cinder 存储服务正常运行的前提。

[root@controller ~]# mysql -uroot -p123456
MariaDB [(none)]> create database cinder;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on cinder.* to 'cinder'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all privileges on cinder.* to 'cinder'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

[root@controller ~]# mysql -uroot -p123456
MariaDB [(none)]> create database cinder;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on cinder.* to 'cinder'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all privileges on cinder.* to 'cinder'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

9.1.2 执行脚本获得权限

在 Keystone 认证服务中创建 Cinder 所需的用户、角色和服务实体。首先加载管理员环境变量,然后依次创建 cinder 用户、将 admin 角色授予该用户(在 service 项目中),并创建 volumevolumev2 两个服务实体(分别对应 Cinder API 的 v1 和 v2 版本)。创建用户、角色、服务实体如图9.1所示。

[root@controller ~]# . /root/admin-openrc 
[root@controller ~]# openstack user create --domain taoism --password 123456 cinder
[root@controller ~]# openstack role add --project service --user cinder admin
[root@controller ~]# openstack service create --name cinder --description "OpenStack Block Storage" volume
[root@controller ~]# openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

[root@controller ~]# . /root/admin-openrc 
[root@controller ~]# openstack user create --domain taoism --password 123456 cinder
[root@controller ~]# openstack role add --project service --user cinder admin
[root@controller ~]# openstack service create --name cinder --description "OpenStack Block Storage" volume
[root@controller ~]# openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

图9.1 创建cinder角色.png

图9.1 创建cinder角色

9.1.3 创建cinder设备API

为 Cinder 服务创建 API 端点(Endpoint)。由于 Cinder 同时支持 v1 和 v2 两个 API 版本,因此需要分别为 volume(v1)和 volumev2(v2)创建 public、internal、admin 三种类型的端点,创建 api 实体端点如图9.2所示。

[root@controller ~]# openstack endpoint create --region RegionOne volume public http://controller:8776/v1/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volume internal http://controller:8776/v1/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volume admin http://controller:8776/v1/%\(tenant_id\)s

[root@controller ~]# openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(tenant_id\)s

[root@controller ~]# openstack endpoint create --region RegionOne volume public http://controller:8776/v1/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volume internal http://controller:8776/v1/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volume admin http://controller:8776/v1/%\(tenant_id\)s

[root@controller ~]# openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
[root@controller ~]# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(tenant_id\)s

图9.2创建实体.png

图9.2创建实体

9.1.4 安装cinder组件软件包

在控制节点上安装 Cinder 软件包。该软件包包含了 cinder-api、cinder-scheduler、cinder-volume 等主要组件。
注意:实际生产环境中 cinder-volume 可能部署在专门的存储节点上,但本实验将所有 Cinder 组件部署在控制节点。

[root@controller ~]# yum -y install openstack-cinder

[root@controller ~]# yum -y install openstack-cinder

9.1.5 编辑cinder.conf配置文件

Cinder 的主要配置文件为 /etc/cinder/cinder.conf。在该文件中需要配置数据库连接、消息队列(RabbitMQ)、Keystone 认证、以及后端存储驱动的相关参数。以下配置项与其他服务类似,根据实际环境填写 IP 地址、密码等。编辑文件目录 /etc/cinder/cinder.conf 下的 cinder 服务的配置文件,添加以下内容与其它服务配置条件大致相同,不再赘述。

[root@controller ~]# vi /etc/cinder/cinder.conf
[DEFAULT] 下添加
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.100.10

[database] 下添加
connection = mysql+pymysql://cinder:123456@controller/cinder

[oslo_concurrency] 下添加
lock_path = /var/lib/cinder/tmp

[oslo_messaging_rabbit] 下添加
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 123456

[keystone_authtoken]下添加
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = taoism
user_domain_name = taoism
project_name = service
username = cinder
password = 123456

Cinder 需要与 Nova 配合,以便 Nova 在创建虚拟机时可以挂载 Cinder 卷。因此还需要在 Nova 的配置文件 /etc/nova/nova.conf 中添加 Cinder 的区域信息,告诉 Nova 使用 RegionOne 中的 Cinder 服务。编辑 nova.conf 配置文件,在 [cinder] 下添加以下内容。

[root@controller ~]# vi /etc/nova/nova.conf
[cinder]下添加
os_region_name = RegionOne

注意os_region_name 参数指定了 Cinder 服务所在的区域(Region),当 OpenStack 部署了多个区域时,Nova 需要知道从哪个区域的 Cinder 端点获取卷服务。本实验只有一个 RegionOne,因此直接填写即可。

9.1.6 初始化cinder数据库

执行 cinder-manage db sync 命令,根据 cinder.conf 中定义的数据库连接信息,在 Cinder 数据库中创建所需的表结构。初始化如图9.3所示。

[root@controller~]# su -s /bin/sh -c "cinder-manage db sync" cinder
# 初始化如图9.3所示
# 初始化之后重启nova-api服务并启动cinder服务设置开机自启

初始化数据库后,需要重启 Nova API 服务以使配置生效,并启动 Cinder 相关服务(cinder-api、cinder-scheduler、cinder-volume)并设置为开机自启。

[root@controller ~]# systemctl restart openstack-nova-api.service
[root@controller ~]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service openstack-cinder-volume.service
[root@controller ~]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service openstack-cinder-volume.service

图9.3 初始化cinder数据库.png

图9.3 初始化cinder数据库

至此,Cinder 块存储服务已在控制节点上安装并配置完成。后续可通过 cinder list 命令或 Dashboard 界面验证存储服务的可用性,例如创建卷、挂载卷、创建快照等操作。

可以看看前面几节内容。
一、云计算和OpenStack
二、OpenStack云平台架构设计
三、安装部署OpenStack所需基础软件包
四、OpenStack的Keystone认证服务
五、OpenStack的Glance镜像服务安装
六、OpenStack的nova计算服务
七、OpenStack的Neutron网络服务安装
八、OpenStack的dashboard服务安装

精品推荐:
Ambari大数据管理平台搭建教程
LAMP部署Discuz论坛