从本节开始我们学习OpenStack 的 Block Storage Service ,Cinder。
 
理解 Block Storage
 
操作系统获得存储空间的方式一般有两种:
 
    1、通过某种协议(SAS、SCSI、SAN、iSCSI)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接施工裸硬盘存储数据(数据库)
 
    2、通过NFS、CIFS等协议,mount 远程的文件系统
 
第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume(卷)。
第二种叫做文件系统存储。NAS和NFS服务器,以及各种分布式文件系统提供的都是这种存储。
 
理解 Block Storage Service
 
Block Storage Service 提供对 volume 从创建到删除整个生命周期的管理。从 Instance 的角度看,挂载的每一个Volume 都是一块硬盘。OpenStack 提供 Block Storage Service 的是Cinder,其具体功能是:
 
    1、提供 REST API 使用户能够查询和管理 volume 、 volume snapshot 、以及 volume type。
    2、提供 Scheduler调度 volume 创建请求,合理优化存储资源的分配
    3、通过driver 架构支持多种 back-end(后端)存储方式,包括 LVM、NFS、Ceph和其他诸如 EMC、IBM等商业存储产品
 
Cinder架构
 
下面是Cinder 的逻辑架构图
 
 
Cinder 包含如下几个组件:
 
    cinder-api            
        接受API请求,调用 cinder-volume
 
    cinder-volume     
        管理volume的服务,与volume provider协调工作,管理volume的生命周期。运行cinder-volume服务的节点被称为存储节点
 
    cinder-scheduler 
        scheduler 通过调度算法选择最合适的存储节点创建volume
 
    volume provider  
        数据的存储设备,为volume 提供物理存储空间。cinder-volume支持多种volume provider,每种volume provider通过自己的driver 与cinder-volume协调工作
 
    Message Queue   
        Cinder各个子服务通过消息队列实现进程间的通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。
 
    Database Cinder
        有一些数据需要存放到数据库中,一般使用MySQL。数据是安装在控制节点上的,比如我们的实验环境中,可以访问名为 cinder 的数据库
 
物理部署方案
 
Cinder 的服务会部署在两类节点上,控制节点和存储节点。我们来看看控制节点 devstack-controller 上都运行了哪些 cinder-* 子服务
 
[root@DevStack-Rocky-Controller-31 stack]# ps -ef | grep cinder
stack    18066     1  0 16:13 ?        00:00:00 cinder-apiuWSGI master
stack    18067 18066  0 16:13 ?        00:00:19 cinder-apiuWSGI worker 1
stack    18068 18066  0 16:13 ?        00:00:19 cinder-apiuWSGI worker 2
stack    18817     1  0 16:13 ?        00:00:23 /usr/bin/python /usr/bin/cinder-scheduler --config-file /etc/cinder/cinder.conf
stack    19557     1  1 16:13 ?        00:01:54 /usr/bin/python /usr/bin/cinder-volume --config-file /etc/cinder/cinder.conf
stack    19824 19557  2 16:13 ?        00:04:04 /usr/bin/python /usr/bin/cinder-volume --config-file /etc/cinder/cinder.conf
 
cinder-api 和 cinder-scheduler 部署在控制节点上,这个很合理,至于cinder-volume 也在控制节点上,不是应该部署在计算节点上吗》
 
这里首先要搞清楚一个事实:OpenStack 是分布式系统,其每个子服务都可以部署在任何地方,只要网络能够连通。无论是哪个节点,只要上面运行了cinder-volume ,它就是一个存储节点,当然,该节点上也可以运行OpenStack的其他服务。
 
cinder-volume 是一顶存储节点帽子,cinder-api是一顶控制节点帽子。在我们的环境中,devstack-controller 同时戴上了两顶帽子,所以他既是控制节点又是存储节点。当然,我们也可以用一个专门的节点来运行cinder-volume。
 
这再一次展示了OpenStack 分布式架构部署上的灵活性:可以将所有服务都放在一台物理机上,用做一个 All-in-One的测试环境;而在生产环境中可以将服务部署在多台物理机上,获得更好的性能和高可用。
 
RabbitMQ 和 MySQL通常放在控制节点上。另外也可以用cinder service list 查看 cinder 子服务都分布在哪些节点上
 
[root@DevStack-Rocky-Controller-31 stack]# su - stack
Last login: Tue Jun 11 15:52:05 CST 2019 on pts/0
[stack@DevStack-Rocky-Controller-31 ~]$ source devstack/openrc admin admin
WARNING: setting legacy OS_TENANT_NAME to support cli tools.
[stack@DevStack-Rocky-Controller-31 ~]$ cinder service-list
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
| Binary           | Host                                     | Zone | Status  | State | Updated_at                 | Disabled Reason |
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler | DevStack-Rocky-Controller-31             | nova | enabled | up    | 2019-06-11T11:26:43.000000 | -               |
| cinder-volume    | DevStack-Rocky-Compute-32@lvmdriver-1    | nova | enabled | up    | 2019-06-11T11:26:46.000000 | -               |
| cinder-volume    | DevStack-Rocky-Controller-31@lvmdriver-1 | nova | enabled | up    | 2019-06-11T11:26:40.000000 | -               |
+------------------+------------------------------------------+------+---------+-------+----------------------------+-----------------+
 
