08.存儲Cinder→5.場景學習→03.Attach Volume→2.實際操做

背景:node



描述 詳細
  1. 向cinder-api發送attach請求
    1. 客戶(能夠是 OpenStack 最終用戶,也能夠是其餘程序)向 cinder-api 發送請求:「請將這個 volume attach 到指定的 instance 上。」
    2. 這裏咱們將 volume 「vol-1」 attach 到 instance 」c1」上。 attach 操做以前,c1 上的虛擬磁盤是:密碼是cubswin:)    。可使用sudo -i切換到root用戶
  1. 進入 GUI 操做菜單 Project -> Volumes -> Volumes,選擇 volume 「vol-1」,點擊「Manage Attachments」
    1. 在 「Attach to Instance」下拉列表中,選擇instance 「c1」

  1. cinder-api 將接收到 attach volume 的請求,attach 請求實際上包含兩個步驟:
    1. 初始化 volume的鏈接
      1. Volume 建立後,只是在 volume provider 中建立了相應存儲對象(好比 LV),這時計算節點是沒法使用的。Cinder-volume 須要以某種方式將 volume export 出來,計算節點纔可以訪問獲得。這個 export 的過程就是「初始化 volume 的鏈接」
      2. Initialize_connection 的具體工做主要由 cinder-volume 完成,將在後面詳細討論。
    2. Attach volume
      1. 初始化 volume 鏈接後,計算節點將 volume 掛載到指定的 instance,完成 attach 操做。
      2. Attach 的具體工做主要由 nova-compute 完成,也將在後面詳細討論。
cloudman的cinder-api日誌:



os:openstack
個人:
1
2
3
4
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...
1
2
3
4
5
6
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

1
2
3
4
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...
1
2
3
4
5
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

  1. cinder-api 發送消息
    1. cinder-api 分兩步完成 attach 操做,因此會前後向 RabbitMQ 發送了兩條消息
      1. 初始化 volume 的鏈接
        1. 沒有打印發送消息的日誌,只能經過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法爲 initialize_connection
  1. Attach volume
    1. 沒有打印發送消息的日誌,只能經過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法爲 attach
  1. cinder-volume 初始化 volume 的鏈接
    1. 查看cinder-volume日誌:cinder-volume 接收到 initialize_connection 消息後,會經過 tgt 建立 target,並將 volume 所對應的 LV 經過 target export 出來。
1
2
3
4
5
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
  1. 經過命令 tgtadm --lld iscsi --op show --mode target 看到已經將 1GB(1074MB)的 LV /dev/stack-volumes-lvmdriver-1/volume-f0a54ac7-5423-4794-8883-d753f6a903cd 經過 Target 1 export 出來了
1
2
3
4
5
6
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
...
  1. Initialize connection 完成。
cloudman:

我:
1
2
3
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
  1. nova-compute 將 volume attach 到 instance
    1. 查看計算節點nova-compute日誌文件:計算節點做爲 iSCSI initiator 訪問存儲節點 Iscsi Target 上的 volume,並將其 attach 到 instance。
1
2
3
4
5
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:爐渣磚
  1. nova-compute 依次執行 iscsiadm 的 new, update, login, rescan 操做訪問 target 上的 volume
    1. 我沒有找到rescan
1
2
3
4
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 ...
1
2
3
4
5
6
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
1
2
3
4
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操做
  1. 計算節點將 iSCSI target 上的 volume 識別爲一個磁盤文件
先輸入一行,再輸入一行
1
2
3
4
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的軟鏈接
  1. 而後經過更新 instance 的 XML 配置文件將 volume 映射給 instance
    1. 能夠看到,instance 增長了一個類型爲 block 的虛擬磁盤,source 就是要 attach 的 volume,該虛擬磁盤的設備名爲 vdb
 1
2
3
4
5
6
7
8
9
10
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
  1. 經過在計算節點輸入virsh edit instance-00000001查看更新後的 XML

source指的是宿主機的文件對應位置,好比虛機instance-00000001的vda磁盤(啓動盤)。其中id號不用管(這是我後來添加的筆記)


  1.  attach 操做以後,c1 上的虛擬磁盤是:密碼是cubswin:)
    1. GUI 界面也會更新相關 attach 信息
相關文章
相關標籤/搜索