10-Openstack 块存储服务 Cinder

熊 0 阅读 虚拟化

1. 基本概念

Cinder是OpenStack中提供块存储服务的组件 , 主要功能是为虚拟机实例提供虚拟磁盘管理服务。Cinder的前身是Nova中的“nova-volume”组件 , OpenStack F 版以后就将其从Nova中被剥离出来作为一个独立的OpenStack组件。

openstack-cinder-1

Cinder是一个可扩展、可靠和可用的块存储服务 , 它的主要功能包括 :

  • 卷管理 : Cinder可以创建、删除、扩容和缩小卷。管理员可以通过API或者命令行接口创建卷 , 指定卷的大小、类型、名称和描述等信息。当需要扩容或缩小卷时 , 管理员可以通过API或命令行接口进行操作。

  • 卷快照 : Cinder支持卷的快照 , 即对现有卷的某个时刻的状态进行备份 , 可以用于数据的保护和还原。管理员可以通过API或命令行接口创建、删除和还原卷快照。

  • 卷的迁移和复制 : Cinder支持卷的迁移和复制 , 可以将卷从一个存储后端迁移到另一个存储后端 , 或者在同一个存储后端中复制卷。管理员可以通过API或命令行接口进行操作。

  • 备份和还原 : Cinder支持卷的备份和还原 , 可以将卷的数据备份到其他地方进行保护。管理员可以通过API或命令行接口创建、删除和还原卷的备份。

  • 存储后端支持 : Cinder支持多种存储后端 , 包括本地存储、iSCSI、NFS、Ceph、GlusterFS等 , 管理员可以根据需求选择和配置不同的存储后端。

  • 多租户支持 : Cinder支持多租户 , 可以为不同的租户提供独立的块存储服务 , 并且可以限制不同租户的配额和权限。

  • 高可用性和容错性 : Cinder具有高可用性和容错性 , 可以保证存储服务的可用性和数据的安全性。Cinder支持多副本和数据冗余 , 同时还支持故障转移和自动恢复。

  • 网络互通性 : Cinder可以与其他OpenStack组件进行交互 , 如Nova、Glance等 , 同时还支持API和命令行接口 , 可以方便地与其他系统进行集成。

总的来说 , Cinder是OpenStack平台中一个重要的组件 , 为云计算环境中虚拟机提供持久化的块存储服务 , 支持多种存储后端和多租户 , 并具有高可用性和容错性。Cinder的主要优势在于其可扩展性和灵活性 , 可以根据需要选择不同的存储后端 , 并且可以通过API和命令行接口进行操作和管理。

2. 存储相关的概念

  • 文件存储

    文件存储依靠文件系统来存储文件。文件直接存储在文件系统上 , 通过FTP、网络文件系统等服务进行访问。特点是使用简单、兼容性好 , 但响应速度和存储容量一般。

  • 块存储

    块存储中的“块”是指存储系统采用的一整块的存储设备 , 如同一块硬盘。块存储技术通常是指将裸磁盘空间整个映射给主机时使用的技术。因此 , 块存储可以虚拟出整块硬盘给云主机使用 , 对云主机的操作系统来说这就是挂载的物理硬盘。它的特点是响应速度极快 , 同时具有高稳定性和可靠性 , 但受硬件容量限制 , 其容量不大。

  • 对象存储

    对象存储以对象(封装)的形式管理数据。对象和文件最大的不同就是对象在文件基础之上增加了元数据。对象数据可以分为两部分:

    • 数据 , 存储于对象存储服务器中

    • 对应的元数据 , 存储于元数据服务器中

数据通常都是无结构的书 , 如图片、视频等。元数据值得是对数据的相关描述 , 例如图片的大小 , 数据存储的位置信息等。当需要访问某个对象时 , 先查询元数据服务器获得具体位置信息 , 再从对象存储服务器中获得具体数据。对象存储主要用于分布式存储 , 其存储容量巨大 , 但速度较慢。

3. Cinder 组件架构

在块存储中 , 裸硬盘通常被称为卷 , Cinder的任务就是管理卷 , 包括卷的创建 , 删除等操作。

openstack-cinder-2

Cinder的主要模块和功能如下。

3.1 Cinder-api