还有一个问题,volume-provider 放在哪里?
 
一般来讲,volume provider 是独立的。cinder-volume 使用 driver 与 volume provider 通信并协调工作。所以只需要将driver 与 cinder-volume 放到一起就可以了。在cinder-volume 的源代码目录下有很多 driver,支持不同的 volum provider。
 
[stack@DevStack-Rocky-Controller-31 ~]$ ls /opt/stack/cinder/cinder/volume/drivers/
coprhd            ibm           nfs.py        synology
datacore          infinidat.py  nimble.py     tintri.py
datera            __init__.py   prophetstor   veritas
dell_emc          __init__.pyc  pure.py       veritas_access
disco             inspur        qnap.py       veritas_cnfs.py
dothill           kaminario     quobyte.py    vmware
drbdmanagedrv.py  lenovo        rbd.py        vzstorage.py
fujitsu           lvm.py        remotefs.py   windows
fusionstorage     lvm.pyc       san           zadara.py
hgst.py           nec           sheepdog.py   zfssa
hpe               netapp        solidfire.py
huawei            nexenta       storpool.py
 
后面我们会以 LVM 和 NFS这两种 volume provider 为例讨论 cinder-volume 的使用,其他 volume provider 可以查看 OpenStack 的configuration 文档。
 

O045、理解 Cinder 架构的更多相关文章

  1. 理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)

    从本节开始我们学习 OpenStack 的 Block Storage Service,Cinder 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,S ...

  2. Cinder 架构分析、高可用部署与核心功能解析

    目录 文章目录 目录 Cinder Cinder 的软件架构 cinder-api cinder-scheduler cinder-volume Driver 框架 Plugin 框架 cinder- ...

  3. 理解RESTful架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  4. [转]理解RESTful架构

    原文地址:http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件" ...

  5. 理解RESTful架构(转载)

    本文转载自:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软 ...

  6. [转载] 理解RESTful架构

    原文: http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架构   作者: 阮一峰 日期: 2011年9月12日 越来越多的人开 ...

  7. fw:理解RESTful架构

    理解RESTful架构   作者: 阮一峰 日期: 2011年9月12日 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立 ...

  8. 理解RESTful架构(转)

    理解RESTful架构   作者: 阮一峰 http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这 ...

  9. 【转】理解RESTful架构

    [转]理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时( ...

随机推荐

  1. sql_monitor实时监控

    1 检查数据库是否启用了监控功能 1)检查参数:CONTROL_MANAGEMENT_PACK_ACCES SQL> show parameter CONTROL_MANAGEMENT_PACK ...

  2. Bootstrap4项目开发实战视频教程

    一.企业网站项目 课件 0.课程简介 1.顶部区域的制作 2.导航区域的制作 3.轮播区域的制作 4.产品区域的制作 5.最新资讯区域的制作 6.底部区域的制作 二.化妆品网站项目 1.项目初始化_导 ...

  3. 数据库 | Redis 缓存雪崩解决方案

    Redis 雪崩 缓存层承载着大量的请求,有效保护了存储层.但是如果由于缓存大量失效或者缓存整体不能提供服务,导致大量的请求到达存储层,会使存储层负载增加,这就是缓存雪崩的场景. 解决缓存雪崩,可以从 ...

  4. @Transactional(事务讲解)和springboot 整合事务

    概述 事务在编程中分为两种:声明式事务处理和编程式事务处理 编程式事务处理:编码方式实现事务管理,常与模版类TransactionTemplate(推荐使用) 在业务代码中实现事务. 可知编程式事务每 ...

  5. [go]包管理

    vendor方式 //包管理发展 go get(无版本概念) -> vendor(godep)(无版本概念) -> go modules go get github.com/tools/g ...

  6. RabbitMQ学习之:(二)介绍 (转贴+我的评论)

    转自:http://lostechies.com/derekgreer/2012/03/05/rabbitmq-for-windows-introduction/ RabbitMQ for Windo ...

  7. Jedis的Publish/Subscribe功能的使用

    redis内置了发布/订阅功能,可以作为消息机制使用.所以这里主要使用Jedis的Publish/Subscribe功能. 1.使用Spring来配置Jedis连接池 <!-- pool配置 - ...

  8. javaweb期末项目-项目结构

    相关链接: 项目结构:https://www.cnblogs.com/formyfish/p/10828672.html 需求分析:https://www.cnblogs.com/formyfish/ ...

  9. 不同种类的PI膜及其特性

    一.PI膜种类及其特性 1.聚酰亚胺材料分类 聚酰亚胺材料可分为热塑性聚酰亚胺和热固性聚酰亚胺(包括双马来酰亚胺型和单体反应聚合型聚酰亚胺及各自改性产品)两大类 其中,热塑性聚酰亚胺材料一般采用两步法 ...

  10. 大于2T的硬盘怎么分区

    使用parted工具: #yum install parted #parted /dev/sdb    //选择要分的硬盘 GNUParted 2.3Using /dev/sdbWelcome to ...