OpenStack Cinder 块存储服务概念
Cinder 是 OpenStack 平台中的块存储服务组件,为虚拟机提供持久化块级存储设备,数据不随虚拟机生命周期结束而丢失🚀。其最初源自 Nova 项目中的 nova-volume,在 Folsom 版本中独立为 Cinder 项目。
核心设计理念:通过软件定义存储(SDS) 方式将存储资源抽象为可动态调度的逻辑卷,实现存储容量与计算资源的解耦。
一、核心架构
Cinder 采用微服务架构,由以下核心组件构成🏗️:
| 组件 |
功能说明 |
| cinder-api |
前端 RESTful API 入口,接收请求、验证权限并转换为内部 RPC 调用 |
| cinder-scheduler |
调度器,基于 Filter Scheduler 算法选择最优存储节点 |
| cinder-volume |
卷管理服务,在选定后端上执行实际的卷创建/删除/快照/克隆等操作 |
| cinder-backup |
备份服务,提供存储卷的跨区域备份与恢复能力 |
| Message Queue |
各组件间通过 RabbitMQ 实现异步 RPC 通信 |
| Database |
存储卷的元数据与状态信息 |
典型工作流
1 2
| 用户请求 ➔ cinder-api(接收+鉴权) ➔ 消息队列 ➔ cinder-scheduler(选节点) ➔ 消息队列 ➔ cinder-volume(执行操作) ➔ 返回结果
|
二、核心功能
1. 卷生命周期管理
提供完整的卷操作支持📦:
- 创建卷:从空白或指定镜像创建
- 删除卷:释放存储资源
- 扩展卷:在线扩容
- 挂载/卸载:将卷挂载到指定虚拟机
- 类型转换(retype):在存储类型间迁移(如 HDD → SSD)
1 2 3 4 5
| cinder create --display-name myvolume 10 cinder list cinder show myvolume cinder extend myvolume 20 cinder delete myvolume
|
2. 快照与克隆📸
基于写时复制(CoW)机制,秒级完成:
- 创建快照:对指定卷创建时间点副本
- 从快照创建卷:实现快速克隆
- 一致性组快照:保证多个卷的写一致性
1 2 3
| cinder snapshot-create --display-name mysnapshot myvolume cinder create --snapshot-id SNAPSHOT_ID 10 cinder snapshot-delete mysnapshot
|
3. 多后端存储支持
同一部署中支持启用多个存储后端,通过 Volume Type 和 volume_backend_name 指定卷创建位置💾:
| 后端类型 |
典型驱动 |
| 本地存储 |
LVM(通过 iSCSI 协议输出) |
| SAN/NAS 存储 |
iSCSI / FC Driver(EMC、NetApp 等) |
| 分布式存储 |
Ceph RBD、GlusterFS |
| 文件存储 |
NFS Driver |
4. QoS 策略⚡
通过 QoS 规格限制卷的最大 IOPS 与吞吐量,实现多租户资源隔离:
1 2
| cinder qos-create high-iops consumer="front-end" read_iops_max=10000 write_iops_max=5000 cinder qos-associate QOS_ID VOLUME_TYPE_ID
|
5. 备份与灾备🛡️
- cinder-backup 服务支持跨区域备份
- 结合 Ceph 等后端可实现 RPO≈0 的容灾方案
- 三级数据保护:本地快照 ➔ 远程复制 ➔ 存储双活
1 2 3
| cinder backup-create --display-name mybackup myvolume cinder backup-list cinder backup-restore BACKUP_ID
|
6. 卷迁移
跨主机迁移卷,支持在线迁移与离线迁移:
1 2
| cinder migrate VOLUME_ID HOST_NAME cinder migration-list
|
三、配置与管理
1. 创建卷类型
1 2
| cinder type-create ssd cinder type-key ssd set volume_backend_name=SSD_BACKEND
|
2. 挂载卷到虚拟机
1 2 3 4 5
| nova volume-attach SERVER_ID VOLUME_ID
nova volume-detach SERVER_ID VOLUME_ID
|
3. 从镜像创建卷
1
| cinder create --image-id IMAGE_ID --display-name bootable-volume 20
|
4. 从卷创建镜像
1
| cinder upload-to-image --force True VOLUME_ID IMAGE_NAME
|
5. 配额管理
1 2
| cinder quota-show PROJECT_ID cinder quota-update --volumes 50 --gigabytes 500 PROJECT_ID
|
四、架构设计要点🔧
- 控制-数据分离:控制平面(API/Scheduler)与数据平面(Volume)分离,支持横向扩展
- 驱动抽象层:通过
VolumeDriver 接口标准化后端适配,厂商只需实现 create_volume、delete_volume、create_snapshot 等关键方法
- Filter Scheduler 算法:先过滤(排除不满足条件的节点),再加权计算(基于容量、IOPS 排序),最终选择最优节点
- 高可用设计:cinder-api 和 cinder-scheduler 可多节点部署,结合 Pacemaker 实现故障切换
五、生产环境建议⚠️
- 默认 LVM iSCSI 驱动存在性能瓶颈,仅建议用于评估和概念验证环境
- 生产环境建议使用 Ceph RBD 等企业级分布式存储后端
- 控制节点建议三节点集群 + 存储节点双活架构
六、常见问题排查
| 问题 |
排查方法 |
| 卷无法挂载 |
cinder show VOLUME_ID 查看状态;检查 nova-compute 与 cinder-volume 网络连通性 |
| 卷创建超时 |
cinder list --all-tenants;查看 cinder-volume 日志 /var/log/cinder/volume.log |
| 快照失败 |
检查后端存储剩余空间;确认 CoW 功能是否正常 |
| 性能瓶颈 |
cinder qos-list 检查 QoS 限制;监控 iSCSI 链路延迟 |