Cinder 组件详解 – 每天5分钟玩转 OpenStack(47)
cinder-api 是整个 Cinder 组件的门户,所有 cinder 的请求都首先由 nova-api 处理。cinder-api 向外界暴露若干 HTTP REST API 接口。在 keystone 中我们可以查询 cinder-api 的 endponits。
客户端可以将请求发送到 endponits 指定的地址,向 cinder-api 请求操作。 当然,作为最终用户的我们不会直接发送 Rest API 请求。OpenStack CLI,Dashboard 和其他需要跟 Cinder 交换的组件会使用这些 API。
cinder-api 对接收到的 HTTP API 请求会做如下处理:
检查客户端传人的参数是否合法有效 调用 cinder 其他子服务的处理客户端请求 将 cinder 其他子服务返回的结果序列号并返回给客户端cinder-api 接受哪些请求呢?简单的说,只要是 Volume 生命周期相关的操作,cinder-api 都可以响应。大部分操作都可以在 Dashboard 上看到。
打开 Volume 管理界面
点击下拉箭头,列表中就是 cinder-api 可执行的操作。
创建 Volume 时,cinder-scheduler 会基于容量、Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume。
这个部分比较多,我们下一次单独讨论。
cinder-volumecinder-volume 在存储节点上运行,OpenStack 对 Volume 的操作,最后都是交给 cinder-volume 来完成的。 cinder-volume 自身并不管理真正的存储设备,存储设备是由 volume provider 管理的。cinder-volume 与 volume provider 一起实现 volume 生命周期的管理。
通过 Driver 架构支持多种 Volume Provider接着的问题是:现在市面上有这么多块存储产品和方案(volume provider),cinder-volume 如何与它们配合呢?
这就是我们之前讨论过的 Driver 架构。 cinder-volume 为这些 volume provider 定义了统一的接口,volume provider 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中。下面是 Cinder Driver 的架构示意图:
我们可以在 /opt/stack/cinder/cinder/volume/drivers/ 目录下查看到 OpenStack 源代码中已经自带了很多 volume provider 的 Driver:
存储节点在配置文件 /etc/cinder/cinder.conf 中用 volume_driver 选项配置使用的driver:
这里 LVM 是我们使用的 volume provider。
定期向 OpenStack 报告计算节点的状态在前面 cinder-scheduler 会用到 CapacityFilter 和 CapacityWeigher,它们都是通过存储节点的空闲容量来做筛选。那这里有个问题:Cinder 是如何得知每个存储节点的空闲容量信息的呢?
答案就是:cinder-volume 会定期向 Cinder 报告。
从 cinder-volume 的日志 /opt/stack/logs/c-vol.log 可以发现每隔一段时间,cinder-volume 就会报告当前存储节点的资源使用情况。
因为在我们的实验环境中存储节点使用的是 LVM,所以在上面的日志看到存储节点通过“vgs”和”lvs”这两个命令获取 LVM 的容量使用信息。
实现 volume 生命周期管理Cinder 对 volume 的生命周期的管理最终都是通过 cinder-volume 完成的,包括 volume 的 create、extend、attach、snapshot、delete 等,后面我们会详细讨论。
下一节我们将详细讨论 cinder-scheduler 如何筛选 cinder-volume。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/54618.html
LVS相关文章
- 浅谈Oracle RAC(5)– CSS组件
- 三万字详解SpringClould高可用流量防护组件Sentinel哨兵(含源码例子)[通俗易懂]
- Vue父组件向子组件传值之props详解
- java Swing用户界面组件文本输入:文本域+密码域+格式化的输入域
- 微服务组件---- Spring Cloud Alibaba 链路追踪 skywalking 详解
- vue封装组件以及调用「建议收藏」
- Vue CLI 2 脚手架 TabBar 组件封装
- 适用于 .NET 的开源文本差异对比组件
- (四)处理组件进场和离场动画 <Transition />
- 腾讯出品小程序自动化测试框架【Minium】系列(六)常见组件的处理
- Webpack组件库打包超详细指南
- DJNativeSwing-SWT组件-Java GUI中内嵌浏览器相关JAR包详解程序员
- Android新架构组件WorkManager详解手机开发
- spark入门之一 spark组件详解大数据
- java 资源浏览器的图形化组件详解编程语言
- jQuery File Upload v9.14.1 发布,一个非常优秀的上传组件详解编程语言
- jQuery File Upload v9.14.0 发布,一个非常优秀的上传组件详解编程语言
- 验证码生成组件–JCaptcha的使用详解编程语言
- resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现详解编程语言
- 组件——-(一)redis系列–安装部署redis+实现redis分布式缓存 java+Spring+redis详解编程语言
- vue 保持组件状态防止重新渲染 缓存组件失效详解编程语言
- stark组件之pop操作【模仿Django的admin】详解编程语言
- stark组件之过滤操作【模仿Django的admin】详解编程语言
- stark组件之搜索【模仿Django的admin】详解编程语言
- MyBatis的核心组件:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和SQL Mapper
- Oracle H2驱动越来越强大的数据库连接组件(oracle h2驱动)
- 关于IISphp调用com组件的权限问题
- 深入Lumisoft.NET组件POP3邮件接收与删除操作的使用详解