- 向cinder-api發送attach請求
- 客戶(能夠是 OpenStack 最終用戶,也能夠是其餘程序)向 cinder-api 發送請求:「請將這個 volume attach 到指定的 instance 上。」
- 這裏咱們將 volume 「vol-1」 attach 到 instance 」c1」上。 attach 操做以前,c1 上的虛擬磁盤是:密碼是cubswin:) 。可使用sudo -i切換到root用戶
|
|
- 進入 GUI 操做菜單 Project -> Volumes -> Volumes,選擇 volume 「vol-1」,點擊「Manage Attachments」
- 在 「Attach to Instance」下拉列表中,選擇instance 「c1」
|
|
- cinder-api 將接收到 attach volume 的請求,attach 請求實際上包含兩個步驟:
- 初始化 volume的鏈接
- Volume 建立後,只是在 volume provider 中建立了相應存儲對象(好比 LV),這時計算節點是沒法使用的。Cinder-volume 須要以某種方式將 volume export 出來,計算節點纔可以訪問獲得。這個 export 的過程就是「初始化 volume 的鏈接」
- Initialize_connection 的具體工做主要由 cinder-volume 完成,將在後面詳細討論。
- Attach volume
- 初始化 volume 鏈接後,計算節點將 volume 掛載到指定的 instance,完成 attach 操做。
- Attach 的具體工做主要由 nova-compute 完成,也將在後面詳細討論。
|
cloudman的cinder-api日誌:
os:openstack 個人:
|
Jun 19 10:39:48 controller devstack@c-api.service[31309]:
INFO cinder.api.openstack.wsgi
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ad61d583-08fe-4c0f-95e9-0d532819b2c2 admin admin]
PUT http://172.16.1.17/volume/v3/51743f081cb7477f9a1f4ccdf6490d8e/attachments/ca8...
|
|
Jun 19 10:39:48 controller devstack@c-api.service[31309]:
DEBUG cinder.api.openstack.wsgi
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ad61d583-08fe-4c0f-95e9-0d532819b2c2 admin admin]
Action: 'update', calling method: <function version_select at 0x7f35b545ff50>,
body: {"attachment": {"connector": {"initiator": "iqn.1993-08.org.debian:01:78b9dad15bad",
{{(pid=31313) _process_stack /opt/stack/cinder/cinder/api/openstack/wsgi.py:868
|
_process_stack:Implement the processing stack
|
Jun 19 10:39:54 controller devstack@c-api.service[31309]:
INFO cinder.api.openstack.wsgi
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ee075a89-44d9-49ba-98cb-1194235eebc4 admin admin]
POST http://172.16.1.17/volume/v3/51743f081cb7477f9a1f4ccdf6490d8e/attachments/ca804b4...
|
|
Jun 19 10:39:54 controller devstack@c-api.service[31309]:
DEBUG cinder.api.openstack.wsgi
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ee075a89-44d9-49ba-98cb-1194235eebc4 admin admin]
Action body: {"os-complete": null}
{{(pid=31313) get_method /opt/stack/cinder/cinder/api/openstack/wsgi.py:985
|
os-complete代表請求由cinder-volume和nova-compute處理完成。看下時間就知道,此時是處理後api獲得的反饋消息
get_method:Get the implementing method
|
- cinder-api 發送消息
- cinder-api 分兩步完成 attach 操做,因此會前後向 RabbitMQ 發送了兩條消息
- 初始化 volume 的鏈接
- 沒有打印發送消息的日誌,只能經過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法爲 initialize_connection
|
|
- Attach volume
- 沒有打印發送消息的日誌,只能經過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法爲 attach
|
|
- cinder-volume 初始化 volume 的鏈接
- 查看cinder-volume日誌:cinder-volume 接收到 initialize_connection 消息後,會經過 tgt 建立 target,並將 volume 所對應的 LV 經過 target export 出來。
|
|
Jun 19 10:39:49 controller cinder-volume[304]:
DEBUG cinder.volume.targets.tgt
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ad61d583-08fe-4c0f-95e9-0d532819b2c2 admin None]
Creating iscsi_target for Volume ID: volume-f0a54ac7-5423-4794-8883-d753f6a903cd
{{(pid=460) create_iscsi_target /opt/stack/cinder/cinder/volume/targets/tgt.py:162
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Jun 19 10:39:49 controller cinder-volume[304]:
DEBUG cinder.volume.targets.tgt
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ad61d583-08fe-4c0f-95e9-0d532819b2c2 admin None]
Created volume path /opt/stack/data/cinder/volumes/volume-f0a54ac7-5423-4794-8883-d753f6a903cd,
Jun 19 10:39:49 controller cinder-volume[304]: content:
<target iqn.2010-10.org.openstack:volume-f0a54ac7-5423-4794-8883-d753f6a903cd>
backing-store /dev/stack-volumes-lvmdriver-1/volume-f0a54ac7-5423-4794-8883-d753f6a903cd
driver iscsi
incominguser uRAJv2FYqDckNKAsMTw9 hcASxywRe5SZ7Xou
write-cache on
</target>
{{(pid=460) create_iscsi_target /opt/stack/cinder/cinder/volume/targets/tgt.py:172
|
|
- 經過命令 tgtadm --lld iscsi --op show --mode target 看到已經將 1GB(1074MB)的 LV /dev/stack-volumes-lvmdriver-1/volume-f0a54ac7-5423-4794-8883-d753f6a903cd 經過 Target 1 export 出來了
|
|
Jun 19 10:39:50 controller cinder-volume[304]:
DEBUG oslo_concurrency.processutils
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ad61d583-08fe-4c0f-95e9-0d532819b2c2 admin None]
CMD "sudo cinder-rootwrap /etc/cinder/rootwrap.conf tgtadm --lld iscsi --op show --mode target"
returned: 0 in 0.204s
{{(pid=460) execute /usr/local/lib/python2.7/dist-packages/oslo_concurrency/processutils.py:409
|
用法:tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]
--op new表示建立一個target;--op show表示顯示target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
Jun 19 10:39:50 controller cinder-volume[304]: DEBUG cinder.volume.targets.tgt
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ad61d583-08fe-4c0f-95e9-0d5...]
Targets after update:
Target 1: iqn.2010-10.org.openstack:volume-f0a54ac7-5423-4794-8883-d753f6a903cd
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 1074 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: rdwr
Backing store path:
/dev/stack-volumes-lvmdriver-1/volume-f0a54ac7-5423-4794-8883-d753f6a903cd
...
|
|
- Initialize connection 完成。
|
cloudman:
我:
|
Jun 19 10:39:50 controller cinder-volume[304]: INFO cinder.volume.manager
[req-d5993ab6-9ced-4267-aab8-5c993e9bad4f req-ad61d583-08fe-4c0f-95e...]
attachment_update completed successfully.
|
向cinder api發出attach請求時也是attachment update |
- nova-compute 將 volume attach 到 instance
- 查看計算節點nova-compute日誌文件:計算節點做爲 iSCSI initiator 訪問存儲節點 Iscsi Target 上的 volume,並將其 attach 到 instance。
|
|
Jun 19 10:39:51 compute nova-compute[5685]:
DEBUG nova.virt.libvirt.volume.iscsi
[None req-d5993ab6-9ced-4267-aab8-5c993e9bad4f admin admin]
Calling os-brick to attach iSCSI Volume
{{(pid=5685) connect_volume /opt/stack/nova/nova/virt/libvirt/volume/iscsi.py:63
|
os-brick:OpenStack Cinder brick library for managing local volume attaches,可使用pip install os-brick安裝 cinder brick:爐渣磚 |
- nova-compute 依次執行 iscsiadm 的 new, update, login, rescan 操做訪問 target 上的 volume
- 我沒有找到rescan
|
|
Jun 19 10:39:51 compute nova-compute[5685]:
DEBUG os_brick.initiator.connectors.iscsi
[None req-d5993ab6-9ced-4267-aab8-5c993e9bad4f admin admin]
iscsiadm ('--interface', 'default', '--op', 'new'): stdout=New iSCSI node ...
|
|
Jun 19 10:39:51 compute nova-compute[5685]:
DEBUG os_brick.initiator.connectors.iscsi
[None req-d5993ab6-9ced-4267-aab8-5c993e9bad4f admin admin]
iscsiadm ('--op', 'update', '-n', 'node.session.auth.password', '-v', u'***'): stdout= stderr=
{{(pid=5685) _run_iscsiadm
/usr/local/lib/python2.7/dist-packages/os_brick/initiator/connectors/iscsi.py:973
|
|
Jun 19 10:39:52 compute nova-compute[5685]:
DEBUG os_brick.initiator.connectors.iscsi
[None req-d5993ab6-9ced-4267-aab8-5c993e9bad4f admin admin]
iscsiadm ('--login',): stdout=Logging in to ...
|
由於計算節點是iscsi客戶端,所以要進行login操做 |
- 計算節點將 iSCSI target 上的 volume 識別爲一個磁盤文件
|
先輸入一行,再輸入一行
|
root@compute:~# ll /dev/disk/by-path/ip-172.16.1.17
> :3260-iscsi-iqn.2010-10.org.openstack:volume-f0a54ac7-5423-4794-8883-d753f6a903cd-lun-1
lrwxrwxrwx 1 root root 9 Jun 19 10:39 /dev/disk/by-path/ip-172.16.1.17:3260-iscsi-iqn.2010-10
.org.openstack:volume-f0a54ac7-5423-4794-8883-d753f6a903cd-lun-1 -> ../../sda
|
是/dev/sda的軟鏈接
|
- 而後經過更新 instance 的 XML 配置文件將 volume 映射給 instance
- 能夠看到,instance 增長了一個類型爲 block 的虛擬磁盤,source 就是要 attach 的 volume,該虛擬磁盤的設備名爲 vdb
|
|
Jun 19 10:39:53 compute nova-compute[5685]:
DEBUG nova.virt.libvirt.guest
[None req-d5993ab6-9ced-4267-aab8-5c993e9bad4f admin admin]
attach device xml: <disk type="block" device="disk">
<driver name="qemu" type="raw" cache="none" io="native"/>
<source dev="/dev/sda"/>
<target bus="virtio" dev="vdb"/>
<serial>f0a54ac7-5423-4794-8883-d753f6a903cd</serial>
</disk>
{{(pid=5685) attach_device /opt/stack/nova/nova/virt/libvirt/guest.py:305
|
|
- 經過在計算節點輸入virsh edit instance-00000001查看更新後的 XML
|
source指的是宿主機的文件對應位置,好比虛機instance-00000001的vda磁盤(啓動盤)。其中id號不用管(這是我後來添加的筆記)
|
- attach 操做以後,c1 上的虛擬磁盤是:密碼是cubswin:)
- GUI 界面也會更新相關 attach 信息
|
|