お試し NetApp OpenStack Deployment -4

こんにちは、倉持です。

暑い日が続いておりますが。こちらも熱く進めましょう。

 

前回は、NetApp FAS 、 clustered Data ONTAP 上で SVM を作りストレージの準備をしました。(過去ログはページ下部)

 

今回は、Block Storage Service (Cinder)を使うための準備します。この時対象となるストレージデバイスを clustered Data ONTAP で準備したボリュームにするわけです。

手順をおさらいすると以下の3~5のところです。

 

  1. NetApp clustered Data ONTAP の設定{NFS , iSCSI} ・・・ cDOT オペレーション
  2. API アクセス用のロール作成 ・・・ cDOT オペレーション
  3. cinder.conf {NFS , iSCSI}の設定 ・・・ Cinder オペレーション
  4. cinder へ type と extra-specs 設定 ・・・ Cinder オペレーション
  5. Block Storage 作成 ・・・ Cinder オペレーション

 

 

LVM でまず作ってみる

 

通常は この Block Storage Service が稼働するシステム上のストレージデバイスを LVM の管理下にして、そのボリュームグループを対象とします。はじめにそれが正しく構成できるかを確認しておくのもよいでしょう。特に、OpenStack のオペレーションに慣れていない方はまず通常のブロックストレージのやり方をここで把握しておくのはとても大事です。

 

ちなみに、LVM ボリュームグループでブロックストレージを作る手順はざっくり以下のような感じです。

