こんにちは、キクです。
みなさんはNetAppを使って何かしたことがありますか?
僕は最近「NetAppで作成したボリュームを仮想マシンからマウントさせる」ことを目的とした作業に携わっていました。
「NFSクライアント側としは単にボリュームをマウントしているだけだけど、NetApp側ではどのような設定をしているのか?」
という部分において結構勉強になりました。
今回はそんな『NetAppで作成したボリュームとNFSクライアントの関係性』がテーマです。
細かな詳細手順というよりは、「どんな要素があるか」「どんな関係性なのか」ということを主軸に備忘録も含めた記事にしていこうと思います。
NetAppもいろんな機能があります。
僕自身も使い始めの頃はなかなかイメージしづらい部分も多かったです。
本記事ではシンプルな図も作成してみたので、読者の方が少しでもイメージしやすくなればと思います!
それでは、よろしくお願いします。
NFSクライアントがNetAppのボリュームを使うということ
まずはじめに、これからお話ししていく各要素で最終的にどんな状態になるのかについて触れていきたいと思います。
「NFSクライアントがNetAppのボリュームをマウントする」
これをすることで実現される内容を簡単に表現してしまえば、パソコンにUSBを挿して、USBにデータを書き込めるようになるのと同じことです。
読み換えると次のようになります。
「NFSクライアント(パソコン)にNetAppのボリューム(USB)をマウント(挿し込み)する」
少し身近な言葉に近づきましたね。
実はそんなことはなくて、他にもいろいろな要素を設定していくことでNFSクライアントからボリュームを使えるようになります。
ここから先の話では、NFSクライアントがボリュームをマウントするためにNetApp側で最低限必要な要素についてお話ししていきます。
SVMについて
SVMの正式名称はStorage Virtual Machineです。
その名の通りストレージの仮想マシンです。
例えば、Windowsのパソコン同士でファイルの共有を行いたい時には、「共有フォルダ」のあるパソコンにアクセスしてファイルの共有をするかと思います。
SVMはその「共有フォルダを保有しているパソコン」と考えるとイメージしやすいかと思います。
ここでSVMの作成方法の一例をご紹介します。
::> vserver create -vserver <SVM名> -ipspace <IPスペース名> -rootvolume <ルートボリューム名> -aggregate <アグリゲート名> -language <言語> -rootvolume-security-style <セキュリティ形式>
このようにしてボリュームが作成されます。
メインの部分は「vserver create」です。
しかし、上記のコマンドだとIPアドレスがありませんね。
ボリュームもありません。
これは、SVMを作っただけではまだまだ未完成であり、他にもこの先で登場するような設定が必要になることを意味しています。
LIFについて
LIFの正式名称はLogical Interfaceです。
論理的なインターフェイスになります。
LIFがどのようなものなのかを説明する前に作成するためのコマンド例をご紹介します。
::> network interface create -vserver <SVM名> -lif <LIF名> -role <ロール名> -home-node <LIFの所属先ノード> -home-port <LIFの所属先ポート> -address <IPアドレス> -netmask <ネットマスク> -failover-policy <フェイルオーバーポリシー名> -firewall-policy <ファイアウォールポリシー名> -auto-revert <フェイルバック機能の有効/>
長いですね。
しかし、今回の内容に大きく関わるのは以下の要素です。
それでは掘り下げていきましょう。
network interface create
LIFの作成を宣言するコマンドです。
補足として「network interface show」とすれば作成済みのLIF一覧が表示されます。
NetAppではこういったコマンド構成が多く「何を」「どうする」という感じで指定していきます。
今回の場合であれば「ネットワークインターフェイス(LIF)を」「作る」と指定していることになりますね。
-vserver <SVM名>
またSVMが出てきましたね。
さっきSVMを作ったのになんでまたSVMが出てくるのでしょうか?
これはSVMを作っているのではなく、LIFを所属させるSVMを指定するために実施しています。
ここで一度普通のパソコンのお話をしましょう。
僕たちが使っているパソコンにはそれぞれIPアドレスがありますよね。
WiFi以外にも、LANケーブルを挿してインターネットに接続することもあるかと思います。
そのLANケーブルを挿す差込口(ポート)が、厳密にはそれよりもさらにパソコン内部にあるNICと呼ばれるものがIPアドレスを持っています。
「このパソコンのIPアドレスはxx.xx.xx.xx」というとパソコンにIPが設定されているようですが、実際にはNICにIPが設定されているということです。
SVMがパソコンであるのに対して、LIFはNICというイメージでいいかと思います。
SVMにLIFを所属させるというのは、パソコンの中にNICがあるのと同じ状態を作っているということです。
-lif <LIF名>
これは言うまでもなく作成するLIFの名前を指定しています。
-address <IPアドレス> -netmask <ネットマスク>
出てきましたね。
ここでようやくLIFに対してIPアドレスを割り当てています。
ボリュームについて
続いてボリューム。
これはもう説明不要ですね。
ストレージ機器としてメインの部分。
NFSクライアントがマウントしようとしている対象がこのボリュームです。
ボリュームの作成コマンド例です。
::> volume create -vserver <SVM名> -volume <ボリューム名> -aggregate <アグリゲート名> -state <ボリュームステータス> -policy <エクスポートポリシー> -junction-path <ジャンクションパス> -size <サイズ>
以下の要素について少し詳しく見ていきましょう。
volume create
LIFの作成時と同様に、「ボリュームを」「作る」と指定してボリューム作成を実施しています。
-vserver <SVM名>
こちらも先ほどのLIFの例に習うと、「ボリュームを所属させるSVM」を指定しています。
ボリュームに関してもSVM単位で管理されるので、作成時にはSVMを指定する形になります。
-volume <ボリューム名>
作成するボリューム名を指定します。
-policy <エクスポートポリシー>
こちらではエクスポートポリシーというものを指定します。
このポリシーに関しては後続の項目で詳しく説明しますので、ここでは「エクスポートポリシーはボリュームに紐付く」ということだけ抑えておいていただければと思います。
-size <サイズ>
最後はボリュームのサイズを指定しています。
れによりボリュームの大きさが決まります。
エクスポートポリシーについて
続いてエクスポートポリシーについて
これについては次に登場するエクスポートルールとセットになります。
というより、エクスポートポリシーはエクスポートルールを入れるための単なる箱という感じです。
そのため作成コマンドも以下のようにシンプルです。
::> vserver export-policy create -vserver <SVM名> -policyname <エクスポートポリシー名>
エクスポートポリシーに関してもSVMに紐付くので、SVM名を指定して作成します。
上記の通り、エクスポートポリシーの割り当て先はボリュームであるため、先ほどボリュームを作成した時にエクスポートポリシーが登場したということになります。
エクスポートルールについて
エクスポートルールは簡単に言えばボリュームに対するアクセス制御の設定です。
誰をボリュームまで通すかを設定します。
厳密には「誰を」以外にもいろいろ見ていますが、大きくいえば「誰を」がメインです。
作成コマンドはこんな感じです。
::> vserver export-policy rule create -vserver <SVM名> -policyname <エクスポートポリシー名> -ruleindex <ルール番号> -protocol <ルール適用プロトコル> -clientmatch <アクセス許可対象> -rorule <読み込み専用ルール> -rwrule <読み書きルール> -anon <匿名ユーザID> -superuser <特権ユーザルール>
ここでは以下の要素について詳しく見ていきましょう。
vserver export-policy rule create
ここまでの流れと同様に「エクスポートポリシーのルールを」「作る」です。
-vserver <SVM名>
またまたSVMが登場しましたが、ここでは少しだけ意味合いが違います。
今までは「指定したSVMに作成」というニュアンスでしたが、エクスポートルールに関しては「指定したSVMが所有しているエクスポートポリシーに作成」という形になります。
あくまでもエクスポートルールの親はエクスポートポリシーです。
そしてここでは「エクスポトールール」の親である「エクスポートポリシー」の親である「SVM」を指定しているということになります。
・・・ややこしい(笑)
-policyname <エクスポートポリシー名>
上記の通り、エクスポートルールの親であるエクスポートポリシーを指定します。
1つのSVMでは複数のエクスポートポリシーを作成することができるので、しっかりと指定してあげないと「どのエクスポートポリシーにルールを作るの?」と怒られてしまいます。
-ruleindex <ルール番号>
エクスポートポリシーに作成するルール番号を指定します。
1つのエクスポートポリシーに対して複数のルールを作成することが可能で、番号の若い順からルールが適用されていく流れです。
また、このルール設定をすることでエクスポートポリシーとして完成します。
これを設定してあげないと、SVMがボリュームを持っていたとしても使用することができないという状態になってしまいます。
-clientmatch <アクセス許可対象>
エクスポートルールの中身の部分です。
僕が作業で設定していたのはIPv4のアドレスです。
例えば今回の図で言うと「192.168.1.10/32」と記載し、他のルールもクリアすることでNFSクライアントはボリュームに対してアクセスできるようになります。
逆に言えば「192.168.99.99/32」などと記載した場合には192.168.1.10はアクセスすることができないと言うことです。
このようにしてボリュームへのアクセスに制限をかけることができます。
これで一通りNFSクライアントからボリュームまでの道のりが開通しました。
おわりに
いかがでしたでしょうか。
今回はNFSクライアントがNetAppのボリュームを使えるようになるまでの概要をお話ししてきました。
NFSクライアントとボリュームだけを見ると1対1の関係ですが、実際はボリュームまでの間にたくさんの設定がありましたね。
でも、僕も実際に触っていて思ったことですが、NetAppでは比較的規則性のあるコマンドになっていたので、ある程度コマンドに慣れてくると予測も立てやすくなっていきます。
今回ご紹介した要素はNetAppの基礎的な部分ですが、おそらく根幹でもあります。
もっと詳細な設定はたくさんありますが、今回の内容をイメージとしてもてればNetAppも触りやすくなるのかなと思います。
僕自身最初はイメージもできなかったので、今回のようなシンプルな図がイメージするためのお役に立てれば嬉しいです!
本記事を最後までお読みいただき、ありがとうございました。
ではでは!