本文是在控制节点上部署的Cinder API等管理服务,控制节点不涉及最终数据存储,我们将在后续文章中介绍存储节点的安装配置

1
2
3
4
5
6
7
作者:李晓辉

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

在云计算环境中,块存储服务是实现虚拟机持久化存储的关键组件。OpenStack作为一个功能强大的开源云平台,提供了灵活的块存储解决方案。Cinder作为OpenStack的核心块存储服务组件,负责管理和配置存储卷资源,支持多种存储后端技术。本文将详细介绍如何在OpenStack环境中安装和配置Cinder块存储服务,帮助你搭建一个高效、灵活且可靠的云平台存储架构。

Cinder服务概述

Cinder的作用

Cinder是OpenStack中的块存储服务组件,其主要功能包括:

  1. 存储卷管理:提供存储卷的创建、删除、挂载和卸载功能,支持多种存储后端,如本地存储、SAN存储、分布式存储等。

  2. 快照管理:支持存储卷的快照功能,允许用户创建、恢复和删除快照,用于数据备份和恢复。

  3. 与计算服务集成:与Nova服务紧密集成,为虚拟机提供持久化存储,确保虚拟机能够正常访问存储资源。

  4. 存储类型管理:支持多种存储类型,允许用户根据性能和成本需求选择合适的存储后端。

  5. 备份与恢复:提供存储卷的备份和恢复功能,支持将备份数据存储到外部存储系统,增强数据的安全性。

Cinder的架构

Cinder服务由以下几个主要组件构成:

  1. cinder-api:提供RESTful API接口,供用户和管理员管理存储卷资源。

  2. cinder-scheduler:根据预定义的策略选择合适的存储节点来创建存储卷。

  3. cinder-volume:负责实际的存储卷创建、管理和与后端存储设备的交互。

  4. cinder-backup:提供存储卷的备份和恢复功能。

  5. 数据库:Cinder使用关系型数据库(如MariaDB)存储存储卷的配置信息。

工作原理

Cinder的工作原理可以概括为以下几个步骤:

  1. API请求处理:用户通过Cinder API发送请求,如创建存储卷、挂载存储卷等。cinder-api组件接收这些请求,并将其转发给相应的服务组件。

  2. 资源分配与配置:根据用户的请求,cinder-scheduler选择合适的存储节点,并将配置信息传递给cinder-volume

  3. 存储卷管理cinder-volume根据配置信息,与后端存储设备进行交互,完成存储卷的创建、挂载等操作。

  4. 备份与恢复cinder-backup负责存储卷的备份和恢复操作,确保数据的安全性和可靠性。

通过以上机制,Cinder服务确保了存储卷资源的高效管理和灵活配置,为OpenStack环境中的虚拟机提供了可靠的持久化存储。

本文是在控制节点上部署的Cinder API等管理服务,控制节点不涉及最终数据存储,我们将在后续文章中介绍存储节点的安装配置

准备cinder数据库

在控制节点上创建Cinder数据库和用户,并分配权限。

1
mysql -u root -pLiXiaohui
1
2
3
4
CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'LiXiaohui';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'LiXiaohui';
exit

创建cinder服务用户和分配角色

加载管理员环境变量文件

1
source adminrc.sh

注册Cinder服务到Keystone服务目录中,并创建相应的API端点,使其他服务能够通过Keystone发现和访问Cinder服务。

1
2
3
4
5
6
7
8
9
10
11
12
[root@controller ~]# openstack user create --domain default --password LiXiaohui cinder
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 8d60192ed38646519d542b3f1ea32d5a |
| name | cinder |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@controller ~]# openstack role add --project service --user cinder admin

创建cinder的service和endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[root@controller ~]# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Block Storage |
| enabled | True |
| id | 0fccaf7817214304a4cd80b2890655ac |
| name | cinderv3 |
| type | volumev3 |
+-------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 1234bbb80dc244299bd2e8a4eaf3d168 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 0fccaf7817214304a4cd80b2890655ac |
| 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 | 2e54e026ae3c42e282c4d2bb7ac5113d |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 0fccaf7817214304a4cd80b2890655ac |
| 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 | 6b3c08a639854f22ae9b687bca0e9d27 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 0fccaf7817214304a4cd80b2890655ac |
| service_name | cinderv3 |
| service_type | volumev3 |
| url | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+

安装配置cinder组件

安装Cinder相关软件

在控制节点上安装Cinder服务。

1
yum install openstack-cinder -y

准备配置文件

/etc/cinder/cinder.conf 是Cinder的配置文件,以下是配置内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
crudini --set /etc/cinder/cinder.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller
crudini --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone
crudini --set /etc/cinder/cinder.conf DEFAULT my_ip 192.168.8.10
crudini --set /etc/cinder/cinder.conf database connection mysql+pymysql://cinder:LiXiaohui@controller/cinder
crudini --set /etc/cinder/cinder.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_uri http://controller:5000
crudini --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_type password
crudini --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name Default
crudini --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name Default
crudini --set /etc/cinder/cinder.conf keystone_authtoken project_name service
crudini --set /etc/cinder/cinder.conf keystone_authtoken username cinder
crudini --set /etc/cinder/cinder.conf keystone_authtoken password LiXiaohui
crudini --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp

或者

指定Cinder服务与消息队列(RabbitMQ)之间的连接信息

1
2
3
4
[DEFAULT]
transport_url = rabbit://openstack:LiXiaohui@controller
auth_strategy = keystone
my_ip = 192.168.8.10
1
2
[database]
connection = mysql+pymysql://cinder:LiXiaohui@controller/cinder
1
2
3
4
5
6
7
8
9
10
11
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_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 = LiXiaohui
1
2
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp

填充cinder数据库

运行cinder-manage db sync命令,初始化或更新Cinder服务使用的数据库。此命令会根据Cinder的配置文件(cinder.conf)中的数据库连接信息,创建或更新数据库表结构,确保Cinder服务能够正常运行。

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

配置计算服务使用cinder

为了使Nova(OpenStack的计算服务)能够使用Cinder提供的块存储服务,需要在Nova的配置文件中指定Cinder服务的区域名称。

/etc/nova/nova.conf中编辑

1
crudini --set /etc/nova/nova.conf cinder os_region_name RegionOne

1
2
[cinder]
os_region_name = RegionOne

启动相关服务

1
2
systemctl restart openstack-nova-api.service
systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service --now
  • systemctl restart openstack-nova-api.service:重启Nova API服务,确保Nova服务能够加载最新的配置。
  • systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service --now:启用并启动Cinder API服务和Cinder调度服务。--now选项表示立即启动这些服务,并确保它们在系统启动时自动启动。