Openstack Cinder

Cinder是在虚拟机和具体存储设备之间引入了一层“逻辑存储卷”的抽象,Cinder本身并不是一种存储技术,只是提供一个中间的抽象层,Cinder通过调用不同存储后端类型的驱动接口来管理相对应的后端存储,为用户提供统一的卷相关操作的存储接口。

https://www.cnblogs.com/luohaixian/p/8134967.html

Cinder 的架构

https://www.cnblogs.com/CloudMan6/p/5573159.html

Block Storage

Block Storage Service

OpenStack 提供 Block Storage Service 的是 Cinder

cinder 的逻辑架构图 :

 

Cinder 包含如下几个组件:

  1. cinder-api
  2. cinder-volume
  3. cinder-scheduler
  4. volume provider
  5. Message Queue
  6. Database

 

服务描述
cinder-api进入Cinder的HTTP接口。
cinder-backup用于提供存储卷的备份功能,支持将块存储卷备份到OpenStack备份存储后端,比如Swift、Ceph等。
cinder-manage用于cinder管理的命令行接口。
cinder-rtstool伴随LIO(Linux-IO Target)支持而增加的工具。
cinder-scheduler根据预定的策略选择合适的cinder-volume节点来处理用户的请求。
cinder-volume通过相关驱动程序架构直接与块存储服务进行交互。
cinder-volume-usage-audit用于卷使用情况统计。

cinder-api

接收 API 请求,调用 cinder-volume 执行操作

cinder-api的作用主要是为用户提供Restful风格的接口,接收client的请求,在该服务中可以对用户的权限和传入的参数进行提前的检查,无误后方才将请求信息交给消息队列,由后续的其它服务根据消息队列信息进行处理

https://developer.openstack.org/api-ref/block-storage/v3/index.html#volumes-volumes

cinder-volume

管理 volume 的服务,与 volume provider 协调工作,管理 volume 的生命周期。

运行 cinder-volume 服务的节点被称作为存储节点。

cinder-volume是部署在存储节点上的服务,cinder-volume的主要功能是对后端存储进行一层抽象封装,为用户提供统一的接口,cinder-volume通过调用后端存储驱动API来进行存储相关的操作。

cinder-volume服务执行的功能可以由如下表列出:

卷操作

创建卷

克隆卷

扩展卷

删除卷

卷虚机从操作

挂载卷到虚拟机

从虚拟机里分离出卷

卷-快照操作

创建卷的快照

从已有卷快照创建卷

删除快照

卷-镜像操作

从镜像创建卷

从卷创建镜像

cinder-scheduler
scheduler 通过调度算法选择最合适的存储节点创建 volume。

该服务中包含过滤器算法和权重计算算法,Cinder默认的过滤算法有三个:

(1)AvailabilityZoneFilter过滤算法:判断cinder host的availability zone是否与目标zone一致,否则过滤掉该节点;

(2)CapacityFilter过滤算法:判断host的可用存储空间是否不小于要分配卷的大小,否则过滤掉该节点;

(3)CapabilitiesFilter过滤算法:检查host的属性否和volume type中的extra specs相同,不相同则过滤掉该节点。

通过指定的过滤算法可能会得到一系列的host,这时还需使用权重计算算法来计算各节点的权重值,权重值最大的会认为是最优节点,cinder-scheduler会基于消息队列服务的rpc调用来让最优节点对请求进行处理,以下列出几个计算权重的算法:

(1)AllocatedCapacityWeigher算法:存储空间使用最小的节点为最优节点;

(2)CapacityWeigher算法:可用存储空间最大的节点成为最优节点;

(3)ChanceWeigher算法:随机选择一个节点作为最优节点。

volume provider
数据的存储设备,为 volume 提供物理存储空间。 cinder-volume 支持多种 volume provider,每种 volume provider 通过自己的 driver 与cinder-volume 协调工作。

Message Queue
Cinder 各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。

Database Cinder 有一些数据需要存放到数据库中,一般使用 MySQL。数据库是安装在控制节点上的,比如在我们的实验环境中,可以访问名称为“cinder”的数据库。

Cinder 个组件如何协同工作及其设计思想

Volume 创建流程

cinder-api

客户端可以将请求发送到 endponits 指定的地址,向 cinder-api 请求操作。

cinder-api 接受哪些请求呢?简单的说,只要是 Volume 生命周期相关的操作,cinder-api 都可以响应。

cinder-scheduler

创建 Volume 时,cinder-scheduler 会基于容量、Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume。

cinder-volume

cinder-volume 在存储节点上运行,OpenStack 对 Volume 的操作,最后都是交给 cinder-volume 来完成的。 cinder-volume 自身并不管理真正的存储设备,存储设备是由 volume provider 管理的。cinder-volume 与 volume provider 一起实现 volume 生命周期的管理。通过 Driver 架构支持多种 Volume Provider,cinder-volume 为这些 volume provider 定义了统一的接口,volume provider 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中。

Cinder 命令

https://www.xuebuyuan.com/1638624.html

https://www.xuebuyuan.com/1638624.html

https://blog.csdn.net/qq806692341/article/details/52397440

