OpenStack存储管理-Cinder

作业与实验环境

超星网址
快照管理:控制节点和计算节点选择均是默认的项目12

LVM相关概念

LVM架构

1699759786593.png

LVM基本概念

  • LVM(Logical Volume Manager):

    LVM是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义,而不是使用物理磁盘名”sda”和”sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

  • 物理卷(Physical Volume,PV)

    物理卷是逻辑卷管理(LVM)中的概念,物理卷就是指磁盘、磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

  • 物理块(Physical Extent,PE)

    每一个物理卷PV被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成

  • 卷组(Volume Group,VG)

    卷组是一个逻辑概念,它是由一个或多个物理卷组成的存储池。可以把卷组想象为一块逻辑硬盘,在卷组上创建一个或多个LV(逻辑卷)。

  • 逻辑卷(Logical Volume,LV)

    逻辑卷是在卷组上创建的逻辑存储卷,它们提供了一种更灵活和可管理的方法来管理存储空间。逻辑卷可以具有自己的文件系统,并可以被格式化、挂载和管理,就像物理磁盘一样。逻辑卷可以根据需求进行动态调整大小,因此可以更方便地管理存储空间。

1699759851924.png

LVM常用命令

  • pvcreate:创建一个新的物理卷。示例:pvcreate /dev/sdb1。

  • pvdisplay:显示一个或多个物理卷的详细信息。

  • vgcreate:创建一个新的卷组。示例:vgcreate myvg /dev/sdb1。

  • vgdisplay:显示一个或多个卷组的详细信息。

  • vgextend:将一个或多个物理卷添加到现有卷组。示例:vgextend myvg /dev/sdc1。

  • lvcreate:在卷组中创建一个新的逻辑卷。示例:lvcreate -L 10G -n mylv myvg。

  • lvdisplay:显示一个或多个逻辑卷的详细信息。

  • lvextend:增加逻辑卷的大小。示例:lvextend -L +5G /dev/myvg/mylv。

LVM逻辑卷扩展

  1. 查看计算节点的物理卷和卷组的信息。

    [root@compute ~]# pvdisplay
    --- Physical volume ---
    PV Name               [unknown]
    VG Name               centos
    PV Size               97.46 GiB / not usable 4.00 MiB
    Allocatable           yes
    PE Size               4.00 MiB
    Total PE              24949
    Free PE               1
    Allocated PE          24948
    PV UUID               3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK
    
    --- Physical volume ---
    PV Name               /dev/sdb
    VG Name               cinder-volumes
    PV Size               20.00 GiB / not usable 4.00 MiB
    Allocatable           yes
    PE Size               4.00 MiB
    Total PE              5119
    Free PE               245
    Allocated PE          4874
    PV UUID               vSDAxW-GzVr-ldTC-qE25-ug1y-mfVT-6cfTJv
    [root@compute ~]# vgdisplay cinder-volumes
        --- Volume group ---
    VG Name               cinder-volumes
    System ID
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  4
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                1
    Open LV               0
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               <20.00 GiB
    PE Size               4.00 MiB
    Total PE              5119
    Alloc PE / Size       4874 / <19.04 GiB
    Free  PE / Size       245 / 980.00 MiB
    VG UUID               254qGq-XDu8-Tq4S-xaBI-cInk-op3B-YmtOqw
  2. 查看逻辑卷信息。

    [root@compute ~]# lvdisplay
    --- Logical volume ---
    LV Name                cinder-volumes-pool
    VG Name                cinder-volumes
    LV UUID                B8WmC3-3BYJ-Gh0s-qdCI-WdLm-CDOK-rOEhNf
    LV Write Access        read/write
    LV Creation host, time compute, 2022-05-01 02:31:17 -0400
    LV Pool metadata       cinder-volumes-pool_tmeta
    LV Pool data           cinder-volumes-pool_tdata
    LV Status              available
    # open                 0
    LV Size                19.00 GiB
    Allocated pool data    0.00%
    Allocated metadata     10.55%
    Current LE             4864
    Segments               1
    Allocation             inherit
    Read ahead sectors     auto
    - currently set to     8192
    Block device           253:4
  3. 增加虚拟机硬盘。

    这一步在计算节点关机状态下添加硬盘。

    1699841171866.png 1699841208005.png 1699841121338.png

    添加硬盘后启动系统,lsblk命令查看新添加的硬盘/dev/sdc

  4. 设置LVM过滤。

    # 1.修改lvm.conf第130行不过滤/dev/sdc
    [root@compute ~]# vi /etc/lvm/lvm.conf

    将原文:

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

    修改为:

    filter = [ "a/sdb/","a/sdc/","r/.*/" ]
  5. /dev/sdc创建物理卷。

    [root@compute ~]# pvcreate /dev/sdc
    WARNING: Device for PV 3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK not found or rejected by a filter.
    WARNING: Device for PV 3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK not found or rejected by a filter.
    WARNING: Device for PV 3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK not found or rejected by a filter.
    Couldn't find device with uuid 3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK.
    WARNING: Couldn't find all devices for LV centos/root while checking used and assumed devices.
    WARNING: Couldn't find all devices for LV centos/swap while checking used and assumed devices.
    Physical volume "/dev/sdc" successfully created.
  6. 将物理卷添加到原有的卷组中。

    [root@compute ~]# vgextend cinder-volumes /dev/sdc
    WARNING: Device for PV 3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK not found or rejected by a filter.
    WARNING: Device for PV 3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK not found or rejected by a filter.
    Couldn't find device with uuid 3THuGY-5NLo-b3Nc-PehS-Nosp-fQT0-swRkgK.
    WARNING: Couldn't find all devices for LV centos/root while checking used and assumed devices.
    WARNING: Couldn't find all devices for LV centos/swap while checking used and assumed devices.
    Volume group "cinder-volumes" successfully extended

    查看扩展后的卷组信息,扩展后卷组大小为40G。

    [root@compute ~]# vgdisplay cinder-volumes
    --- Volume group ---
    VG Name               cinder-volumes
    System ID
    Format                lvm2
    Metadata Areas        2
    Metadata Sequence No  5
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                1
    Open LV               0
    Max PV                0
    Cur PV                2
    Act PV                2
    VG Size               39.99 GiB
    PE Size               4.00 MiB
    Total PE              10238
    Alloc PE / Size       4874 / <19.04 GiB
    Free  PE / Size       5364 / 20.95 GiB
    VG UUID               254qGq-XDu8-Tq4S-xaBI-cInk-op3B-YmtOqw

    作业1:查看扩展后的卷组信息,截图上传。

