输入命令:nova volume-attache volume-id server-id
一、cinder-api
1、POST一个http消息,body是connection初始化(initialized_connection)的相关信息,192.168.232.12是要挂载虚机所在计算节点的IP地址,那么可以看出初始化信息包含了计算节点的相关信息
上图是初始化成功之前,进行的一些操作
2、初始化volume连接后,计算节点将指定的volume挂载到指定的instance,这主要由nova-compute完成,api日志里最后显示的Attach volume completed successfully是不是真的成功了呢?对应后面的日志的时间戳来继续分析
二、cinder-volume,通过lio或者tgt软件管理工具(可以在/etc/cinder/cinder.conf里配置iscsi_helper参数指定)为指定的挂载卷创建target并将指定的挂载卷export出来供iscsi客户端initiation访问,这在日志中,就是initialezed volume connection的过程(初始化)。
1、cinder-volume接收到initiatialized_connection消息后,通过lioadm为需要挂载到instance的volume创建target(也有用tgt创建target的,lio和tgt都是用来管理iscsi target的软件)
上图是lio创建target的一些操作,不深究
2、创建好的target,export出来,至于怎么export的,就看lio或者tgt这个软件的操作了。
3、initialized volume connection成功
PS:cinder-volume日志显示initialized volume connection success的时间是14:21:43.648,api日志显示initialized volume connection success的时间是14:21:43.709,说明api显示的初始化连接成功的时间,就是真正初始化连接成功的时间,并非像cinder创建volume一样,api显示的创建volume成功,只是api处理成功,不代表后端存储创建volume真的成功。(先这么分析,有待确认)
三、nova-compute,作为第二步生成的iscsi target的客户端,访问存储节点上的volume,挂载到instance
1、nova-compute上最早开始生成一个Attaching volume的信息,还未真正开始执行挂载
2、iscsi开始依次执行new,update,login,rescan操作将远程存储上的volume挂载到计算节点。
3、最后,计算节点将挂载好的iscsi target上的volume识别为一个磁盘文件,通过写入对应instance的xml文件,将这个磁盘文件给instance使用,可以在计算节点上验证如下:
(1)验证/dev目录
(2)验证xml文件
PS:api的日志显示14:21:48.894 Attach volume completed successfully,实际上nova-compute日志显示的挂载volume成功是在14:21:46.222,所以说api报的信息也应该是实际上挂载成功的时间。(这个也是有待确认的,因为我的环境没用ntp同步时间)