Create Volume 操作(Part I) – 每天5分钟玩转 OpenStack(50)
前面已经学习了 Cinder 的架构和相关组件,从本节我们开始详细分析 Cinder 的各种操作,首先讨论 Cinder 如何创建 volume。
Create 操作流程如下:
客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(cinder-api)发送请求:“帮我创建一个 volume”。 API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个 volume”。 Scheduler(cinder-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计存储点中选出节点 A。 Scheduler 向 Messaging 发送了一条消息:“让存储节点 A 创建这个 volume”。 存储节点 A 的 Volume(cinder-volume)从 Messaging 中获取到 Scheduler 发给它的消息,然后通过 driver 在 volume provider 上创建 volume。因为 Create Volume 操作比较复杂,我们将分三次讨论:
今天是第一部分,讨论 cinder-api 的处理过程;
第二部分讨论 cinder-scheduler;
第三部分讨论 cinder-volume 的操作。
客户(可以是 OpenStack最终用户,也可以是其他程序)向 cinder-api发送请求:“帮我创建一个 volume。
GUI 上操作的菜单为 Project - Compute - Volumes - Create Volume
设置 volume 的名称,volume type,大小,Availability Zone 等基本信息。
这里我们没有设置 Volume Source,这样会创建一个空白的 volume。
点击“Create Volume” 按钮,cinder-api 将接收到创建 volume 的请求。 查看 cinder-api 日志 /opt/stack/logs/c-api.log。
日志显示 cinder-api 接收到一个 POST 类型的 REST API,经过对 HTTP body 的分析,该请求是:创建一个 1GB 的 volume。
紧接着,cinder-api 启动了一个 Flow(工作流)volume_create_api。 Flow 的执行状态依次为 PENDING, RUNNING 和 SUCCESS。volume_create_api 当前的状态由 PENDING 变为 RUNNING。
volume_create_api 工作流包含若干 Task,每个 Task 完成特定的任务。 这些任务依次为 ExtractVolumeRequestTask, QuotaReserveTask, EntryCreateTask, QuotaCommitTask, VolumeCastTask。 Task 的执行状态也会经历 PENDING, RUNNING 和 SUCCESS 三个阶段。
Task 的名称基本上说明了任务的工作内容,前面几个 Task 主要是做一些创建 volume 的准备工作,比如:
ExtractVolumeRequestTask 获取 request 信息
QuotaReserveTask 预留配额
EntryCreateTask 在数据库中创建 volume 条目
QuotaCommitTask 确认配额
最后 VolumeCastTask 是向 cinder-sheduler 发送消息,开始调度工作
至此,Flow volume_create_api 已经完成,状态由 RUNNING 变为 SUCCESS,volume 创建成功。日志如下:
需要特别注意的是,“volume 创建成功”只是指 cinder-api 已经成功处理了 volume create 请求,将消息发给了 cinder-scheduler,但并不意味 volume 在存储节点上已经成功创建,这一点是容易引起误解的。我们可以通过 cinder-volume 创建 volume 日志的时间戳验证。
cinder-api 发送消息cinder-api 向 RabbitMQ 发送了一条消息:“让cinder-scheduler 创建一个 volume” 前面我们提到消息是由 VolumeCastTask 发出的,因为 VolumeCastTask 没有打印相关日志,我们只能通过源代码查看 /opt/stack/cinder/cinder/volume/flows/api/create_volume.py ,方法为 create_volume。
下一节我们讨论 Create Volume 的第二部分: cinder-scheduler 的处理过程。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/54176.html
相关文章
- 操作必须使用一个可更新的查询
- mongodb 数据库操作–备份 还原 导出 导入
- mongodb 数据库操作详解–创建,切换,删除
- linux 线程操作问题undefined reference to ‘pthread_create’的解决办法(cmake)详解程序员
- iOS开发系列课程(08) — 事件处理详解和手势操作手机开发
- iOS——手势操作(nib文件、纯代码)详解手机开发
- Hadoop入门进阶课程4–HDFS原理及操作详解大数据
- Hadoop入门进阶课程11–Sqoop介绍、安装与操作详解大数据
- Go基础之–操作Mysql(二)详解编程语言
- go语言之行–文件操作、命令行参数、序列化与反序列化详解编程语言
- FunDA(13)- 示范:用户自定义操作函数 – user defined tasks详解编程语言
- Backup Volume 操作 – 每天5分钟玩转 OpenStack(59)
- Snapshot Volume 操作 – 每天5分钟玩转 OpenStack(58)
- Delete Volume 操作 – 每天5分钟玩转 OpenStack(57)
- Extend Volume 操作 – 每天5分钟玩转 OpenStack(56)
- Live Migrate 操作 – 每天5分钟玩转 OpenStack(42)
- Nova Suspend/Rescue 操作详解 – 每天5分钟玩转 OpenStack(35)
- Nova reboot 和 lock 操作 – 每天5分钟玩转 OpenStack(32)
- Start Instance 操作详解 – 每天5分钟玩转 OpenStack(31)