今回はオールインワンなので対象のシステムでは Block Storage Service は稼働しています。また、準備の際に、ローカルディスクに少し余分な領域を設けていただいているかと思いますのでその領域を使うことで確認することができます。

 

  1. 物理ディスクに LVM を適用する( pvcreate、vgcreate オペレーション
  2. LVM スキャン対象を設定( /etc/lvm/lvm.conf , filter パラメータ )
  3. cinder.conf の設定(ここではデフォルトのままで)
  4. cinder create (またはHorizon UI から) で必要なブロックストレージ作成
  5. 4. で作ったブロックストレージのインスタンスへの接続( ここではやりません )

 

4. で正常に作成されると、LVM で作ったボリュームグループから lv が作成されます。(以下例)

 

[root@tkstack cinder(keystone_admin)]# lvdisplay cinder-volumes

  --- Logical volume ---

  LV Path                /dev/cinder-volumes/volume-9d8eefa3-8de2-424d-b407-b1d649580de3

  LV Name                volume-9d8eefa3-8de2-424d-b407-b1d649580de3

  VG Name                cinder-volumes

  LV UUID                elSCKI-8ERN-UopT-Bwbt-Zj9J-E4Ca-KUZOYV

  LV Write Access        read/write

  LV Creation host, time tkstack.sample.net, 2014-08-05 11:59:01 +0900

  LV Status              available

  # open                 0

  LV Size                50.00 GiB

  Current LE             12800

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           253:2

 

 

確認できたら、このボリュームは消しておきましょう。( cinder delete や Horizon UI から )

 

Block Storage Service NetApp インテグレーション

 

さて、ここからが本番。

通常はシステム上のストレージデバイスを使うところを、NetApp ストレージにすげ替えます。

詳細な情報は下記に記載されていますのでご参照いただきながら進めてください。

 

http://netapp.github.io/openstack-deploy-ops-guide/icehouse/content/cinder.cdot.nfs.configuration.html

 

ボリュームを作成するオペレーションは OpenStack から行うので、 Block Storage Service が NetApp ストレージを認識できたり、命令できたりしなければなりません。このために、NetApp は ドライバを用意しています。これは「NetApp Unified Driver」と呼ばれています。それは既にOpenStack プロジェクト Cinder に組み込まれているため、何か別途ファイルをダウンロードしてシステムやFASにインストールして・・・ごにょごにょなどする必要はありません。設定ファイルを編集して、サービスを再起動することで対応します。

# Python 得意な方覗き見どうぞ( /usr/lib/python2.7/site-packages/cinder/volume/drivers/netapp )

 

設定のサンプルは以下です。(解説入りなのでコピペしても使えないので注意!IPアドレスなども適且に修正する必要があります。)

 

/etc/cinder/cinder.conf

 

[DEFAULT]

# 中略

enabled_backends=cdot-nfs,cdot-iscsi

 

[cdot-nfs]

volume_backend_name=cdot-nfs

volume_driver=cinder.volume.drivers.netapp.common.NetAppDriver

netapp_server_hostname=10.130.202.180 ・・・・cluster management lif のアドレス

netapp_server_port=80

netapp_storage_protocol=nfs

netapp_storage_family=ontap_cluster

netapp_login=openstack ・・・ロールとして新たに作ったAPI用のユーザ

netapp_password=password00・・・ロールとして新たに作ったAPI用のユーザのパスワード

netapp_vserver=demo-nfs-svm・・・対象のSVM

nfs_shares_config=/etc/cinder/nfs.shares・・・(ファイル作る)

nfs_mount_options = sec=sys

 

[cdot-iscsi]

volume_backend_name=cdot-iscsi

volume_driver=cinder.volume.drivers.netapp.common.NetAppDriver

netapp_server_hostname=10.130.202.180・・・・cluster management lif のアドレス

netapp_server_port=80

netapp_storage_protocol=iscsi

netapp_storage_family=ontap_cluster

netapp_login=openstack・・・ロールとして新たに作ったAPI用のユーザ

netapp_password=password00・・・ロールとして新たに作ったAPI用のユーザのパスワード

netapp_vserver=demo-iscsi-svm

 

 

15行目にあるように、NFS のエクスポート領域は別で支持する必要があり下記のようなファイルを用意します。

 

[root@tkstack cinder]# cat /etc/cinder/nfs.shares

10.130.208.55:/vol5_plain

10.130.208.55:/vol2_dedup

10.130.208.55:/vol3_compressed

10.130.208.55:/vol4_mirrored

 

ここで、デフォルトの LVM を使う設定下記の部分はコメントアウトしておきましょう。

 

設定変更後は Block Storage Service を再起動します。

 

systemctl stop openstack-cinder-api.service

systemctl stop openstack-cinder-scheduler.service

systemctl stop openstack-cinder-volume.servic

systemctl start openstack-cinder-api.service

systemctl start openstack-cinder-scheduler.service

systemctl start openstack-cinder-volume.service

 

再起動後、NFS エクスポート領域が自動的にマウントされているのを確認してください。以下 df 実行例の抜粋です。

 

10.130.208.55:/vol4_mirrored      50G  1.1M   50G   1% /var/lib/cinder/mnt/7a2ad54f8ce5ac4c4f092e6cb1f1b39b

10.130.208.55:/vol2_dedup        100G  627M  100G   1% /var/lib/cinder/mnt/ea9ebfcad8827c2df164a5792194d80e

10.130.208.55:/vol5_plain        150G  832K  150G   1% /var/lib/cinder/mnt/980e55e4b6bcbba7ff1f0adc1016e52e

10.130.208.55:/vol3_compressed   100G  448K  100G   1% /var/lib/cinder/mnt/5fa24de47b0ced340706db7fde94ab64

 

また、正しく構成できれば Block Stroage Service から以下のような出力を得られます。

 

[root@tkstack ~(keystone_admin)]# cinder service-list

+------------------+-------------------------------+------+---------+-------+----------------------------+-----------------+

|      Binary      |              Host             | Zone |  Status | State |         Updated_at         | Disabled Reason |

+------------------+-------------------------------+------+---------+-------+----------------------------+-----------------+

| cinder-scheduler |       tkstack.sample.net      | nova | enabled |   up  | 2014-08-18T05:58:27.000000 |       None      |

|  cinder-volume   | tkstack.sample.net@cdot-iscsi | nova | enabled |   up  | 2014-08-18T05:58:28.000000 |       None      |

|  cinder-volume   |  tkstack.sample.net@cdot-nfs  | nova | enabled |   up  | 2014-08-18T05:58:28.000000 |       None      |

+------------------+-------------------------------+------+---------+-------+----------------------------+-----------------+

 

次に、OpenStack Block Storage Service 上のカタログ情報のようなものと、前回作成した clustered Data ONTAP の各種ボリューム(重複排除やミラーがかかったボリュームなど)を紐付ける設定を行います。これは Block Storage Service では type や extra-specs と呼ばれており下記のように type を作成してからそれに extra-specs (仕様)を定義していきます。

 

type 作成

 

[root@tkstack ~(keystone_admin)]# cinder type-create iscsi

[root@tkstack ~(keystone_admin)]# cinder type-create nfs

[root@tkstack ~(keystone_admin)]# cinder type-create gold

[root@tkstack ~(keystone_admin)]# cinder type-create silver

[root@tkstack ~(keystone_admin)]# cinder type-create bronze

 

[root@tkstack ~(keystone_admin)]# cinder type-list

+--------------------------------------+-----------+

|                  ID                  |    Name   |

+--------------------------------------+-----------+

| 3f615755-fef0-46d4-b3d7-aa7d87977209 |    nfs    |

| 55f541cf-b7bd-4912-8c0d-a7b7ef3aa706 |   iscsi   |

| 577d372e-9e6c-4468-ba8b-a4b0e11939f7 |   silver  |

| 9081d1c7-5812-4e94-9ce9-fc1aa9118d5b |    gold   |

| f6b87b16-0a08-4270-a5f0-1707ffcd68c0 |   bronze  |

+--------------------------------------+-----------+

[root@tkstack ~(keystone_admin)]#

 

extra-specs 定義

 

[root@tkstack ~(keystone_admin)]# cinder type-key iscsi set storage_protocol=iSCSI

[root@tkstack ~(keystone_admin)]# cinder type-key nfs set storage_protocol=nfs

[root@tkstack ~(keystone_admin)]# cinder type-key gold set netapp_mirrored=true

[root@tkstack ~(keystone_admin)]# cinder type-key silver set netapp_dedup=true

[root@tkstack ~(keystone_admin)]# cinder type-key bronze set netapp_compresstion=true

 

[root@tkstack ~(keystone_admin)]# cinder extra-specs-list

+--------------------------------------+-----------+--------------------------------------------+

|                  ID                  |    Name   |                extra_specs                 |

+--------------------------------------+-----------+--------------------------------------------+

| 3f615755-fef0-46d4-b3d7-aa7d87977209 |    nfs    |       {u'storage_protocol': u'nfs'}        |

| 55f541cf-b7bd-4912-8c0d-a7b7ef3aa706 |   iscsi   |      {u'storage_protocol': u'iSCSI'}       |

| 577d372e-9e6c-4468-ba8b-a4b0e11939f7 |   silver  |         {u'netapp_dedup': u'true'}         |

| 9081d1c7-5812-4e94-9ce9-fc1aa9118d5b |    gold   |       {u'netapp_mirrored': u'true'}        |

| f6b87b16-0a08-4270-a5f0-1707ffcd68c0 |   bronze  |      {u'netapp_compression': u'true'}      |

+--------------------------------------+-----------+--------------------------------------------+

 

Block Storage Service のNetApp インテグレーション設定はここまでです。

 

Block Storage 作成

 

設定が完了したら、Block Storage を作ってみましょう。

Horizon UI からも設定可能ですが、ここではコマンドで以下のように実行してみます。

myGold」という名で、ボリュームのタイプを「gold(これはclustered Data ONTAP 上では Mirror ボリュームに該当)」、容量を 1GBBlock Storage を作成するという意味です。

 

 

[root@tkstack ~]# source keystonerc_demo

[root@tkstack ~(keystone_demo)]# cinder create --display-name myGold --volume-type gold 1

+---------------------+--------------------------------------+

|       Property      |                Value                 |

+---------------------+--------------------------------------+

|     attachments     |                  []                  |

|  availability_zone  |                 nova                 |

|       bootable      |                false                 |

|      created_at     |      2014-08-08T09:21:05.783889      |

| display_description |                 None                 |

|     display_name    |                myGold                |

|      encrypted      |                False                 |

|          id         | 2355d34e-eede-4c92-b609-aa4f6d3853b8 |

|       metadata      |                  {}                  |

|         size        |                  1                   |

|     snapshot_id     |                 None                 |

|     source_volid    |                 None                 |

|        status       |               creating               |

|     volume_type     |                 gold                 |

+---------------------+--------------------------------------+

 

[root@tkstack ~(keystone_demo)]# cinder list

+--------------------------------------+-----------+----------------+------+-------------+----------+-------------+

|                  ID                  |   Status  |  Display Name  | Size | Volume Type | Bootable | Attached to |

+--------------------------------------+-----------+----------------+------+-------------+----------+-------------+

| 2355d34e-eede-4c92-b609-aa4f6d3853b8 | available |     myGold     |  1   |     gold    |  false   |             |

+--------------------------------------+-----------+----------------+------+-------------+----------+-------------+

 

正しく成功すると、「Status」が available になって確認できます。

実際には、NFS マウントされた領域上にファイルとして作成されます。確認は以下のようにできます。

 

[root@tkstack ~(keystone_demo)]# df -h /var/lib/cinder/mnt/7a2ad54f8ce5ac4c4f092e6cb1f1b39b

Filesystem                    Size  Used Avail Use% Mounted on

10.130.208.55:/vol4_mirrored   50G  896K   50G   1% /var/lib/cinder/mnt/7a2ad54f8ce5ac4c4f092e6cb1f1b39b

 

 

[root@tkstack ~(keystone_demo)]# ls -lR /var/lib/cinder/mnt

 

(略)

 

/var/lib/cinder/mnt/7a2ad54f8ce5ac4c4f092e6cb1f1b39b:

total 0

-rw-rw-rw- 1 nobody nobody  1.0G Aug  2 23:42 volume-2355d34e-eede-4c92-b609-aa4f6d3853b8

 

(略)

 

他のタイプでも同じように Block Storage を作成してみましょう。なお、iscsi のタイプを選んで作成した場合は、clustered Data ONTAP の iscsi 用のSVM 上に LU が作成されている事が確認できます。

 

cluster-cdot::> lun show -vserver demo-iscsi-svm

Vserver   Path                            State   Mapped   Type        Size

--------- ------------------------------- ------- -------- -------- --------

demo-iscsi-svm

          /vol/vol2/volume-3c0c23a4-50dc-4db5-9a79-4140e6a4210d

                                          online  unmapped linux         1GB

 

 

Tips

 

  • Block Storage Service はcinder-{api,scheduler,volume} と3つが主に稼働しています。上手くいかない場合のログをトレースするために cinder.conf  の [DEFAULT] 内の verbose パラメータを true としておきましょう
  • ボリュームを作る際、サービスの起動停止の際は、特に /var/log/cinder/{volume.log , scheduler.log} を tail しておき、正しい挙動、上手く行かなかった際の挙動を確認しましょう
  • nfs というタイプを指定してボリュームを作成した場合、ボリュームの空き具合により /vol2_dedup , /vol3_compressed , /vol4_mirrored , /vol5_plain に配置されることがあるでしょう(これらはすべて NFS プロトコルを使うボリュームであることを満たしているため)
  • extra-specs (extra-specs の参考)の定義は他にもたくさんあり、例えば clustered Data ONTAP QoS のポリシーグループでもカタログ化可能な事を意味します

 

応用

 

余裕のある方は以下もトライするとよいでしょう。

 

  • NetApp FAS ストレージで潤沢にドライブが利用できるのであれば、extra-specs で disk-type をいろいろ作ってみましょう
  • QoS を定義したタイプを作成して Block Storage も作ってみましょう
  • 7-Mode 時のオペレーションも確認してみましょう

 

 

次回は、この作った Block Storage をインスタンスに接続してみます。そのためインスタンスの準備も合わせてブログります。