管理 volume 的服务 , 与 volume provider 协调工作 , 管理 volume 的生命周期。运行 cinder-volume 服务的节点被称作为存储节点。

openstack-cinder-3

cinder-volume 在存储节点上运行 , OpenStack 对 Volume 的操作 , 最后都是交给 cinder-volume 来完成的。cinder-volume 自身并不管理真正的存储设备 , 存储设备是由 volume provider 管理的。cinder-volume 与 volume provider 一起实现 volume 生命周期的管理。

通过 Driver 架构支持多种 Volume Provider

接着的问题是:现在市面上有这么多块存储产品和方案(volume provider) , cinder-volume 如何与它们配合呢?

通过的 Driver 架构。 cinder-volume 为这些 volume provider 定义了统一的接口 , volume provider 只需要实现这些接口 , 就可以 Driver 的形式即插即用到 OpenStack 系统中。、

定期向 OpenStack报告计算节点的状态:cinder-volume 会定期向 Cinder 报告存储节点的空闲容量来做筛选启动volume

实现 volume 生命周期管理:Cinder 对 volume 的生命周期的管理最终都是通过 cinder-volume 完成的 , 包括 volume 的 create、extend、attach、snapshot、delete 等。

3.2 volume provider

数据的存储设备 , 为 volume 提供物理存储空间。 cinder-volume 支持多种 volume provider , 每种 volume provider 通过自己的 driver 与cinder-volume 协调工作。

openstack-cinder-4

3.3 cinder-scheduler

scheduler 通过调度算法选择最合适的存储节点创建 volume。 创建 Volume 时 , cinder-scheduler 会基于容量、Volume Type 等条件选择出最合适的存储节点 , 然后让其创建 Volume。

openstack-cinder-5

3.4 Message Queue

Cinder 各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列 , 子服务之间实现了解耦 , 这种松散的结构也是分布式系统的重要特征。

3.5 Database Cinder

有一些数据需要存放到数据库中 , 一般使用 MySQL。数据库是安装在控制节点上的 , 比如在我们的实验环境中 , 可以访问名称为“cinder”的数据库。

3.6 cinder-backup

cinder-backup用于将volume备份到其他存储系统上 , 目前支持的备份存储系统有swift、ceph、IBM Tivoli storage manager(TSM)、glusterFS等 , 默认是swift。

3.7 基本工作流程

Cinder组件的主要功能就是对卷进行创建与管理。

openstack-cinder-6

流程如下:

  • “cinder-api”接收到用户通过管理界面或命令行发起的卷创建请求后 , 完成必要处理后将其发送到消息队列中。

  • “cinder-scheduler”从消息队列中获得请求和数据后 , 从若干存储节点选出一个能存放改卷的节点 , 并将消息发送到消息队列。

  • “cinder-volume”从消息队列中获取请求后 , 通过“volume-provider”调用具体的卷管理系统在存储设备上创建卷。

4. 安装配置

4.1 控制节点配置