cinder -h

cinder help xxx

 

 

Openstack 从 Folsom 开始使用 Cinder 替换原来的Nova-Volume服务,为 Openstack 云平台提供块存储服务。 Cinder架构                                                  /- ( LDAP )                              [ Auth Manager ] ---                                     |            \- ( DB )                                     |                                     |                    cinderclient     |                   /             \   | [ Web Dashboard ]-               -[ api ] --  -- [ scheduler ] -- [ volume ] -- ( iSCSI )                   \             /   |                    novaclient       |                                     |                                     |                                     |                                   Cinder服务 API service:负责接受和处理Rest请求,并将请求放入RabbitMQ队列。Cinder提供Volume API V2, 我没有找到格式很好的在线文档,大体可以参见Openstack block storage API V1 Scheduler service: 处理任务队列的任务,并根据预定策略选择合适的Volume Service节点来执行任务。目前版本的cinder仅仅提供了一个Simple Scheduler, 该调度器选择卷数量最少的一个活跃节点来创建卷。 Volume service: 该服务运行在存储节点上,管理存储空间。每个存储节点都有一个Volume Service,若干个这样的存储节点联合起来可以构成一个存储资源池。为了支持不同类型和型号的存储,当前版本的Cinder为Volume Service如下drivers。当然在Cinder的blueprints当中还有一些其它的drivers,以后的版本可能会添加进来。 本地存储:LVM, Sheepdog 网络存储: NFS, RBD (RADOS) IBM: XIV, Storwize V7000, SVC storage systems Netapp: NFS存储;ISCSI存储则需要OnCommand 5.0和Data ONTAP 7-mode storage systems with installed iSCSI licenses EMC: VNX, VMAX/VMAXe Solidfire: Solidfire cluster Cinder服务的部署 上述的Cinder服务都可以独立部署,cinder同时也提供了一些典型的部署命令: cinder-all: 用于部署all-in-one节点,即API, Scheduler, Volume服务部署在该节点上。 cinder-scheduler: 用于将scheduler服务部署在该节点上。 cinder-api: 用于将api服务部署在该节点上。 cinder-volume: 用于将volume服务部署在该节点上。 Cinder如何支持典型存储 从目前的实现来看,Cinder对本地存储和NAS的支持比较不错,可以提供完整的Cinder API V2支持,而对于其它类型的存储设备,Cinder的支持会或多或少的受到限制,下面是Rackspace对于Private Cloud存储给出的典型配置: 1. 本地存储 对于本地存储,cinder-volume可以使用lvm驱动,该驱动当前的实现需要在主机上事先用lvm命令创建一个cinder- volumes的vg, 当该主机接受到创建卷请求的时候,cinder-volume在该vg上创建一个LV, 并且用openiscsi将这个卷当作一个iscsi tgt给export. 当然还可以将若干主机的本地存储用sheepdog虚拟成一个共享存储,然后使用sheepdog驱动。 2. EMC 3. Netapp Cinder在IT环境中的主要问题 目前版本的Cinder在IT私有云场景中,从硬件兼容性,高性能,高可靠性,水平扩展能力,应用兼容性等维度来看,Cinder还存在不少问题需要解决。Cinder依然任重道远。 1. 对共享存储的支持有限 不支持FC SAN; 支持的存储设备有限,即使对于EMC, IBM这样的的主流存储厂商,也只能支持寥寥几款存储; 2. 对存储设备的使用不够高效 Cinder卷管理的基本原则是在共享存储上创建一个lun, 然后把这个lun作为一个block device给attach到一个虚拟机上。但是对于当前主流的存储,能够支持的最大lun数量非常有限,比如我们经常使用的Huawei S3900, 最多能支持288个lun,如果一个VM平均3个卷,不管这些VM是offline还是online, 这个存储最多只能支持90个VM。 3. 存储管理带来的性能损耗 比如Cinder Volume的LVM驱动使用iSCSI export一个逻辑卷,从管理的角度来看是解决了存储共享的问题,从而能够支持比如迁移这样的功能,但是这样的设计势必会导致较大的性能损耗,和直接访 问相比,通常iSCSI export会增加30%以上的IO延迟。 4. 数据如何迁移 企业IT环境中大量的数据,一般都是存放在SAN甚至是磁带设备上的,这些数据如何无损,安全的接入到Cloud呢?VMware因此提供了RDM, KVM和XEN也支持PVSCSI, 但是Cinder没有考虑这个。 5. Cinder的调度器不完善 Cinder提供的simple scheduler基本没有实用价值,  cinder-scheduler仅能在初始放置时保证系统负载均衡,但是如果是发生了运行时负载严重不平衡,cinder就没法处理了。 6. Cinder服务的可靠性问题 cinder-api和cinder-scheduler是系统的单点,cinder并没有提供这两个服务提供任何HA和load balance设计,所以整个系统可靠性还是扩展性会比较受限制。 cinder-db如果发生不可恢复的故障,能够保证用户数据能恢复吗? 介绍内容出处:http://blog.csdn.net/luo_brian/article/details/8592692 标签:OpenStack
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值