#概要
NetApp ONTAPの階層化機能であるFabricPoolを検証する際に、コピペで簡単に設定できるようにCLIをまとめます。
FabricPoolの技術的な詳細は、「3. 関連情報」をご確認ください。
ノウハウや注意事項、ハマりポイントを文中に記載しています。
Proxyを経由したFabricPool設定は少しややこしいので、別記事で紹介予定です。
#目次
-
FabricPoolの前提条件
-
設定手順
2.0. FabricPoolライセンスキーの投入
2.1. 時刻同期
2.2. ONTAPのhosts/DNS設定
2.3. 名前解決の確認と疎通確認
2.4. FabricPool設定
2.5. 簡易性能テスト
2.6. 各種運用コマンド -
関連情報
#1. FabricPoolの前提条件
-
NetAppストレージの対応機種
- FAS2600シリーズ、FAS2700シリーズ
- FAS8000シリーズ
(FAS8040/FAS8060/FAS8080/FAS8200/FAS8300/FAS8700/FAS9000) - AFFシリーズ
(C190/A200/A220/A250/A300/A320/A400/A700/A800/AFF8040/AFF8060/AFF8080)
※FAS25xxシリーズとFAS/AFF8020はCPUコア数の関係で非対応
-
ONTAPバージョン
- ONTAP9.2以上
※ここでの手順はONTAP9.8を想定して記載しています。
※旧バージョンでもほぼ同じ手順を利用できますが、エラーになった場合にはそのバージョンのONTAPマニュアルを参照ください。
- ONTAP9.2以上
-
対象オブジェクトストレージ
- AWS S3とその互換ストレージや、NetApp StorageGRIDのS3 APIを前提に記載しています。
- AzureやIBM ICOS等の設定はCLIの引数に多少違いがあります。ONTAPにFabricPoolのライセンスキーを入れた状態でCLIの引数に「?」を入力して、引数を確認してみてください。
- 例1:storage aggregate object-store config create -object-store-name aaaa -server aaa.bbb.com -container-name bucket -provider-type ?
- 例2:storage aggregate object-store config create -object-store-name aaaa -server aaa.bbb.com -container-name bucket -provider-type GoogleCloud ?
-
オブジェクトストレージの設定
- 階層化先のS3バケットを手動で作成済であること。
- FAS/AFFシリーズからPUT/GET等を受けられること。
※AWS S3をCloud Tierに設定する際はONTAP OSにAccess KeyとSecret Access Keyを設定しますが、以下の権限が必要です。
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject
■AWSのマニュアルリンク(Creating a role to delegate permissions to an IAM user)
https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html
事前にS3ブラウザやAWS CLI等で操作可能か確認しておくと確実です。
-
本手順でカバーしないONTAPに必要な事前設定
- オブジェクトストレージと通信するInterCluster LIFの作成
(SnapMirror用途のLIFをFabricPool用に流用可能。)
FAS/AFFのコントローラ毎にIntercluster LIFを1つずつ作る必要があります。 -
FabricPoolライセンスの投入手順を追記しました。
評価ライセンスキーの入手は、以下の情報を添えてNetApp社の営業・SEまで依頼してください。
::> cluster identity show
::> system node show -node NODE_NAME (HA構成の場合は2コントローラ分)
::> license show-serial-numbers -instance
- オブジェクトストレージと通信するInterCluster LIFの作成
※ 階層化先のオブジェクトストレージがStorageGRIDの場合はライセンス不要。
※ 階層化先が富士通クラウドの「FUJITSU Hybrid IT Service FJcloud-O」の第三リージョンのオブジェクトストレージの場合はライセンス不要だが、Proxyサーバが最低1台必要(冗長は2台)。
※ 階層化元のストレージがNetApp CVO(Cloud Volumes ONTAP)の場合は、階層化先オブジェクトストレージの種類にかかわらずライセンス不要。
#2. 設定手順
##2.0. FabricPoolライセンスキーの投入
ライセンスキーが不要な使い方をしている人は手順2.1から実行してください。
ここではONTAP9.8のSystem ManagerのGUIを使っています。
System Manager GUIからライセンスキーを投入します。 (ここだけGUIです)
「Cluster」→「Settings」→「License」画面の右矢印を選択
「Browse」でNetApp社から入手したライセンスキーファイルを選択し、「Add」
ライセンス画面の「FabricPool」でキーが入っているか確認。
CLIでライセンスキーの状態確認
(Cloud Tierに階層化済みの容量と、許可されたライセンス上限を確認。)
ise-select::> system license show-status
Status License Scope Detailed Status
--------- ------------------- --------- ----------------------
eval
Select node ise-select-01: Currently using 0B. Evaluation license expires as of: 6/8/2021 10:03:28.
valid
NFS cluster -
CIFS cluster -
iSCSI cluster -
SnapRestore cluster -
SnapMirror cluster -
FlexClone cluster -
SnapVault cluster -
VE cluster -
FabricPool cluster The system is using 0B. The system can use up to 1TB.
not-installed
FCP - -
SnapLock - -
SnapManagerSuite - -
SnapProtectApps - -
V_StorageAttach - -
Insight_Balance - -
OCShift - -
TPM - -
DP_Optimized - -
SnapMirror_Sync - -
NVMe_oF - -
MT_EK_MGMT - -
S3 - -
SnapMirror_Cloud - -
not-applicable
Cloud - -
CapacityPool - -
26 entries were displayed.
##2.1. 時刻同期
(1) タイムゾーン設定
::> time -timezone Japan
::> date
(2) NTPサーバ指定
::> cluster time-service ntp server show
::> cluster time-service ntp server create -server ntp.nict.jp
(2)' NTPを使わず、手動設定の場合
::> date –u YYYYMMDDHHMM.SS
::> cluster date modify -u YYYYMMDDHHMM.SS
##2.2. ONTAPのhosts/DNS設定
ONTAPがオブジェクトストレージのFQDNを名前解決するために必要です。
(1) Hostsを使う場合
::> vserver services name-service dns hosts show
::> vserver services name-service dns hosts create -vserver <AdminSVM> -address <解決先IPアドレス> -hostname <CloudTierのFQDN>
(1)' DNSを使う場合
::> vserver services name-service dns show
::> vserver services name-service dns create -vserver <AdminSVM> -domains <任意の文字列> -name-servers <DNSサーバIP1>,<DNSサーバIP2>
##2.3. 名前解決の確認と疎通確認
名前解決の確認は必須で行います。
疎通確認は対向のオブジェクトストレージがPingに応答しないこともあるので、応答が無くても正常な場合もあります。この場合はInterCluster LIFからtracerouteで途中まで通信できているかを確認すると同時に、InterCluster LIFと同じセグメントに仮想サーバを立てて、S3ブラウザ等でPUT/GETのテストをすると確実です。
(1) 名前解決の確認
::> ping -lif <InterCluster_LIF-A> –vserver <AdminSVM> -destination <CloudTierのFQDN>
::> traceroute -lif <InterCluster_LIF-A> -vserver <AdminSVM> -destination <CloudTierのFQDN>
(2) 疎通確認
::> ping -lif <InterCluster_LIF-A> –vserver <AdminSVM> -destination <CloudTierのIPアドレス>
::> ping -lif <InterCluster_LIF-B> –vserver <AdminSVM> -destination <CloudTierのIPアドレス>
::> traceroute -lif <InterCluster_LIF-A> -vserver <AdminSVM> -destination <CloudTierのIPアドレス>
::> traceroute -lif <InterCluster_LIF-B> -vserver <AdminSVM> -destination <CloudTierのIPアドレス>
##2.4. FabricPool設定
実際の設定コマンドを順に記載しますが、(2)の手順で一度アグリゲートにバケットを登録すると後で解除するにはアグリゲートを壊す必要があるため、以下の(1)の操作が終わって(2)を行う前に手順の「2.5. 簡易性能テスト」を行うことをおすすめします。
(1) オブジェクトストレージのクラスタへの登録
::> storage aggregate object-store config show
::> storage aggregate object-store config create -object-store-name <CloudTier名(=任意の文字列)> -provider-type SGWS -server <CloudTierのFQDN> -is-ssl-enabled true -port 443 -container-name <手動作成したバケット名> -ipspace Default -use-http-proxy false -access-key <ACCESS_KEY> -secret-password <SECRET_ACCESS_KEY> -is-certificate-validation-enabled false
(2) アグリゲートとオブジェクトストレージの紐づけ
::> storage aggregate object-store attach -aggregate <アグリゲート名> -object-store-name <CloudTier名(前の手順で付けたobject-store-name)> -allow-flexgroup false
::> storage aggregate object-store show
(3) FlexVolumeの階層化をONにする設定 (これを設定しないとnone(=OFF)の状態です。)
::> volume modify -vserver <SVM名> -volume <対象Volume名> -tiering-policy auto
::> volume object-store tiering show <---ONTAP9.8以降で追加されました
###(1) オブジェクトストレージのクラスタへの登録
::> storage aggregate object-store config create
アグリゲートのFabricPool関連の各種オプションの説明は以下に記載があります。
(ONTAP9.8マニュアル)
https://docs.netapp.com/ontap-9/index.jsp?topic=%2Fcom.netapp.doc.dot-cm-cmpr-980%2Fstorage__aggregate__object-store__config__create.html
storage aggregate object-store config create
で-provider-typeはAWS_S3, Azure_Cloud, SGWS, IBM_COS, AliCloud, GoogleCloud, ONTAP_S3, 等を指定できますが、SGWSとONTAP_S3以外はFabricPoolライセンスを入力しないとCLIの引数の候補が表示されません。また、S3互換ストレージ(Ceph, EMC ECS, Scality, Cloudian等)を使う場合には、S3_Compatible
を指定します。
ise-select::> storage aggregate object-store config create -object-store-name aaaa -server aaa.bbb.com -container-name bucket -provider-type ?
AWS_S3 AWS S3
SGWS StorageGRID Webscale
Azure_Cloud Microsoft Azure Cloud
S3_Compatible S3 Compatible
IBM_COS IBM Cloud Object Storage
AliCloud Alibaba Cloud Object Storage Service
GoogleCloud Google Cloud Storage
ONTAP_S3 ONTAP S3
-server <CloudTierのFQDN>
ではONTAPにオブジェクトストレージのFQDNを指定していますが、ONTAP9.7P3以降はさらに追加の-url-style
引数でオブジェクトストレージ側の仕様に合わせて以下の2種類を選べるようになっています。(指定をしなければpath-styleがデフォルト。)
ise-select::> storage aggregate object-store config create -object-store-name aaaa -server aaa.bbb.com -container-name bucket -provider-type S3_Compatible -url-style ?
path-style
virtual-hosted-style
設定例) NTT Communications社のWasabiオブジェクトストレージを登録する場合
ise-select::> storage aggregate object-store config create -object-store-name NTTCOM_WASABI -provider-type S3_Compatible -server s3.ap-northeast-1.wasabisys.com -is-ssl-enabled true -port 443 -container-name bucket01 -ipspace Default -use-http-proxy false -access-key ******************** -secret-password **************************************** -is-certificate-validation-enabled false
Warning: Object store provider type "S3_Compatible" is a third party Object Store Service. NetApp does not support nor will be liable
for any issues arising from any third party Object Store Service, specifically where it does not have agreed support
arrangements with the third party with whom the product originated. It is acknowledged and agreed that NetApp shall not be
liable for any associated damage or otherwise be required to provide support on that third party product.
Do you want to continue? {y|n}: y
Warning: Disabling certificate validation prevents verification of identities of an object store server.
Do you want to continue? {y|n}: y
設定例) 設定結果の確認
ise-select::> object-store config show -object-store-name NTTCOM_WASABI
(storage aggregate object-store config show)
Object Store Configuration Name: NTTCOM_WASABI
UUID of the Object Store Configuration: 67e9a794-96b5-11eb-b63c-00a0b8e196af
Type of the Object Store Provider: S3_Compatible
Authentication Used to Access the Object Store: key
URL to Request Temporary Credentials for C2S Account: -
Fully Qualified Domain Name of the Object Store Server: s3.ap-northeast-1.wasabisys.com
Is SSL/TLS Enabled: true
Port Number of the Object Store: 443
Data Bucket/Container Name: bucket01
Access Key ID for S3 Compatible Provider Types: ********************
Azure Account: -
IPspace to Use in Order to Reach the Object Store: Default
IAM Role for AWS Cloud Volumes ONTAP: -
Is SSL/TLS Certificate Validation Enabled: false
Use HTTP Proxy: false
The Name of the Cluster to which the Configuration Belongs: ise-select
URL Style Used to Access S3 Bucket: path-style
###(2) アグリゲートとオブジェクトストレージの紐づけ
::> storage aggregate object-store attach -aggregate コマンド
(1)の作業はクラスタにオブジェクトストレージの定義を設定しました。しかしそのオブジェクトストレージがどのアグリゲートのデータの階層化を受けるかはまだ決まっていません。そこでアグリゲートとオブジェクトストレージを紐づける必要があります。
このコマンドは以下のマニュアル(9.8)をみても、引数は少ないので迷わず設定できるかと思います。
https://docs.netapp.com/ontap-9/topic/com.netapp.doc.dot-cm-cmpr-980/storage__aggregate__object-store__attach.html
1点だけ注意としては、一度アグリゲートに割り当てたオブジェクトストレージは割り当て解除ができません。(アグリゲートを壊すことで外すことはできます。)
余談ですが、もしできるだけクラウドコストを下げるためにオブジェクトストレージにデータを送信したくない場合は、上記設定を行った後にスレッシュホールドを変更することも可能です。
::> set advanced
::> storage aggregate object-store modify -aggregate <アグリゲート名> -tiering-fullness-threshold <数字>
デフォルトではアグリゲートの使用率が50%を超えないとクラウドに階層化しません。ローカルディスクが空いているのにクラウドを使うのは無駄だからです。この数値を70や80に増やすことで、階層化が行われ始めるタイミングを遅くできます。しかしこの値を大きくしすぎるとオンプレミス側で急激な書き込みがあった場合にDISK FULLになるので、過去1か月間のデータ増加率などを確認しながら設定をチューニングしてみてください。
###(3) FlexVolumeの階層化をONにする設定 (これを設定しないとnone(=OFF)の状態です。)
アグリゲートにオブジェクトストレージを割り当てても、まだ階層化は行われません。FabricPoolの階層化はFlexVolume単位でON/OFFできます。この変更はFlexVolumeのオプションを指定することで制御します。
FlexVolumeのFabricPool関連の各種オプションの説明は以下です。
(ONTAP9.8マニュアル)
http://docs.netapp.com/ontap-9/topic/com.netapp.doc.dot-cm-cmpr-980/volume__modify.html
-tiering-policy {snapshot-only|auto|none|all}
-cloud-retrieval-policy {default|on-read|never|promote} <--ONTAP9.8以降。advanced権限が必要
-tiering-minimum-cooling-days {2..183}
-tiering-object-tags , ...
詳細は上記マニュアルに記載されているので、ご確認ください。
最低限、-tiering-policy
をautoかsnapshot-onlyにして、-tiering-minimum-cooling-days
を最小の2日にすると、その期間アクセスのない4Kブロック(ファイル単位ではなくブロック単位です)は1000個まとめて1つのオブジェクトとしてオブジェクトストレージに格納されます。
##2.5. 簡易性能テスト
以下のコマンドを実行すると、1-2分かけてオブジェクトストレージにPUT/GETを繰り返します。object-store profiler showを何度か実行して、途中経過を確認してみてください。
このコマンドは2.4.の手順の(1)が終わった後に実行できるので、次の(2)のアグリゲートへの紐づけをする前にテストすることをお勧めします。(オブジェクトストレージを外すためにアグリゲートを壊さなくても良いように・・・。)
SR-A200-03::*> set advanced
SR-A200-03::*> storage aggregate object-store profiler start -object-store-name <CloudTier名(=任意の文字列)> -node SR-A200-03-01
SR-A200-03::*> storage aggregate object-store profiler show
Object store config name: sgws_985
Node name: SR-A200-03-01
Status: Done
Start time: 11/19/2019 18:06:25
Op Size Total Failed Latency(ms) Throughput
min max avg
-------------------------------------------------------------------------------
PUT 4MB 1137 0 1112 7391 2677 73.98MB
GET 4KB 35836 0 88 1398 333 3.08MB
GET 8KB 35192 0 155 1408 753 6.00MB
GET 32KB 30038 0 81 2123 1400 20.21MB
GET 256KB 12173 0 347 9038 2313 65.47MB
5 entries were displayed.
ここでFailedが多発する、もしくはスループットが途中経路の回線速度に比べて極端に低い場合は実用に耐えられない場合があるので、実運用を始める前に原因を調査して安定してオブジェクトストレージと通信できるようにすることを推奨します。
オブジェクトストレージ側でTCPコネクション数の制限をかけている場合は、上記テストでFailedが多発することがあります。1つのソースIPからオブジェクトストレージに何本のTCPコネクションを確立できるのか、クラウド側の制限を確認してみてください。
注意:
ここでのテスト結果と実際のFabricPoolの性能は異なります。特にクラウドへのPUTに関しては、FAS/AFFコントローラのCPU負荷が高くなると自動でコントローラ単位で帯域制限がかかり、ユーザI/Oなどを優先するようになっています。
##2.6. 各種運用コマンド
###Aggregateコマンド
::*> storage aggregate object-store show –aggregate *
(storage aggregate object-store show)
Aggregate Object Store Name Availability Mirror Type
-------------- ----------------- ------------- -----------
aggr1 sgws_001 available primary
::> storage aggregate object-store show-space –aggregate *
License
Aggregate Object Store Name Provider Type Used Space Space Used%
------------ ----------------- ------------- ---------- ------------
aggr1 aws_bucket AWS_S3 423.3GB 41%
::*> node run –node <ノード名> aggr status -v
↑「tier_unavailable」となっていないことを確認。
::*> aggr show-space
Aggregate : aggr1
Performance Tier
Feature Used Used%
-------------------------------- ---------- ------
Volume Footprints 6.53TB 49%
Aggregate Metadata 0B 0%
Snapshot Reserve 0B 0%
Total Used 5.30TB 40%
Total Physical Used 5.24TB 39%
Aggregate : aggr1
Object Store: SGWS-FabricPool
Feature Used Used%
-------------------------------- ---------- ------
Referenced Capacity 2.96TB -
Metadata 0B -
Unreclaimed Space 20.08MB -
Space Saved by Storage Efficiency 356.8GB -
Total Physical Used 2.61TB -
↑ 物理的に消費しているのが2.61TB。
Performance Tierから参照されているデータ量は2.96TB
=356.8GBはPerformance Tier側から複数のブロックがクラウド上のデータを参照している。(オンプレ側で重複排除が効いたデータがコールドと判定され、クラウドに移動している。)
###FlexVolume系のコマンド
::> volume object-store tiering show <---ONTAP9.8以降
Policy
Vserver Volume Aggregate State %Complete Tiering CloudRetrieve LastStatus
------- ------ --------- -------- --------- --------- ------------- ----------
vs1 vol aggr1 waiting - snapshot-only
default completed
::> volume show-footprint
Vserver : svm1
Volume : volume_fabricpool_on
Feature Used Used%
-------------------------------- ---------- -----
Volume Data Footprint 364.9GB 2%
Footprint in Performance Tier 7.01GB 2%
Footprint in sgws_304 360.0GB 98%
Volume Guarantee 0B 0%
Flexible Volume Metadata 2.09GB 0%
Deduplication 2.12GB 0%
Delayed Frees 2.11GB 0%
Total Footprint 371.2GB 2%
###その他コマンド
::*> event log show -event *object.store.full*
Time Node Severity Event
------------------- ---------------- ------------- ---------------------------
7/28/2019 18:01:15 cluster-01 ALERT object.store.full: Failed to write to object store sgws_985 because it is out of space.
::*> statistics show -object wafl_comp_aggr_bin -counter cloud_bin_operation –raw
Object: wafl_comp_aggr_bin
Instance: aggr1_bin_1
Start-time: 11/21/2018 11:00:50
End-time: 11/21/2018 11:00:50
Scope: anilt-vsim1
Counter Value
-------------------------------- --------------------------------
cloud_bin_operation -
GET 21271
PUT 570
DELETE 274
##2.7. トラブルシュートのログ
基本的には以下のevent log showで概要がわかりますが、
::> event log show –node * –message-name *
根が深い場合やもっとオブジェクトストレージからの応答を確認したい場合は、以下の方法でmgwd.logとsktrace.logも確認してみてください。
ブラウザで以下にアクセスし、クラスタ管理者でログインすると、
https://クラスタ管理IP/spi/
ノード単位でlogs -> mlog下にログが格納されているのでそのままローカルにログファイルをダウンロードできます。
#3. 関連情報
- 富士通 ETERNUS AX/HXのFabricPool設定マニュアル
https://www.fujitsu.com/downloads/JP/jstrg/manual/abhb_axhx/p3ag-5662.pdf
FJCLOUD-Oのオブジェクトストレージに階層化する場合はテクニックが必要なので、製品マニュアルとサポートページをご確認ください。(Tipsが載ったサイトを見つけたら、リンクを追記します。) - NetApp社のFabricPoolのテクニカルレポート
https://www.netapp.com/pdf.html?item=/media/17239-tr4598pdf.pdf - <追記中>
※ Proxyを経由したFabricPool設定は少し長くなるので別記事にします。
SoftBank C&S社のブログ