OpenStack存储管理-Cinder
作业与实验环境
超星网址
快照管理:控制节点和计算节点选择均是默认的项目12
LVM相关概念
LVM架构
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)
逻辑卷是在卷组上创建的逻辑存储卷,它们提供了一种更灵活和可管理的方法来管理存储空间。逻辑卷可以具有自己的文件系统,并可以被格式化、挂载和管理,就像物理磁盘一样。逻辑卷可以根据需求进行动态调整大小,因此可以更方便地管理存储空间。
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逻辑卷扩展
查看计算节点的物理卷和卷组的信息。
[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查看逻辑卷信息。
[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增加虚拟机硬盘。
这一步在计算节点关机状态下添加硬盘。
添加硬盘后启动系统,
lsblk命令查看新添加的硬盘/dev/sdc。设置LVM过滤。
# 1.修改lvm.conf第130行不过滤/dev/sdc [root@compute ~]# vi /etc/lvm/lvm.conf将原文:
filter = [ "a/sdb/","r/.*/" ]修改为:
filter = [ "a/sdb/","a/sdc/","r/.*/" ]为
/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.将物理卷添加到原有的卷组中。
[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向用户提供基于数据块的存储设备访问服务,以卷的形式提供给虚拟机实例挂载,为实例提供额外的存储空间。用户可以自主创建、管理和分配块存储卷,并将这些卷连接到虚拟机实例,以供其使用。
卷的基本操作
创建卷。
# 创建大小为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 | +---------------------+--------------------------------------+列出卷的信息、查看卷的详细信息。
[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 | +--------------------------------+--------------------------------------+命令行删除卷。
[root@controller ~]# openstack volume delete test_volume图形控制台界面创建卷:
项目->计算->卷->卷创建卷。
实例和卷之间的连接、分离
创建实例类型、网络、实例。
卷和实例的连接和分离。
[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。
使用Horizon控制台连接和分离卷。
上一步实现了在实例中能够查看到新增的块设备/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
创建挂载点并挂载:
# 获取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输出截图。对于卷的容量可以进行扩展但是不能减少,在进行扩展前需要将卷和实例进行分离。
# 对实例和卷进行分离 [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:查看扩容后的卷信息,截图上传。
从卷中启动实例
基于镜像创建卷。
创建新的实例,在选择源时使用Volume并且选择上一步创建的卷
test_volume。
作业4:从卷启动实例后访问实例的控制台,截图上传。
这一步是从卷设备中启动的实例,相比较从镜像启动,主要区别和注意点如下:
区别与优点
- 启动盘为可持久化的 Cinder 卷(volume),而不是实例本地的临时磁盘。实例删除后可选择保留或一并删除该卷。
- 启动速度通常更快(避免每次从镜像下载根文件系统)。
- 卷可以在创建后通过快照备份、克隆或扩容,便于运维和数据持久化。
- 可以将同一卷在不同实例间 detach/attach(需确保文件系统/应用一致性)。
使用命令行工具从镜像创建可启动卷,格式如下:
openstack volume create --image <IMAGE_NAME_OR_ID> --size <SIZE_GB> --bootable <VOLUME_NAME>