4.1.1 环境准备

  1. 数据库配置 , 创建对应cinder数据库。同时对数据库授权, 这里设置对应的数据库用户名cinder密码为cinder123

    [root@node02 ~]# mysql -uroot -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 82623
    Server version: 10.5.22-MariaDB MariaDB Server
    ​
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    ​
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    ​
    MariaDB [(none)]> CREATE DATABASE cinder;
    Query OK, 1 row affected (0.001 sec)
    ​
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder123';
    Query OK, 0 rows affected (0.007 sec)
    ​
  2. 控制节点中创建cinder服务认证

    创建cinder用户, 这里用户cinder的密码设置为cinder

    [root@node01 ~]# openstack user create --domain default --password-prompt cinder
    User Password:
    Repeat User Password:
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | default                          |
    | enabled             | True                             |
    | id                  | 6c6144bfeddd4fc3b881abae28b86a65 |
    | name                | cinder                           |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
    ​

    为cinder用户添加admin角色, 并指明是一个service项目

    [root@node01 ~]# openstack role add --project service --user cinder admin

    创建 cinderv3 服务

    [root@node01 ~]# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | OpenStack Block Storage          |
    | enabled     | True                             |
    | id          | 3d96a994edca412cb67ab74b2ae82526 |
    | name        | cinderv3                         |
    | type        | volumev3                         |
    +-------------+----------------------------------+
  3. 创建块存储服务API端点:

    [root@node01 ~]#  openstack endpoint create --region RegionOne volumev3 public http://openstack-vip.net:8776/v3/%\(project_id\)s
    +--------------+-------------------------------------------------+
    | Field        | Value                                           |
    +--------------+-------------------------------------------------+
    | enabled      | True                                            |
    | id           | f7535d08677b484c9b55f3f203c7f849                |
    | interface    | public                                          |
    | region       | RegionOne                                       |
    | region_id    | RegionOne                                       |
    | service_id   | 3d96a994edca412cb67ab74b2ae82526                |
    | service_name | cinderv3                                        |
    | service_type | volumev3                                        |
    | url          | http://openstack-vip.net:8776/v3/%(project_id)s |
    +--------------+-------------------------------------------------+
    ​
    [root@node01 ~]# openstack endpoint create --region RegionOne volumev3 internal http://openstack-vip.net:8776/v3/%\(project_id\)s
    +--------------+-------------------------------------------------+
    | Field        | Value                                           |
    +--------------+-------------------------------------------------+
    | enabled      | True                                            |
    | id           | 4979fac3ddb9432badc92f4a07925e78                |
    | interface    | internal                                        |
    | region       | RegionOne                                       |
    | region_id    | RegionOne                                       |
    | service_id   | 3d96a994edca412cb67ab74b2ae82526                |
    | service_name | cinderv3                                        |
    | service_type | volumev3                                        |
    | url          | http://openstack-vip.net:8776/v3/%(project_id)s |
    +--------------+-------------------------------------------------+
    ​
    [root@node01 ~]# openstack endpoint create --region RegionOne volumev3 admin http://openstack-vip.net:8776/v3/%\(project_id\)s
    +--------------+-------------------------------------------------+
    | Field        | Value                                           |
    +--------------+-------------------------------------------------+
    | enabled      | True                                            |
    | id           | 2f149e5c205044e7abfbee7eade3b321                |
    | interface    | admin                                           |
    | region       | RegionOne                                       |
    | region_id    | RegionOne                                       |
    | service_id   | 3d96a994edca412cb67ab74b2ae82526                |
    | service_name | cinderv3                                        |
    | service_type | volumev3                                        |
    | url          | http://openstack-vip.net:8776/v3/%(project_id)s |
    +--------------+-------------------------------------------------+
    ​

