Block Storage Service 提供对 volume 从创建到删除整个生命周期的管理。从 Instance 的角度看,挂载的每一个Volume 都是一块硬盘。OpenStack 提供 Block Storage Service 的是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 文档。
- 理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)
从本节开始我们学习 OpenStack 的 Block Storage Service,Cinder 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,S ...
- Cinder 架构分析、高可用部署与核心功能解析
目录 文章目录 目录 Cinder Cinder 的软件架构 cinder-api cinder-scheduler cinder-volume Driver 框架 Plugin 框架 cinder- ...
- 理解RESTful架构
越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...
- [转]理解RESTful架构
原文地址:http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件" ...
- 理解RESTful架构(转载)
本文转载自:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软 ...
- [转载] 理解RESTful架构
原文: http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架构 作者: 阮一峰 日期: 2011年9月12日 越来越多的人开 ...
- fw:理解RESTful架构
理解RESTful架构 作者: 阮一峰 日期: 2011年9月12日 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立 ...
- 理解RESTful架构(转)
理解RESTful架构 作者: 阮一峰 http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这 ...
- 【转】理解RESTful架构
[转]理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时( ...
随机推荐
- 在AndroidStudio中使用单元测试
1. 前言 在Android开发中,如果对一个简单的功能,每次修改代码都重新运行到设备中进行测试,会浪费大量时间,降低开发工作效率.如果使用单元测试,编写单元测试类,执行测试单元测试类就可以对 ...
- VC 实现程序只运行一个实例,并激活已运行的程序
转载:http://blog.sina.com.cn/s/blog_4b44e1c00100bh69.html 进程的互斥运行:CreateMutex函数实现只运行一个程序实例 正常情况下,一个进程的 ...
- 发布机制-灰度发布-例子:QZone
ylbtech-发布机制-灰度发布-例子:QZone QZone是另外一个采用灰度发布的例子.大家都知道,QZone在过去的一年中改进是巨大的,从以前慢悠悠的老爷爷变成了一个充满青春活力的小伙子.其中 ...
- MACBOOK 破解wifi密码
MACBOOK 破解wifi密码 Table of Contents 1. 安装homebrew 2. 安装aircrack-ng 3. 获取wifi网卡信息 4. 获取所有可识别的wifi信息 5. ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计
笔记 4.在线教育后台数据库设计 简介:讲解后端数据库设计 ,字段冗余的好处,及常见注意事项 1.数据库设计: er图: 实体对象:矩形 ...
- 视图push和presentViewController注意点
presentViewController: - (void)publishClick{ NSLog(@"发布按钮被点击"); PublishViewController *pub ...
- 关于注释【code templates】,如何导入本地注释文件
关于如何在eclipse.myeclipse导入本地注释文件 [xxx.xml] 请看操作方式 下面是code templates文件的内容 注意 把文件中的 @@@@@@@@@@@@@@@ ...
- CTF—攻防练习之Capture the Flag
主机:192.168.32.152 靶机:192.168.32.160 首先nmap扫描端口: ftp,ssh,http服务 dirb扫描目录,flag下有一个flag password目录下,查看源 ...
- APP安全_Android反编译
反编译 Android的反编译工具:apktool,JEB等. Apk 文件的结构,如下: META-INF:签名文件 res:资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 ...
- SpringCloud学习(一)服务的注册与发现Eureka(Finchley版本)
创建服务注册中心 在这里,我还是采用Eureka作为服务注册与发现的组件. 首先创建一个空项目 首先创建一个空项目,再创建一个maven项目,首先创建一个主Maven工程,在其pom文件引入依赖,sp ...