OpenStack で NetApp の CopyOffload を試す(設定)

あけましておめでとうございます。

倉持です。

 

今回は具体的な設定方法をご紹介します。

まず、流れは以下のような感じです。

  1. Copy Offload Client を NetApp Support Site からダウンロード
  2. Copy Offload Client の配置
  3. OpenStack 側設定 (glance , cinder)
  4. イメージ 登録(場合によっては再登録)
  5. clustered Data ONTAP の設定

 

前提条件

  • Clustered Data ONTAP 8.2 以上
  • NFS v4.0 以上
  • SVM (Storage Virtual Machine)で Copy Offload 有効にする
  • Glance のストア場所が clustered Data ONTAP のNFS 上であること(Swift上にイメージを格納している場合には対応できてません)
  • Glance のキャッシュディレクトリは使っていないこと(キャッシュディレクトリを有効にしている場合は対応していませんが、若干改良することで対応可能

 

Copy Offload Client を NetApp Support Site からダウンロード

弊社サポートサイトからダウンロードします。取得にはログインアカウントが必要です。

http://mysupport.netapp.com/NOW/download/tools/ntap_openstack_nfs/

 

Copy Offload Client の配置

tar.gz ファイルになるので、展開して、プログラムを配置します。配置する先は cinder-volume が稼働しているマシン上です。

[root@tkstack ~]# tar zxf copyoffload.tar.gz

[root@tkstack ~]# ls -ltr
合計 912
-rwxr-xr-x 1 cinder cinder 372858  2月  8 01:04 na_copyoffload_64
-r--r--r-- 1 cinder cinder 291686  4月  4 23:36 NetApp_End_User_License_Agreement2014.pdf
-r--r--r-- 1 cinder cinder 254731  4月  4 23:39 NOTICE.pdf
-rw-r--r-- 1 cinder cinder   1602  4月 12 04:37 README.txt

[root@tkstack ~]# mkdir /etc/cinder/copyoffload

[root@tkstack ~]# cp na_copyoffload_64 /etc/cinder/copyoffload/na_copyoffload

[root@tkstack ~]# chown -R cinder.cinder /etc/cinder/copyoffload/

 

OpenStack 側設定 (glance , cinder)

glance.conf の設定 (glance-api が稼働しているマシン上)

[DEFAULT]
...

default_store = file 
filesystem_store_datadir = /glance/images
show_image_direct_url = True
show_multiple_locations = True
filesystem_store_metadata_file = /etc/glance/metadata.json ★

 metadata.json ファイルの作成

# cat /etc/glance/metadata.json
{
    "share_location": "nfs://10.130.208.55/images",
    "mount_point": "/glance/images",
    "type": "nfs"
}

 設定後は、glance-api を再起動

cinder.conf の設定

[DEFAULT]
# 中略
glance_api_version=2 ・・・ 追記

[cdot-nfs]
volume_backend_name=cdot-nfs
volume_driver=cinder.volume.drivers.netapp.common.NetAppDriver
netapp_server_hostname=10.130.202.180
netapp_server_port=80
netapp_storage_protocol=nfs
netapp_storage_family=ontap_cluster
netapp_login=openstack
netapp_password=eisaku35
netapp_vserver=demo-nfs-svm
nfs_shares_config=/etc/cinder/nfs.shares
nfs_mount_options = sec=sys

# Copy Offload
netapp_copyoffload_tool_path=/etc/cinder/copyoffload/na_copyoffload ・・・ 追記

 設定後は cinder-volume 再起動

 

イメージ 登録(場合によっては再登録)

例えば、既にイメージ登録されているケースが多いと思います。今回上記の設定により、イメージ登録処理野中で metadata が付属してGlanceのリポジトリに情報が保持されることになります。そのため既存であるイメージにはそれはなく、CopyOffloadの対象になりません。正確にはCopyOffloadをする際に渡す引数となる値が取得できないため、レギューラコピー(普通のサーバ経由のデータ転送)となってしまいます。よって、既存にあるものを一度消すして入れなおすなり、対象としたいものを登録するなりする必要がありますのでご注意ください。

 

clustered Data ONTAP の設定

NFSv4 の有効化

cluster-cdot::> vserver nfs show

Vserver: demo-nfs-svm

        General Access:  true
                    v3:  enabled
                  v4.0:  enabled
                   4.1:  enabled
                   UDP:  enabled
                   TCP:  enabled
  Default Windows User:  -
 Default Windows Group:  -

 SVM で Copy Offload を有効化

cluster-cdot::*> vserver copy-offload modify -vserver vs_nfs -nfs enabled
cluster-cdot::*> vserver copy-offload show -vserver demo-nfs-svm

                     Vserver Name: demo-nfs-svm
                 NFS Copy-Offload: enabled
                SCSI Copy-Offload: enabled
                     QoS Throttle: 0B
Copy-Offload Via Sub-File Cloning: enabled

 

設定は以上です。

では、テストしてみましょう。

 

イメージから Cinder Volume を作成する

# cinder create --image-id 156e8961-aedc-4879-8b42-903236f2e8d8 20

見た目上はわからないので、以下で Copy Offload がされたかどうかを見ます。

  • cinder-volume.log
  • clustered Data ONTAP の統計情報

例えば、Copy Offload 成功時の cinder-volume.log は以下のようになります。

2014-08-06 16:06:45.348 7493 WARNING cinder.context [-] Arguments dropped when creating context: {'user': u'5548c424732047ca99b29a6fd0aca7df', 'tenant': u'63bba5d3297c4b38af6699e7a06a0468', 'user_identity': u'5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -'}
2014-08-06 16:06:45.481 7493 INFO cinder.volume.flows.manager.create_volume [req-99064c03-1084-4d26-875b-c7799182782a 5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -] Volume 0d632f1e-d12e-4f64-ba07-94101e876d50: being created using CreateVolumeFromSpecTask._create_from_image with specification: {'status': u'creating', 'image_location': (u'file:///glance/images/30186104-64ae-404e-b833-9890d3f6685d', [{u'url': u'file:///glance/images/30186104-64ae-404e-b833-9890d3f6685d', u'metadata': {u'mount_point': u'/glance/images', u'type': u'nfs', u'share_location': u'nfs://10.130.208.55/images'}}]), 'volume_size': 20, 'volume_name': u'volume-0d632f1e-d12e-4f64-ba07-94101e876d50', 'image_id': u'30186104-64ae-404e-b833-9890d3f6685d', 'image_service': <cinder.image.glance.GlanceImageService object at 0x3bf1190>, 'image_meta': {'status': u'active', 'name': u'fedora-20-x86_64', 'deleted': None, 'container_format': u'bare', 'created_at': datetime.datetime(2014, 8, 6, 1, 3, 43, tzinfo=<iso8601.iso8601.Utc object at 0x366ff90>), 'disk_format': u'qcow2', 'updated_at': datetime.datetime(2014, 8, 6, 1, 3, 46, tzinfo=<iso8601.iso8601.Utc object at 0x366ff90>), 'id': u'30186104-64ae-404e-b833-9890d3f6685d', 'owner': u'63bba5d3297c4b38af6699e7a06a0468', 'min_ram': 0, 'checksum': u'1ec332a350e0a839f03c967c1c568623', 'min_disk': 0, 'is_public': None, 'deleted_at': None, 'properties': {}, 'size': 210829312}}
2014-08-06 16:06:45.484 7493 INFO cinder.volume.drivers.netapp.nfs [req-99064c03-1084-4d26-875b-c7799182782a 5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -] Checking image clone 30186104-64ae-404e-b833-9890d3f6685d from glance share.
2014-08-06 16:06:46.195 7493 INFO cinder.volume.drivers.netapp.nfs [req-99064c03-1084-4d26-875b-c7799182782a 5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -] casted to 10.130.208.55:/vol2_dedup
2014-08-06 16:07:05.127 7493 INFO cinder.volume.drivers.netapp.nfs [req-99064c03-1084-4d26-875b-c7799182782a 5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -] Performing post clone for volume-0d632f1e-d12e-4f64-ba07-94101e876d50
2014-08-06 16:07:05.286 7493 INFO cinder.volume.drivers.netapp.nfs [req-99064c03-1084-4d26-875b-c7799182782a 5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -] Resizing file to 20G
2014-08-06 16:07:05.509 7493 INFO cinder.volume.drivers.netapp.nfs [req-99064c03-1084-4d26-875b-c7799182782a 5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -] Copied image 30186104-64ae-404e-b833-9890d3f6685d to volume 0d632f1e-d12e-4f64-ba07-94101e876d50 using copy offload workflow.
2014-08-06 16:07:06.004 7493 INFO cinder.volume.flows.manager.create_volume [req-99064c03-1084-4d26-875b-c7799182782a 5548c424732047ca99b29a6fd0aca7df 63bba5d3297c4b38af6699e7a06a0468 - - -] Volume volume-0d632f1e-d12e-4f64-ba07-94101e876d50 (0d632f1e-d12e-4f64-ba07-94101e876d50): created successfully

 diag モードでの統計情報でも確認できます。

login: admin
Password:
rcallawacluster-1::> set diag
 
Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y


rcallawacluster-1::*> statistics start -object copy_manager
Statistics collection is being started for Sample-id: sample_12


rcallawacluster-1::*> statistics show -object copy_manager -instance rcallawa-nfs-vserver -counter copy_reqs
 
Object: copy_manager
Instance: rcallawa-nfs-vserver
Start-time: 8/2/2014 14:43:56
End-time: 8/2/2014 14:44:34
Cluster: rcallawacluster-1
Number of Constituents: 2 (complete_aggregation)
    Counter                                                     Value
    -------------------------------- --------------------------------
    copy_reqs                                                       4

 

今回は以上です。

 

この程度の動作確認では良さがわからないかもしれませんが、クラウド基盤では複数のイメージが稼働するため、コピーや展開処理が大きな負荷を発生させたり冗長なデータを生み出します。通常のOSS のみのストレージ基盤で作った場合とのプロビジョニングや効率性、運用性の差異を見比べてみると面白いと思います。時間を見つけてご紹介できればと思います。