4.1.2 安装配置组件

  1. 安装软件包

    [root@node01 ~]# dnf  install openstack-cinder
  2. 编辑 /etc/cinder/cinder.conf 文件并完成以下操作:

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

    [database]
    # ...
    connection = mysql+pymysql://cinder:cinder123@openstack-vip.net/cinder

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

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:openstack123@openstack-vip.net

    在 [DEFAULT] 和 [keystone_authtoken] 部分 , 配置身份服务访问权限:

    [DEFAULT]
    # ...
    auth_strategy = keystone
    
    [keystone_authtoken]
    # ...
    www_authenticate_uri = http://openstack-vip.net:5000
    auth_url = http://openstack-vip.net:5000
    memcached_servers = openstack-vip.net:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = cinder
    password = cinder

    在 [DEFAULT] 部分 , 配置 my_ip 选项以使用控制器节点的管理接口IP地址:

    [DEFAULT]
    # ...
    my_ip = 192.168.71.11
  3. 在 [oslo_concurrency] 部分 , 配置锁路径:

    [oslo_concurrency]
    # ...
    lock_path = /var/lib/cinder/tmp
  4. 填充块存储的数据库

    [root@node01 ~]# su -s /bin/sh -c "cinder-manage db sync" cinder
    2024-10-05 17:43:11.863 6822 INFO cinder.db.migration [-] Applying migration(s)
    2024-10-05 17:43:11.867 6822 INFO alembic.runtime.migration [-] Context impl MySQLImpl.
    2024-10-05 17:43:11.868 6822 INFO alembic.runtime.migration [-] Will assume non-transactional DDL.
    2024-10-05 17:43:11.935 6822 INFO alembic.runtime.migration [-] Running upgrade  -> 921e1a36b076, Initial migration.
    2024-10-05 17:43:14.766 6822 INFO alembic.runtime.migration [-] Running upgrade 921e1a36b076 -> c92a3e68beed, Make shared_targets nullable
    2024-10-05 17:43:14.933 6822 INFO alembic.runtime.migration [-] Running upgrade c92a3e68beed -> daa98075b90d, Add resource indexes
    2024-10-05 17:43:15.162 6822 INFO alembic.runtime.migration [-] Running upgrade daa98075b90d -> 89aa6f9639f9, Drop legacy migrate_version table
    2024-10-05 17:43:15.174 6822 INFO cinder.db.migration [-] Migration(s) applied

    验证数据库中是否有对应的表

    MariaDB [(none)]> use cinder
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [cinder]> show tables;
    +----------------------------+
    | Tables_in_cinder           |
    +----------------------------+
    | alembic_version            |
    | attachment_specs           |
    | backup_metadata            |
    | backups                    |
    | cgsnapshots                |
    | clusters                   |
    | consistencygroups          |
    | default_volume_types       |
    | driver_initiator_data      |
    | encryption                 |
    | group_snapshots            |
    | group_type_projects        |
    | group_type_specs           |
    | group_types                |
    | group_volume_type_mapping  |
    | groups                     |
    | image_volume_cache_entries |
    | messages                   |
    | quality_of_service_specs   |
    | quota_classes              |
    | quota_usages               |
    | quotas                     |
    | reservations               |
    | services                   |
    | snapshot_metadata          |
    | snapshots                  |
    | transfers                  |
    | volume_admin_metadata      |
    | volume_attachment          |
    | volume_glance_metadata     |
    | volume_metadata            |
    | volume_type_extra_specs    |
    | volume_type_projects       |
    | volume_types               |
    | volumes                    |
    | workers                    |
    +----------------------------+
    36 rows in set (0.001 sec)
  5. 切换到计算节点,编辑计算节点/etc/nova/nova.conf配置文件 , 在 [cinder]配置段配置nova使用cinder服务

    [cinder]
    os_region_name = RegionOne
  6. 重启nova服务

    [root@node01 ~]# systemctl restart openstack-nova-api.service
  7. 启动cinder-api和cinder-scheduler服务 , 并将其设置为开机启动

    [root@node01 ~]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
    Created symlink /etc/systemd/system/multi-user.target.wants/openstack-cinder-api.service → /usr/lib/systemd/system/openstack-cinder-api.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/openstack-cinder-scheduler.service → /usr/lib/systemd/system/openstack-cinder-scheduler.service.
    [root@node01 ~]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
    
    [root@node01 ~]# ss -tnl
    State           Recv-Q          Send-Q                     Local Address:Port                     Peer Address:Port          Process          
    LISTEN          0               128                              0.0.0.0:8776                          0.0.0.0:*                              
    LISTEN          0               128                              0.0.0.0:8775                          0.0.0.0:*                              
    LISTEN          0               128                              0.0.0.0:8774                          0.0.0.0:*                              
    LISTEN          0               4096                             0.0.0.0:9292                          0.0.0.0:*                              
    LISTEN          0               4096                             0.0.0.0:9696                          0.0.0.0:*                              
    LISTEN          0               100                              0.0.0.0:6080                          0.0.0.0:*                              
    LISTEN          0               128                              0.0.0.0:22                            0.0.0.0:*                              
    LISTEN          0               4096                             0.0.0.0:111                           0.0.0.0:*                              
    LISTEN          0               10                             127.0.0.1:6640                          0.0.0.0:*                              
    LISTEN          0               50                             127.0.0.1:6633                          0.0.0.0:*                              
    LISTEN          0               511                                    *:8778                                *:*                              
    LISTEN          0               511                                    *:5000                                *:*                              
    LISTEN          0               128                                 [::]:22                               [::]:*                              
    LISTEN          0               4096                                [::]:111                              [::]:*                              
    LISTEN          0               511                                    *:80                                  *:*                           

    提示:请确保8776端口处于正常监听就说明cinder服务启动正常;或者直接查看有没有cinder进程启动 , 以此来判断cinder服务是否都启动正常

    到此 , 在控制节点安装配置cinder-api和cinder-scheduler服务就完成了;

