OpenStack学习笔记(四)Cinder组件

Cinder主要架构

与nova类似,cinder也采用的是松散的架构理念,由cinder-api统一管理外部对cinder的调用,cinder-scheduler负责调度合适的节点去构建volume存储。volume-provider通过driver负责具体的存储空间,然后cinder内部依旧通过消息队列queue沟通,解耦各子服务支持异步调用。

 

 

cinder-sheduler筛选机制

cinder-sheduler通过filter进行删选,允许使用第三方的filter,自定义筛选内容。

 

下面我们从创建一个卷的流程来分析cinder的各个组件

 

cinder-api

 

scheduler

通过名为volume_create_scheduler的Flow执行调度。

 

cinder-volume

当cinder-volume接收到消息,才真正开始实际创建volume,cinder-volume通过driver来创建volume,方式类同于cinder-scheduler,也是通过Flow(名称为 volume_create_manager)的方式

 

了解一下LVM 和Ceph

此外,cinder通过 driver 架构,可以支持多种 back-end(后端)存储方式,包括 LVM,NFS,Ceph 和其他诸如 EMC、IBM 等商业存储产品和方案。

我们来了解一下LVM 和Ceph是做什么的。

LVM是Linux环境下对磁盘分区进行管理的一种机制,其实际是建立在硬盘和分区之上的一个逻辑层,形成一个存储池。用来提高磁盘分区管理的灵活性。PV是指物理卷(操作系统识别到的物理硬盘),VG是指卷组(也就是物理卷进行逻辑整合后形成的逻辑上连成一片的逻辑硬盘),LV是指逻辑卷(将整块的VG根据功能或者其他因素和划分为不同的分区,每个分区为一个LV)

举个栗子:PV比作地球的一个板块,VG则是一个地球(将各个物理卷(板块)在逻辑上连接起来成为地球),在地球上划分一个区域并标记为亚洲,则亚洲就相当于一个LV(也可以按照其他规则划分,比如国家,那中国就是一个LV)

Ceph是另一种分布式文件系统,作用同样主要是管理磁盘,将硬件磁盘在逻辑上整合起来,然后提供给外部使用。当外部需要存储一个文件时,其实这个文件是打散分割成小块随机存储到不同的物理硬盘中的。所以做容灾备份时也是各部分做各部分的镜像。

 

挂载volume

创建完成之后,通过attach操作将此volume挂载到虚拟机上,这样虚拟机就成功获得该volume作为虚拟硬盘使用

 

卸载volume

detach volume相当于断开挂载状态,再删除volume这样一个逆向的过程。我们分析挂载的本质,其实是通过volume连接,让控制节点上的Iscsi initiator将计算节点上的Iscsi Target的volume识别为一个硬盘,再通过XML文件建立映射使得虚机能够使用这个volume。

所以卸载volume就是1.去掉映射  2.处理缓存中的数据  3.删除对应的SCSI设备 4.断开Iscsi Target连接 5.删除该Iscsi Target

 

cinder扩容

非挂载状态的volume是可以通过extend进行扩容的(如果已经挂载上的volume可以先卸载再扩容),cinder 是不允许缩小 volume

cinder-api接收到扩容请求,通过消息队列转发给cinder-volume,cinder-volume执行 lvextend 命令进行扩容(扩多少是不是由cinder-pai带过来的参数决定?还是不用带参数通过别的方式实现,周一来试试)

 

删除 volume

delete volume同样不能删除已经挂载的volume,需要先detach到Available 状态才能执行delete volume,cinder-volume 通过执行 lvremove 命令删除volume(先清除逻辑卷LV上面的数据,再删除该LV)

 

Snapshot Volume 操作

volume快照可以在对正在挂载状态的volume进行操作,但是有可能会数据不一致。如果需要保持数据一致,可以先detach停掉磁盘IO操作,使该volume处于Available 状态

cinder-volume 通过执行 lvcreate 创建 snapshot,volume的快照本身也是一个逻辑卷,具有逻辑卷的所有特性。但是volume的快照根据其采取的volume-provider不同,有不同方式的快照。这些快照对源volume的依赖程度是完全不同的

基于LVM的磁盘管理的是完全copy当前volume到一个新的LV,对源volume基本无依赖。但是对于基于Ceph这一类的分布式文件系统的volume快照,则仅仅是对于当前volume的数据状态建立一个指针,对源voluume的依赖极高。所以snapshot volume基本用来做快速回溯而不是容灾备份(问题:第二种方式的volume快照要是源volume损坏了怎么办?答:一般会备份多个快照,极大降低了源快照损坏的问题)

 

backup volume操作

backup volume解决了snapshot volume对源volume的依赖问题,主要用来恢复volume,而snapshot volume更多的是用来快速回溯(针对源volume没有损坏但是需要回退某些操作的需求)

 

//backup支持增量备份,只需要指定incremental 选项即可

 

restore操作

根据backup备份进行restore恢复,创建一个空的volume,然后装载NFS读取container 目录中backup备份的meatdata,将快照数据解压写入新建的这个volume中,最后恢复meatdata,restore完成。

 

Boot from Volume操作

之前我们考虑的都是怎么将volume安全的作为存储盘,事实上volume同样可以作为启动盘。之前在上一篇nova Launch学习中,所用到的是,直接从 image launch(Boot from image直接获取image ),或者从 instance 的 snapshot launch(Boot from snapshot通过快照获取image)两种方式。

其实创建节点还可以通过Boot 以volume作为启动盘进行创建。Boot 提供三种方式:

1.Boot from volume (从现有的bootable获取image直接进行Launch操作)


2.Boot from image (创建一个新的 volume,将公用 image 的数据 copy 到 volume,然后从该 volume launch)


3.Boot from volume snapshot (通过指定的 volume snapshot 创建 volume,然后从该 volume launch,前提是该snapshot 对应的源 volume 是 bootable 的)
 

boot的操作流程是(以第一种Boot from volume举例),选择镜像文件作为image,填写即将创建的虚机名称,执行Launch操作,更新volume 列表,执行attach挂载操作。Boot完成

问答:boot from volume 的 instance 也可以执行 live miagrate,请大家思考一下 volume 是如何 migrate 到目标节点的?

答:将作为启动盘的volume detach 然后重新挂载到新节点上(待校验)×

//周一去做实操,查看日志校验

 

理解 cinder-volume 如何支持多 backend

主要是driver机制,cinder-volume与实际提供存储的volume-provider可以不在同一个节点上,因为cinder-volume可以通过driver对volume-provider进行管理,在不在同一个节点上都没关系,所以同样控制节点读写数据的时候不用经过存储节点,只要调driver就可以了。

 

小结一下

cinder主要是为 instance 提供虚拟磁盘

snapshot volume和backup机制提供快速回溯以及容灾备份保障安全

cinder-api 和cinder-scheduler还是老样子,cinder-api 作为暴露给外部的接口处理各种调用请求,cinder-scheduler筛选合适的节点,cinder-volume进行volume创建,delete volume负责卷的销毁,extend对于存储不够的节点进行扩容,attach将volume挂载到虚拟机上,detach将volume从虚拟机上卸载下来。

以上都是cinder作为提供存储盘的基础功能,除此之外,cinder还可以将volume作为启动盘,进行Launch操作。这样新建虚机就不仅限于使用Glance的通用image和已有的snapshot,可以通过卷引导的方式,选用存储池里自定义的其他镜像。

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值