Cinder块存储服务

Cinder 是 OpenStack 中的块存储服务组件,用于提供持久化的块级存储。Cinder向用户提供基于数据块的存储设备访问服务,以卷的形式提供给虚拟机实例挂载,为实例提供额外的存储空间。用户可以自主创建、管理和分配块存储卷,并将这些卷连接到虚拟机实例,以供其使用。

卷的基本操作

  1. 创建卷。

    # 创建大小为10GB的卷
    [root@controller ~]# openstack volume create --size 10 test_volume
    +---------------------+--------------------------------------+
    | Field               | Value                                |
    +---------------------+--------------------------------------+
    | attachments         | []                                   |
    | availability_zone   | nova                                 |
    | bootable            | false                                |
    | consistencygroup_id | None                                 |
    | created_at          | 2023-11-08T05:58:29.000000           |
    | description         | None                                 |
    | encrypted           | False                                |
    | id                  | 063025f5-172e-412f-9664-f111cc916ac0 |
    | migration_status    | None                                 |
    | multiattach         | False                                |
    | name                | test_volume                          |
    | properties          |                                      |
    | replication_status  | None                                 |
    | size                | 10                                   |
    | snapshot_id         | None                                 |
    | source_volid        | None                                 |
    | status              | creating                             |
    | type                | __DEFAULT__                          |
    | updated_at          | None                                 |
    | user_id             | c54744d39bf94c9085026b2caaf26bfd     |
    +---------------------+--------------------------------------+
  2. 列出卷的信息、查看卷的详细信息。

    [root@controller ~]# openstack volume list          # 1.查看当前的卷信息
    +--------------------------------------+---------+-----------------+------+-------------+
    | ID                                   | Name    | Status          | Size | Attached to |
    +--------------------------------------+---------+-----------------+------+-------------+
    | 25d8550f-5c82-4355-b4cd-3eeef2a4cdf2 | test_volume | available       |    8 |             |
    +--------------------------------------+---------+-----------------+------+-------------+
    [root@controller ~]# openstack volume show test_volume
    +--------------------------------+--------------------------------------+
    | Field                          | Value                                |
    +--------------------------------+--------------------------------------+
    | attachments                    | []                                   |
    | availability_zone              | nova                                 |
    | bootable                       | false                                |
    | consistencygroup_id            | None                                 |
    | created_at                     | 2022-05-01T16:22:34.000000           |
    | description                    | None                                 |
    | encrypted                      | False                                |
    | id                             | 25d8550f-5c82-4355-b4cd-3eeef2a4cdf2 |
    | migration_status               | None                                 |
    | multiattach                    | False                                |
    | name                           | test_volume                          |
    | os-vol-host-attr:host          | compute@lvm#LVM                      |
    | os-vol-mig-status-attr:migstat | None                                 |
    | os-vol-mig-status-attr:name_id | None                                 |
    | os-vol-tenant-attr:tenant_id   | c0cd683769ba4985bc58cc5d32aaebd9     |
    | properties                     |                                      |
    | replication_status             | None                                 |
    | size                           | 8                                    |
    | snapshot_id                    | None                                 |
    | source_volid                   | None                                 |
    | status                         | available                            |
    | type                           | __DEFAULT__                          |
    | updated_at                     | 2022-05-01T17:20:13.000000           |
    | user_id                        | c54744d39bf94c9085026b2caaf26bfd     |
    +--------------------------------+--------------------------------------+
  3. 命令行删除卷。

    [root@controller ~]# openstack volume delete test_volume
  4. 图形控制台界面创建卷:项目->计算->->创建卷。

    1699423327655.png

