九、OpenStack的Cinder服务安装
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 项目中),并创建 volume 和 volumev2 两个服务实体(分别对应 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.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.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

至此,Cinder 块存储服务已在控制节点上安装并配置完成。后续可通过 cinder list 命令或 Dashboard 界面验证存储服务的可用性,例如创建卷、挂载卷、创建快照等操作。
可以看看前面几节内容。
一、云计算和OpenStack
二、OpenStack云平台架构设计
三、安装部署OpenStack所需基础软件包
四、OpenStack的Keystone认证服务
五、OpenStack的Glance镜像服务安装
六、OpenStack的nova计算服务
七、OpenStack的Neutron网络服务安装
八、OpenStack的dashboard服务安装