さいきょうのクラウドストレージを Amazon FSx for NetApp ONTAP + Nextcloud で作る！（その4）

# はじめに
この記事は、NetApp のストレージ OS である ONTAP の機能を活用して、
自前のクラウドストレージを構築する為のアイディア紹介と手順のメモです。

前回までの記事で、AWS 上に Nextcloud + Amazon FSx for NetApp ONTAP (以下 FSxN) の環境を構築しつつ、ファイルサーバーとしても並行利用できる環境の作り方を取り上げました。

↓シリーズの過去記事はこちら↓
[「さいきょうのクラウドストレージを Amazon FSx for NetApp ONTAP + Nextcloud で作る！（その1）」](https://qiita.com/takuo_yamazaki/items/0e8aff7549fc54a156bd)
[「さいきょうのクラウドストレージを Amazon FSx for NetApp ONTAP + Nextcloud で作る！（その2）」](https://qiita.com/takuo_yamazaki/items/821acb308594d7df6a37)
[「さいきょうのクラウドストレージを Amazon FSx for NetApp ONTAP + Nextcloud で作る！（その3）」](https://qiita.com/takuo_yamazaki/items/dc57c582027f87b093b0)

クラウドへファイルサーバーを移行すると、自社の専用線等の回線帯域や利用料が課題となってくるかもしれません。
この課題を解消し、レスポンス向上とトラフィック課金削減を実現できないかと、構成を考えてみました。

# 構成概要
AWS の FSxN 上にデータの原本置き場 (origin) を作り、オンプレ側ではキャッシュされたデータだけをを持ちます。
この仕組みをストレージ OS ONTAP の「FlexCache」という機能で構築します。

最終構成はこのようなイメージになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2815139/16f8679d-b4bc-f029-e119-8413c20e86d8.png)

オンプレからアクセスされるデータはオンプレ側ストレージのキャッシュ内に溜め込まれます。
頻繁にアクセスされるデータはクラウドからの読み出しが軽減されます。
読み出し速度の向上に加えて、データの取り出しに伴う課金を減らす効果が期待できます。

キャッシュなので、origin よりも小さい容量で構成可能です。
アクセスは通常の SMB や NFS と変わりありません。クライアント側は特殊な設定は不要です。

## 前提条件
1. オンプレと AWS の VPC は、VPN や DirectConnect で接続し、ストレージ同士が end-to-end で通信できるネットワークが必要です。
※ NAT や proxy が必要な環境では利用できません。

2. キャッシュ用ストレージ
「ONTAP」が稼働するストレージが必要です。
対象とできるのは以下の通りです。
* NetApp FAS シリーズ、AFF シリーズ
ストレージ OS「ONTAP」を搭載したハードウェアアプライアンス製品です。
* ONTAP Select
仮想アプライアンス版。VMware vSphere 上で動作します。
* Cloud Volumes ONTAP
クラウド版。AWS、 Google Cloud Plattform、Microsoft Azure 上にインスタンスとして立てられます。。
* Amazon FSx for NetApp ONTAP
このシリーズで紹介している、サービス版です。

今回は検証目的なので、オンプレ環境に「ONTAP Select」の試用版を用いて構築してみました。


# 手順
今回記事では、既に Nextcloud 環境、データソースである FSxN が構築済みという前提で、キャッシュ設定に絞った手順を掲載します。

## オンプレ側 ONTAP の準備

### ONTAP Select (試用版) の入手
https://mysupport.netapp.com/site/downloads/evaluation/ontap-select
※ アクセスの際に NetApp アカウントが必要。
無い場合は、下記より作成。
https://mysupport.netapp.com/eservice/public/community.do


### ONTAP Select を vSPhere にデプロイ
下記手順を参考にして、vSphere 上に仮想マシンを作成します。
[https://library.netapp.com/ecm/ecm_download_file/ECMLP2861375](https://library.netapp.com/ecm/ecm_download_file/ECMLP2861375)
(いずれ機会があれば、ONTAP Select の構築手順のまとめも書いてみたいと思います)

起動後、ssh でログインします。

起動直後は記憶領域 (aggregate) がアサインされていないので、これを設定します。
```
onprem-ontap::> aggregate create -aggregate aggr1 -diskcount 1
```

### クラスター間通信用インターフェースの設定
ONTAP のクラスター間通信 (InterCluster) 用の論理インターフェース (Logical InterFace = LIF) を用いて通信を行います。

InterCluster 用の LIF は、FSxN では自動で作成されています。
オンプレ側はデフォルトでは作成されないので、新規で作成します。
```
onprem-ontap::> network interface create -vserver onprem-ontap -lif InterCluster_lif1 -service-policy default-intercluster -address 172.16.1.142 -netmask-length 24 -home-node node1 -home-port e0a
```
※ HA構成の場合、ノード毎に InterCluster Lif を作成します


### ストレージ仮想マシンの作成
ストレージ仮想マシンを作成します。
名称は、既存環境と異なるように一意で付ける方が良いでしょう。
```
onprem-ontap::> vserver create -vserver cache-svm
```

今回手順では、SMB/NFS 用途で単一のストレージ仮想マシンとしています。

### ストレージ仮想マシン用管理インターフェースの追加
```
onprem-ontap::> network interface create -vserver cache-svm -lif mgmt_lif1 -service-policy default-management -address 172.16.1.144 -netmask-length 24 -home-node node1 -home-port e0a -auto-revert true
```

### NFS/SMB プロトコル用インターフェースの追加
```
onprem-ontap::> network interface create -vserver cache-svm -lif data_lif1 -service-policy default-data-files -address 172.16.1.145 -netmask-length 24 -home-node node1 -home-port e0a -auto-revert true
```

### ルーティング設定
デフォルトゲートウェイの指定をします。
必要に応じて、AWS 側 VPC の subnet への静的経路も指定します。
```
onprem-ontap::> network route create -vserver onprem-ontap -destination 0.0.0.0/0 -gateway 172.16.0.1
onprem-ontap::> network route create -vserver onprem-ontap -destination 172.21.0.0/16 -gateway 172.16.1.250
onprem-ontap::> network route create -vserver cache-svm -destination 0.0.0.0/0 -gateway 172.16.0.1
```

### DNS 設定
```
onprem-ontap::> vserver services name-service dns create -vserver cache-svm -domains lab.local -name-servers 172.16.1.10
```

### AD への参加
キャッシュ元となるストレージ仮想マシンと同じ AD に参加させます。
コマンドが通ると、AD の管理ユーザー (例では Administrator) のパスワードを求められます。
```
onprem-ontap::> vserver cifs create -vserver cache-svm -cifs-server CACHE-SVM -domain lab.local 

In order to create an Active Directory machine account for the CIFS server, you must supply the name and password of a
Windows account with sufficient privileges to add computers to the "CN=Computers" container within the "LAB.LOCAL"
domain.

Enter the user name: Administrator

Enter the password:
```
※ AD と ONTAP とで時間がずれていると AD 参加に失敗します。
NTP で時刻同期出来るようにしておくとよいでしょう。
```
onprem-ontap::> cluster time-service ntp server create -server ntp.nict.jp
```

## 「FlexCache」の環境設定

### cluster peer 作成
InterConnect LIF を介して、クラスター (FSxNの場合は、ファイルシステム と表記されています）同士を通信許可させます。
peer-addrs は、FSxN 側のクラスタ間通信用ネットワークの IP アドレスです。
```
onprem-ontap::> cluster peer create -peer-addrs 172.20.1.100 -generate-passphrase true

Notice:
        Passphrase: DTGTup3lPzN9wjMXXXXOvS7q
        Expiration Time: 10/11/2022 17:44:36 +09:00
        Initial Allowed Vserver Peers: -
        Intercluster LIF IP: 172.16.1.144
        Peer Cluster Name: onprem-ontap

        Warning: make a note of the passphrase - it cannot be displayed again.
```
プロンプトに表示される「Passphrase」は、origin 側の設定で必要となりますので、控えておきます。


origin 側の FSxN でも、コマンドを用いて peer の設定をします。
ここで、先程控えた Passphrase の入力が必要になります。
```
fsxn::> cluster peer create -peer-addrs 172.16.1.144

Notice: Use a generated passphrase or choose a passphrase of 8 or more characters. To ensure the authenticity of the
        peering relationship, use a phrase or sequence of characters that would be hard to guess.

Enter the passphrase:
Confirm the passphrase:
```

### svm  peer 作成
ストレージ仮想マシン (SVM) に対して、ストレージ間通信を許可する設定を追加します。

```
onprem-ontap::> vserver peer create -vserver cache-svm -peer-vserver svm1 -applications flexcache -peer-cluster fsxn
	
Info: [Job 104] 'vserver peer create' job queued
```	

### Peer 状態の確認
```
onprem-ontap::> vserver peer show
            Peer        Peer                           Peering        Remote
Vserver     Vserver     State        Peer Cluster      Applications   Vserver
----------- ----------- ------------ ----------------- -------------- ---------
cache-svm   svm1        initiated    fsxn              flexcache      svm1
1 entries were displayed.
```

origin 側で peer を許可

```
fsxn::> vserver peer accept -vserver svm1 -peer-vserver cache-svm
```
[peer 許可されると、peered に変化]

```
fsxn::> vserver peer show
            Peer        Peer                           Peering        Remote
Vserver     Vserver     State        Peer Cluster      Applications   Vserver
----------- ----------- ------------ ----------------- -------------- ---------
svm1        cache-svm   peered       onprem-ontap      flexcache      cache-svm
```

### キャッシュボリュームの作成
ストレージ間の設定が完了したら、オンプレ側にキャッシュ用のボリュームを作成します。

```
::> flexcache create -vserver cache-svm -volume pub_cache -origin-vserver svm1 -origin-volume pub -size 16g  -junction-path /user_cache -aggr-list aggr1

[Job 60] Job is queued: Create FlexCache volume pub_cache..
```

これでキャッシュボリュームが作成されました。
状態を確認します。

```
onprem-ontap::> volume flexcache show
Vserver Volume      Size       Origin-Vserver Origin-Volume Origin-Cluster
------- ----------- ---------- -------------- ------------- --------------
cache-svm
        pub_cache   16GB       svm1           pub           fsxn
```
できましたね！


# 使ってみる
## キャッシュボリュームに、Windows 端末等からアクセス
キャッシュボリュームを SMB 共有してあげると、Windows 端末等からアクセスが出来るようになります。
```
onprem-ontap::> cifs share create -share-name pub_cache -path /pub_cache -vserver cache-svm
```

フォルダ構造やファイル一覧は常に同期されており、表示はできます。

データの本体は、read した時に初めて origin 側から取ってきます。
初回の read 時は、回線の帯域に応じて時間がかかります。
二回目以降の read は、キャッシュから読み取りますので高速になります。

書き込みは、キャッシュを飛び越えてリモート側へ直接書き込みます。

## キャッシュボリュームに、Nextcloud 経由でアクセス。
キャッシュボリュームは、NFS マウントや外部ストレージとして Nextcloud から参照する事が可能です。

設定上特殊な点はなく、通常の独立した NFS / SMB サーバーと同じ扱いで設定して問題ありません。
Nextcloud の構成手順は、通常の方法と全く同等ですので割愛します。
と言えるくらいあっさりと使うことが出来ました。


# さいごに
AWS FSxN にファイルサーバーを立てて、そのキャッシュをオンプレ環境に配置することで
ハイブリッドなクラウドストレージを構築する事ができました。

origin がクラウド、cache はオンプレという想定での手順を紹介しましたが、逆の構成であってもちゃんとできます。

オンプレのファイルサーバーを origin にして、FSxN をキャッシュにすれば

* 外部へのサーバー公開は出来ない
* インターネット回線が細すぎる

そんな環境でも、モバイル端末等からスムーズに AWS 経由でアクセスが出来るようになります。


ということで、4回に分けて書いた  FSxN + Nextcloud ネタは一旦これで終了です。