实例和卷之间的连接、分离

  1. 创建实例类型、网络、实例。

  2. 卷和实例的连接和分离。

    [root@controller ~]# openstack volume list
    +--------------------------------------+--------------+-----------+------+-------------+
    | ID                                   | Name         | Status    | Size | Attached to |
    +--------------------------------------+--------------+-----------+------+-------------+
    | e8e8b9e5-bb9b-46b1-b4e5-eceb43695853 | test_volume2 | available |   10 |             |
    +--------------------------------------+--------------+-----------+------+-------------+
    # 使用命令将实例test和卷test_volume2进行连接
    [root@controller ~]# openstack server add volume test test_volume2
    [root@controller ~]# openstack volume list
    +--------------------------------------+--------------+-----------+------+-------------------------------+
    | ID                                   | Name         | Status    | Size | Attached to                   |
    +--------------------------------------+--------------+-----------+------+-------------------------------+
    | 063025f5-172e-412f-9664-f111cc916ac0 | test_volume2  | in-use    |   10 | Attached to test on /dev/vdb  |
    +--------------------------------------+--------------+-----------+------+-------------------------------+

    进入实例的控制台查看实例中的块设备信息,包含10G的块设备/dev/vdb。

    1699425791258.png

    使用Horizon控制台连接和分离卷。

    1699427016306.png 1699427101926.png
  3. 上一步实现了在实例中能够查看到新增的块设备/dev/vdb,接下来对块设备进行分区、格式化、挂载才能向卷写入数据。

    • 在实例内确认新磁盘信息:

      $ lsblk
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda    253:0    0   20G  0 disk
      └─vda1 253:1    0   20G  0 part /
      vdb    253:16   0   10G  0 disk
    • 使用 fdisk 创建分区:

      # 1. 确认新磁盘
      $ lsblk /dev/vdb
      
      # 2. 交互式 fdisk(推荐手动确认)
      $ fdisk /dev/vdb
      # 在 fdisk 提示符下依次输入:
      #   n    (创建新分区)
      #   p    (主分区)
      #   1    (分区号)
      #   回车 (使用默认起始扇区)
      #   回车 (使用默认结束扇区,表示使用全盘)
      #   w    (写入分区表并退出)
    • 验证已创建分区

      $ lsblk /dev/vdb
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vdb    253:16   0   10G  0 disk
      └─vdb1 253:17   0   10G  0 part
    • 格式化为 ext4:

      mkfs.ext4 -F /dev/vdb1
  4. 创建挂载点并挂载:

    # 获取root权限
    $ sudo su
    $ mkdir -p /mnt/data
    $ mount /dev/vdb1 /mnt/data
    $ df -h /mnt/data
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb1        10G   20M   9.5G   1% /mnt/data
    # 在vdb1上创建文件,该文件保存在卷设备上。
    $ touch /mnt/data/testfile

    作业2:上传 df -h 输出截图。

  5. 对于卷的容量可以进行扩展但是不能减少,在进行扩展前需要将卷和实例进行分离。

    # 对实例和卷进行分离
    [root@controller ~]# openstack server remove volume test test_volume2

    使用命令行进行卷扩展的命令格式:

    openstack volume set --size <new_size> <volume_id>
    # 扩容的格式 openstack volume set --size <new_size> <volume_id>
    # 1.对卷进行扩容,扩容到11G
    [root@controller ~]# openstack volume set --size 11 test_volume2
    # 2.查看扩容后的卷容量
    [root@controller ~]# openstack volume show test_volume2 -c size -f value
    11

    -c size: 使用 -c 参数指定要显示的列。指定 size 列,对应卷的大小。
    -f value: 使用 -f 参数指定输出格式。这里指定 value,以便只输出 size 列的值而不带有其他额外的格式。
    作业3:查看扩容后的卷信息,截图上传。

从卷中启动实例

  1. 基于镜像创建卷。

    1764741952902.png
  2. 创建新的实例,在选择源时使用Volume并且选择上一步创建的卷test_volume

    1764742095847.png

    作业4:从卷启动实例后访问实例的控制台,截图上传。

    这一步是从卷设备中启动的实例,相比较从镜像启动,主要区别和注意点如下:

    • 区别与优点

      • 启动盘为可持久化的 Cinder 卷(volume),而不是实例本地的临时磁盘。实例删除后可选择保留或一并删除该卷。
      • 启动速度通常更快(避免每次从镜像下载根文件系统)。
      • 卷可以在创建后通过快照备份、克隆或扩容,便于运维和数据持久化。
      • 可以将同一卷在不同实例间 detach/attach(需确保文件系统/应用一致性)。
    • 使用命令行工具从镜像创建可启动卷,格式如下:

      openstack volume create --image <IMAGE_NAME_OR_ID> --size <SIZE_GB> --bootable <VOLUME_NAME>