Attach Volume 操作(Part I) - 每天5分钟玩转 OpenStack(53)
2016-07-15 15:42
471 查看
上一节我们创建了 volume,本节讨论如何将 volume attach 到 Instance,今天是第一部分。
Volume 的最主要用途是作为虚拟硬盘提供给 instance 使用。Volume 是通过 Attach 操作挂载到 instance 上的。本节我们就来详细讨论 Cinder 是如何实现 Attach 的。
上一节我们成功创建了基于 LVM provider 的 volume。每个 volume 实际上是存储节点上 VG 中的一个 LV。
那么问题来了:存储节点上本地的 LV 如何挂载到计算节点的 instance 上呢?通常情况存储节点和计算节点是不同的物理节点。
解决方案是使用 iSCSI,如下图所示
iSCSI 是 Client-Server 架构,有 target 和 initiator 两个术语。
Target
提供 iSCSI 存储资源的设备,简单的说,就是 iSCSI 服务器。
Initiator
使用 iSCSI 存储资源的设备,也就是 iSCSI 客户端。
Initiator 需要与 target 建立 iSCSI 连接,执行 login 操作,然后就可以使用 target 上面的块存储设备了。
Target 提供的块存储设备支持多种实现方式,我们实验环境中使用的是 LV。
Cinder 的存储节点 cinder-volume 默认使用 tgt 软件来管理和监控 iSCSI target,在计算节点 nova-compute 使用 iscsiadm 执行 initiator 相关操作。
下面来看看 Attach 操作的流程图
向 cinder-api 发送 attach 请求
cinder-api 发送消息
cinder-volume 初始化 volume 的连接
nova-compute 将 volume attach 到 instance
下面我们详细讨论每一个步骤。
这里我们将 volume “vol-1” attach 到 instance ”c2”上。
attach 操作之前,c2 上的虚拟磁盘如下:
进入 GUI 操作菜单 Project -> Compute -> Volumes
选择 volume “vol-1”,点击“Manage Attachments”
在 “Attach to Instance”下拉列表中,选择instance “c2”
点击 ”Attach Volume”
cinder-api 将接收到 attach volume 的请求,attach 请求实际上包含两个步骤:
初始化 volume 的连接
Volume 创建后,只是在 volume provider 中创建了相应存储对象(比如 LV),这时计算节点是无法使用的。Cinder-volume 需要以某种方式将 volume export 出来,计算节点才能够访问得到。这个 export 的过程就是“初始化 volume 的连接”。
下面是 cinder-api 的日志文件 /opt/stack/logs/c-api.log 中记录的相关信息
Initialize_connection 的具体工作主要由 cinder-volume 完成,将在后面详细讨论。
Attach volume
初始化 volume 连接后,计算节点将 volume 挂载到指定的 instance,完成 attach 操作。下面是 cinder-api 的日志文件 /opt/stack/logs/c-api.log 中记录的相关信息
Attach 的具体工作主要由 nova-compute 完成,也将在后面详细讨论。
初始化 volume 的连接
cinder-api 没有打印发送消息的日志,只能通过源代码查看
/opt/stack/cinder/cinder/volume/api.py,方法为 initialize_connection
Attach volume
cinder-api 没有打印发送消息的日志,只能通过源代码查看
下一节我们讨论 cinder-volume 和 nova-compute 如何实现 attach 操作。
Volume 的最主要用途是作为虚拟硬盘提供给 instance 使用。Volume 是通过 Attach 操作挂载到 instance 上的。本节我们就来详细讨论 Cinder 是如何实现 Attach 的。
上一节我们成功创建了基于 LVM provider 的 volume。每个 volume 实际上是存储节点上 VG 中的一个 LV。
那么问题来了:存储节点上本地的 LV 如何挂载到计算节点的 instance 上呢?通常情况存储节点和计算节点是不同的物理节点。
解决方案是使用 iSCSI,如下图所示
iSCSI 是 Client-Server 架构,有 target 和 initiator 两个术语。
Target
提供 iSCSI 存储资源的设备,简单的说,就是 iSCSI 服务器。
Initiator
使用 iSCSI 存储资源的设备,也就是 iSCSI 客户端。
Initiator 需要与 target 建立 iSCSI 连接,执行 login 操作,然后就可以使用 target 上面的块存储设备了。
Target 提供的块存储设备支持多种实现方式,我们实验环境中使用的是 LV。
Cinder 的存储节点 cinder-volume 默认使用 tgt 软件来管理和监控 iSCSI target,在计算节点 nova-compute 使用 iscsiadm 执行 initiator 相关操作。
下面来看看 Attach 操作的流程图
向 cinder-api 发送 attach 请求
cinder-api 发送消息
cinder-volume 初始化 volume 的连接
nova-compute 将 volume attach 到 instance
下面我们详细讨论每一个步骤。
向cinder-api发送attach请求
客户(可以是 OpenStack 最终用户,也可以是其他程序)向 cinder-api 发送请求:“请将这个 volume attach 到指定的 instance 上。这里我们将 volume “vol-1” attach 到 instance ”c2”上。
attach 操作之前,c2 上的虚拟磁盘如下:
进入 GUI 操作菜单 Project -> Compute -> Volumes
选择 volume “vol-1”,点击“Manage Attachments”
在 “Attach to Instance”下拉列表中,选择instance “c2”
点击 ”Attach Volume”
cinder-api 将接收到 attach volume 的请求,attach 请求实际上包含两个步骤:
初始化 volume 的连接
Volume 创建后,只是在 volume provider 中创建了相应存储对象(比如 LV),这时计算节点是无法使用的。Cinder-volume 需要以某种方式将 volume export 出来,计算节点才能够访问得到。这个 export 的过程就是“初始化 volume 的连接”。
下面是 cinder-api 的日志文件 /opt/stack/logs/c-api.log 中记录的相关信息
Initialize_connection 的具体工作主要由 cinder-volume 完成,将在后面详细讨论。
Attach volume
初始化 volume 连接后,计算节点将 volume 挂载到指定的 instance,完成 attach 操作。下面是 cinder-api 的日志文件 /opt/stack/logs/c-api.log 中记录的相关信息
Attach 的具体工作主要由 nova-compute 完成,也将在后面详细讨论。
cinder-api 发送消息
cinder-api 分两步完成 attach 操作,所以对应地会先后向 RabbitMQ 发送了两条消息:初始化 volume 的连接
cinder-api 没有打印发送消息的日志,只能通过源代码查看
/opt/stack/cinder/cinder/volume/api.py,方法为 initialize_connection
Attach volume
cinder-api 没有打印发送消息的日志,只能通过源代码查看
下一节我们讨论 cinder-volume 和 nova-compute 如何实现 attach 操作。
相关文章推荐
- GP学习(三)—How to run a geoprocessing tool
- Create Volume 操作(Part III) - 每天5分钟玩转 OpenStack(52)
- Create Volume 操作(Part II) - 每天5分钟玩转 OpenStack(51)
- 学习网站
- Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)
- 准备 LVM Volume Provider - 每天5分钟玩转 OpenStack(49)
- linux expect自动登录ssh,ftp
- 掌握 cinder-scheduler 调度逻辑 - 每天5分钟玩转 OpenStack(48)
- Cinder 组件详解 - 每天5分钟玩转 OpenStack(47)
- 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)
- linux 查看某一端口的占用情况
- shell脚本wc命令详解!!需求输出结果
- shell脚本输出颜色字体
- linux下的GDB调试
- linux常用方法
- OpenGL 例子 glsl
- 理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)
- linux挂载文件
- #159 – Creating a Read-Only Dependency Property(创建一个只读的依赖属性)
- Hadoop 如何查看是否32位