Cinder 块存储服务
功能
-
提供REST API 使用户能够查询和管理 volume、volume snapshot 和 volume type
-
提供 scheduler 调度 volume 创建请求
-
通过 driver 架构支持多种后端存储方式,包括 LVM、NFS。
架构
image-
cinder-api
接收 API 请求,调用 cinder 子服务处理请求
-
cinder-scheduler
选择合适存储节点创建 volume
-
cinder-volume
管理 volume 的服务,与 provider 协作管理 volume的生命周期。运行 cinder-volume 的节点叫存储节点
-
volume provider
数据的存储设备,为 volume 提供物理存储空间
cinder-volume 支持多种 provider
-
Message Queue
各个子服务通过消息队列协作
-
database
存放Cinder的必要数据,一般是MySQL。和nova一样,数据库全部安装在控制节点上。
物理部署方案
OpenStack是个分布式系统,理论上所有服务部署在任何地方,只要网络能够互相联通。
cinder-api是控制节点帽子,cinder-volume是存储节点帽子。可以在同一台机器上安装两个服务,让这台机器既是控制节点,也是存储节点。RabbitMQ 和 MySQL 通常部署在控制节点上。
cinder-provider放在哪里?
一般,volume-provider 是独立的。cinder-volume 使用 driver与 volume-provider 通信并协调工作。所以只需要把driver 和 cinder-volume 放在一起。
子服务流程图
image设计思想
Cinder 沿用 Nova相同的设计思想。
API 前端服务; Scheduler调度服务;Worker 工作服务; Driver 框架
Cinder 组件
-
cinder-api
-
cinder-scheduler
-
cinder-volume
cinder-volume本身不存储物理块,它通过 driver 与 volume-provider 通信,共同负责卷的生命周期管理
volume操作
Attach
存储节点上本地的逻辑卷通过 attach 操作挂载到计算节点上的 instance。
而计算节点和存储节点通常位于不同物理机,采用iSCSI协议在主机间传输卷块。
image其中,
-
target: 提供 iSCSI 资源的设备,iSCSI 服务器
-
initiator:使用 iSCSI 资源的设备,iSCSI 客户端
Detach
接触 volume 和 instance 的关联
Extend
扩大 volume 的容量,状态为 available 才能被 extend。正在被 attach 的volume要先 detach。
imageextend 操作不需要 scheduler 的介入,因为要被拓展的 volume 肯定已经被挂载在某个 instance 上了。
Delete
状态为 available 的 volume 才能被 delete。
cinder-volume 执行的是“安全”删除:将 volume 数据抹掉后才删除。LVM 使用dd
操作将 LV 的数据清零。
Snapshot
Snapshot 可以为 volume 创建快照,快照保存了 volume 当前的状态,以后可以通过快照恢复。
如果一个 volume 存在快照,则这个 volume 不能被删除。
Backup
将 volume 备份到别的地方(备份设备),将来通过restore
操作恢复。
Backup 和 Snapshot 的区别:
-
Snapshot 依赖于源,不能独立存在; Backup 不依赖源 volume,即使源 volume 不存在也可以进行 restore。
-
Snapshot 与源 volume 通常存放在一起;而 Backup 存放在独立的备份设备中,有自己的备份方案和实现。
-
Snapshot 提供快捷的回溯功能; Backup 具有容灾功能。
Restore
-
在存储节点上创建一个空白的 volume
-
将 backup 的数据 copy 到空白的 volume
image
Boot from Volume
Volume 除了当做 instance 的数据盘,也可以作为启动盘。