4.2 存储节点配置

4.2.1 环境准备

这里创建一个新的存储节点, IP 192.168.71.49

  1. 按照之前的文档初始化存储节点

    设置主机名

    [root@host-192-168-71-49 ~]# hostnamectl set-hostname cinder

    安装基础包

    [root@cinder ~]# dnf  install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop  lsof   telnet bridge-utils ntpsec

    配置时间同步源

    [root@cinder ~]# grep server /etc/chrony.conf 
    # Use public servers from the pool.ntp.org project.
    server 192.168.71.241 iburst
    # Use NTP servers from DHCP.
    
    [root@cinder ~]# systemctl restart chronyd
    [root@cinder ~]# chronyc sources
    MS Name/IP address         Stratum Poll Reach LastRx Last sample               
    ===============================================================================
    ^* 192.168.71.241                3   6    17     3    -55us[-1008us] +/-   50ms

    配置主机名解析

    [root@cinder ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.71.11 node01
    192.168.71.29 node02
    192.168.71.30 node03
    192.168.71.250 openstack-vip.net
    192.168.71.35 node04
    192.168.71.36 node05
    192.168.71.37 node06
    192.168.71.43 node07
    192.168.71.44 node08
    192.168.71.49 cinder

    配置openstack B版的yum仓库

    [root@cinder ~]# dnf install centos-release-openstack-bobcat

    安装python3-openstackclient和openstack-selinux包

    [root@cinder ~]# dnf install python3-openstackclient openstack-selinux -y
  2. 配置节点的存储基础环境

    安装LVM软件包

    [root@cinder ~]# dnf  install lvm2 device-mapper-persistent-data
    Last metadata expiration check: 0:04:31 ago on Sat 05 Oct 2024 06:17:58 PM CST.
    Package lvm2-9:2.03.23-2.el9.x86_64 is already installed.
    Package device-mapper-persistent-data-1.0.9-3.el9_4.x86_64 is already installed.
    Dependencies resolved.
    Nothing to do.
    Complete!

    这对于CentOS 8或更高版本不是必需的 , 因为它们自带的LVM版本不使用lvmetad服务。

    systemctl enable lvm2-lvmetad.service
    systemctl start lvm2-lvmetad.service
  3. 创建lvm物理卷

    [root@cinder ~]# pvcreate /dev/vdb
      Physical volume "/dev/vdb" successfully created.
  4. 创建LVM存储卷cinder-volumes

    [root@cinder ~]# vgcreate cinder-volumes /dev/vdb
      Volume group "cinder-volumes" successfully created
  5. 编辑/etc/lvm/lvm.conf文件并完成下面的操作

    在devices部分 , 添加一个过滤器 , 只接受/dev/sdb设备 , 拒绝其他所有设备:

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

    只有实例才能访问块存储卷。然而 , 底层操作系统管理与卷相关联的设备。默认情况下 , LVM卷扫描工具会扫描 /dev 目录中包含卷的块存储设备。如果项目在它们的卷上使用LVM , 扫描工具会检测到这些卷并尝试缓存它们 , 这可能会导致底层操作系统和项目卷的各种问题。您必须重新配置LVM , 使其只扫描包含 cinder-volumes 卷组的设备。

    将其只允许扫描我们附加的三块磁盘和本地/dev/sda , 默认lvm会扫描整个/dev下的所有设备

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

    过滤数组中的每个项目都以 a 表示接受或 r 表示拒绝开始 , 并包含设备名称的正则表达式。数组必须以 r/.*/ 结尾 , 以拒绝任何剩余的设备。您可以使用 vgs -vvvv 命令来测试过滤器。

    如果您的存储节点在操作系统盘上使用LVM , 您还必须将相关设备添加到过滤器中。例如 , 如果 /dev/sda 设备包含操作系统:

    filter = [ "a/sda/", "a/sdb/", "r/.*/"]
    
    filter = [ "a/vda/", "a/vdb/", "r/.*/"]

    同样 , 如果您的计算节点在操作系统盘上使用LVM , 您还必须修改这些节点上的 /etc/lvm/lvm.conf 文件中的过滤器 , 以仅包括操作系统盘。例如 , 如果 /dev/sda 设备包含操作系统:

    filter = [ "a/sda/", "r/.*/"]

4.2.2 安装配置组件

  1. 安装软件包

    [root@cinder ~]# dnf  install openstack-cinder targetcli
  2. 编辑 /etc/cinder/cinder.conf 文件并完成以下操作

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

    [database]
    # ...
    connection = mysql+pymysql://cinder:cinder123@openstack-vip.net/cinder

    在 [DEFAULT] 部分 , 配置 RabbitMQ 消息队列访问权限

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:openstack123@openstack-vip.net

    在 [DEFAULT] 和 [keystone_authtoken] 部分 , 配置身份服务访问权限

    [DEFAULT]
    # ...
    auth_strategy = keystone
    
    [keystone_authtoken]
    # ...
    www_authenticate_uri = http://openstack-vip.net:5000
    auth_url = http://openstack-vip.net:5000
    memcached_servers = openstack-vip.net:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = cinder
    password = cinder

    在 [DEFAULT] 部分 , 配置 my_ip 选项:

    [DEFAULT]
    # ...
    my_ip = 192.168.71.49

    在 [lvm] 部分 , 使用 LVM 驱动程序、cinder-volumes 卷组、iSCSI 协议以及适当的 iSCSI 服务来配置 LVM 后端。如果 [lvm] 部分不存在 , 请创建它

    [lvm]
    volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
    volume_group = cinder-volumes
    target_protocol = iscsi
    target_helper = lioadm

    在 [DEFAULT] 部分 , 启用 LVM 后端

    [DEFAULT]
    # ...
    enabled_backends = lvm

    在 [DEFAULT] 部分 , 配置图像服务 API 的位置

    [DEFAULT]
    # ...
    glance_api_servers = http://openstack-vip.net:9292

    在 [oslo_concurrency] 部分 , 配置锁路径

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

    cinder.conf最终配置

    [root@cinder ~]# grep -i ^"[a-z\[]" /etc/cinder/cinder.conf
    [DEFAULT]
    auth_strategy = keystone
    glance_api_servers = http://openstack-vip.net:9292
    my_ip = 192.168.71.49
    enabled_backends = lvm
    transport_url = rabbit://openstack:openstack123@openstack-vip.net
    [backend]
    [backend_defaults]
    [barbican]
    [barbican_service_user]
    [brcd_fabric_example]
    [cisco_fabric_example]
    [coordination]
    [cors]
    [database]
    connection = mysql+pymysql://cinder:cinder123@openstack-vip.net/cinder
    [fc-zone-manager]
    [healthcheck]
    [key_manager]
    [keystone_authtoken]
    www_authenticate_uri = http://openstack-vip.net:5000
    auth_url = http://openstack-vip.net:5000
    memcached_servers = openstack-vip.net:11211
    auth_type = password
    project_domain_name = default
    user_domain_name = default
    project_name = service
    username = cinder
    password = cinder
    [nova]
    [os_brick]
    [oslo_concurrency]
    lock_path = /var/lib/cinder/tmp
    [oslo_messaging_amqp]
    [oslo_messaging_kafka]
    [oslo_messaging_notifications]
    [oslo_messaging_rabbit]
    [oslo_middleware]
    [oslo_policy]
    [oslo_reports]
    [oslo_versionedobjects]
    [privsep]
    [profiler]
    [profiler_jaeger]
    [profiler_otlp]
    [sample_castellan_source]
    [sample_remote_file_source]
    [service_user]
    [ssl]
    [vault]
    [lvm]
    volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
    volume_group = cinder-volumes
    target_protocol = iscsi
    target_helper = lioadm
  3. 启动服务 , 并将其设置为开机启动

    [root@cinder ~]# systemctl start openstack-cinder-volume.service target.service
    [root@cinder ~]# systemctl enable openstack-cinder-volume.service target.service
    Created symlink /etc/systemd/system/multi-user.target.wants/openstack-cinder-volume.service → /usr/lib/systemd/system/openstack-cinder-volume.service.
    Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /usr/lib/systemd/system/target.service.

    到此 , 在storage node上的配置就完成了;

4.3 验证

  1. 在控制节点导出admin用户环境变量 , 使用openstack volume service list命令 , 看看是否能够列出服务组件信息

    [root@node01 ~]# . keystone_admin.rc 
    [root@node01 ~]# openstack volume service list 
    +------------------+------------+------+---------+-------+----------------------------+
    | Binary           | Host       | Zone | Status  | State | Updated At                 |
    +------------------+------------+------+---------+-------+----------------------------+
    | cinder-scheduler | node01     | nova | enabled | up    | 2024-10-05T12:57:13.000000 |
    | cinder-volume    | cinder@lvm | nova | enabled | up    | 2024-10-05T12:57:20.000000 |
    +------------------+------------+------+---------+-------+----------------------------+

    能够列出cinder-scheduler和cinder-volume这两个组件就表示我们在控制节点和storage 节点上安装的组件没有问题

  2. 验证:导出demo用户环境,创建卷,看看是否能够正常创建?

    [root@node01 ~]# . demo.sh 
    [root@node01 ~]#  openstack volume create --size 1 volume1
    +---------------------+--------------------------------------+
    | Field               | Value                                |
    +---------------------+--------------------------------------+
    | attachments         | []                                   |
    | availability_zone   | nova                                 |
    | bootable            | false                                |
    | consistencygroup_id | None                                 |
    | created_at          | 2024-10-05T12:59:09.032385           |
    | description         | None                                 |
    | encrypted           | False                                |
    | id                  | b532a869-21e1-4c12-b07e-514585d2a98e |
    | migration_status    | None                                 |
    | multiattach         | False                                |
    | name                | volume1                              |
    | properties          |                                      |
    | replication_status  | None                                 |
    | size                | 1                                    |
    | snapshot_id         | None                                 |
    | source_volid        | None                                 |
    | status              | creating                             |
    | type                | __DEFAULT__                          |
    | updated_at          | None                                 |
    | user_id             | c4c0a73ca297489c9771b3d7e7814b53     |
    +---------------------+--------------------------------------+
  3. 在storage 节点上查看逻辑卷,看看是否有我们刚才创建的卷呢

    image-20241005210033663

5. NFS后端

这个方法没有测试过。后续有时间继续测试

  1. 安装NFS服务器

    在第二个负载服务器安装,或在其他服务器安装。

    [root@linux-host5 ~]# yum install nfs-utils rpcbind
    [root@linux-host5 ~]# mkdir /nfsdata/
    [root@linux-host5 ~]# vim /etc/exports
    /nfsdata *(rw,no_root_squash)
    [root@linux-host5 ~]# systemctl start nfs
    [root@linux-host5 ~]# systemctl enable nfs
  2. 配置 cinder 使用 NFS:

    编辑主配置文件:

    [root@linux-host1 ~]# vim /etc/cinder/cinder.conf
    380 enabled_backends = nfs
    4901 [nfs]
    4902 volume_backend_name = openstack-NFS #定义名称,后面做关联的时候使用
    4903 volume_driver = cinder.volume.drivers.nfs.NfsDriver #驱动
    4904 nfs_shares_config = /etc/cinder/nfs_shares #定义 NFS 挂载的配置文件路径
    4905 nfs_mount_point_base = $state_path/mnt #定义 NFS 挂载点

    创建 NFS 挂载配置文件:

    [root@linux-host1 ~]# vim /etc/cinder/nfs_shares
    192.168.10.205:/nfsdata
    [root@linux-host1 ~]# chown root.cinder /etc/cinder/nfs_shares
    [root@linux-host1 ~]# systemctl restart openstack-cinder-volume.service
  3. 创建磁盘类型并关联

    创建类型

    [root@linux-host1 ~]# cinder type-create lvm
    image-20241006025433762
    [root@linux-host1 ~]# cinder type-create nfs
    image-20241006025457210
  4. 将磁盘类型与磁盘关联

    [root@linux-host1 ~]# source admin-ocata.sh 
    [root@linux-host1 ~]# cinder type-key lvm set volume_backend_name=Openstack-lvm
    [root@linux-host1 ~]# cinder type-key nfs set volume_backend_name=openstack-NFS
  5. 创建 NFS 卷

    image-20241006025631503

    之后直接使用即可


参考链接

云计算管理平台之OpenStack块存储服务cinder - Linux-1874 - 博客园 (cnblogs.com)