Alibaba Cloud NAS を試す

この記事は<A HREF="https://qiita.com/advent-calendar/2018/alibabacloud" target=_blank>Alibaba Cloud Advent Calendar 2018</A> 最終日の投稿です。

# 概要
密結合上等。NFS大好きzakkyです。
Alibaba CloudにもマネージドNFSサービスがあります。その名もNAS。

以前、AWSのマネージドNFSサービスである<A href="https://qiita.com/zakky/items/08e6aa876f24bda69eb1" target=_blank>Amazon EFSの限界を試す記事を書きました</A>。
Alibaba Cloud NASでも同じ事を試みます。
という意気込みでしたが、時間課金で任意の性能を出すパフォーマンスタイプ（≒EFSプロビジョンドスループット）が未実装で限界を試すことはできませんでした。
今回はアリババクラウドのLinuxであるAliyun Linuxで軽く使ってみることにします。


# Alibaba Cloud NASとは
マネージドNFSサービスとSMBサービスです。
ここでは利用開始にあたり感じたことを書き綴ります。サービスの詳細は公式サイトへ。
https://jp.alibabacloud.com/product/nas

## NFSはNFSv3,NFSv4両対応
NFSv3に対応しているのはすばらしいですね。NFSv3ならばLinuxとウィンドウズサーバの両方から標準でアクセスできます。

## NFSかSMBかは選択制
SMB（ウィンドウズファイル共有）とNFS（v3とv4）に対応していますが、
残念ながら同時アクセスはできずファイルシステム作成時にどちらを使うか選択しなければなりません。同時アクセスできれば完璧だったのですが。。
しかしNFSがNFSv3対応なのでLinuxとWindows両方からアクセスしたい場合はNFSを選択すれば良いです。

## ２つのパフォーマンスモード

- 容量タイプ
    - ファイルシステムの容量に応じて性能が比例する標準タイプ
    - バーストクレジットの概念は無く、性能は常に容量比例
    - 最大容量10PB
- パフォーマンスタイプ（未実装）
    - いわゆるプロビジョンドスループット
    - 最大容量1PB
    - 現在は未実装で利用できませんでした

最大容量ではAmazon EFSの8EBに及ばないものの１ファイルシステム1PBもあれば十分でしょう。
１リージョンあたりファイルシステムを１０個作れますし。（上限緩和可能かは未確認）

## 最大転送速度200Gbps
EFSが最大24Gbps(3GiB/秒)である事から、これがどれだけすごい性能なのかを感じ取れます。
もっとも、この性能を出すのにどれだけの容量を契約しないといけないのか考えると怖くなりますが。
低レイテンシ1msというのも魅力です。
現在はスループットを指定できないのが残念です。
パフォーマンスタイプの登場が待たれます。

## ルートスカッシュ対応のアクセス制御
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/606533fb-6dd1-64eb-514c-3f3fc8949ecb.png)
ファイルやディレクトリのパーミッションだけでなく、接続元IPアドレスによって読み取り専用の制限をかけたり、ルートスカッシュでrootアクセスを制限することができます。
EFSでアクセス制御に悩んだ人は多いはず。後発製品だけあって競合他社を良く研究していますね。

## 東京リージョン未対応
残念ながら、まだ東京リージョンでは使えません。
中国国内（青島・杭州・北京・上海・深圳）とシンガポールリージョンのみです。

## リージョンにより価格が大きく異なる
中国国内リージョンは５リージョン同一価格でリーズナブル。
しかしシンガポールリージョンでは中国国内の２倍以上と高額です。
ご利用は計画的に。

さて、理解したところで実際に使ってみましょう。


# Alibaba Cloud NASを使うには
アリババクラウドの１サービスですから他のサービスと同様にコンソールからNASを選択します。ところが…
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/5d2fa974-91f9-9b36-cf0d-14988f5347f4.png)
有効化？
はて。。とりあえずクリックすると「サービスの有効化」なるページが。
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/17deecc8-c815-195f-2cd3-7d42de50f3f8.png)
どうやら利用規約を読んで同意しなければならないようです。
サービスの１つなのに何故かNASは個別の利用規約があるようです。
利用規約を開くと（日本サイトでは）SBクラウドさんによる規約が表示されます。
これに同意する手順を踏まないと利用することができないのです。

そして有効化すると
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/b576fc51-7da2-6e0e-a839-92ad8c461205.png)
いきなり `発注は完了しました` と出て焦ります。
コンソールへ戻り、再びNASを選択するとNASコンソールが表示されます。
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/629a8558-fd31-57bc-50ca-6120e101b0b6.png)
ファイルシステムはまだ何も存在しません。
課金されていないことが確認できました。ふぅ。
画面右上の水色のボタン `ファイルシステムの作成` をクリックします。 

![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/8d7c084a-8d89-fccb-192e-5c70685fc440.png)
順番に選択していきます。
「ゾーン」の選択で中国南部リージョン（深圳）には５つのアベイラビリティゾーンがありますが、NAS作成の選択肢には何故かAとDの２つしか存在しません。
同一リージョン内であればシームレスにアクセスでき、AZ間通信料は請求されないのであまり気にせず適当に選択しましょう。
そしてOKボタンを押すと。。

![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/f9ffb69f-8a27-3443-3870-212a155d8ab5.png)
えぇぇぇ！？
なんと従量課金で作成できないようです。
クリックして移動すると

![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/0fafbe39-384c-7b3d-36d9-d5c792eb6bb5.png)
NAS ストレージパッケージの購入画面になります。
どうやら月額単位での契約しかできないようです。
10TBでEFSと比較してみたかったのですが高額で手が出ないので、今回は1TBを選択します。

ちなみに10TBを選択すると
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/9385b01c-8878-5d88-a2f4-297ae49c20dc.png)
こちらのお値段です
＞＜

閑話休題、「今すぐ購入」をクリックすると確認画面に進みます。
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/ec98eea7-e529-894a-f583-8a61895b3709.png)
注文内容の確認をして「支払い」をクリックすると

![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/7c374c93-a636-2943-7034-5f4d2c2e0e8d.png)
購入が完了します。コンソールへ戻りましょう。

![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/06a12292-bbc1-b023-1fac-44eebc701c80.png)
ファイルシステムリストが表示されていますね。
購入と同時にファイルシステムが作成されます。
ただしこのままではサーバからマウントできないので右側の「マウントポイントの追加」をクリックします。

![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/142a8245-1e4d-ccc8-e571-e72655df8cb6.png)
VPCの中であれば権限グループはひとまずデフォルトで問題無いので今回はこれを選択します。
「OK」をクリックするとマウントポイントの追加が完了します。

マウントポイントの確認
ファイルシステムリスト画面に戻るので、左側のファイルシステムID（画面例では2eで始まる10桁の文字列）をクリックすると情報が表示されます。
![圖片.png](https://qiita-image-store.s3.amazonaws.com/0/96018/7333edfe-d3bd-15e4-cd7a-6fe7b48d6894.png)
`マウントアドレス` へマウスカーソルを近づけると、Linuxでのマウント方法が表示されます。
このまま打ち込めば基本的に利用可能です。


# Aliyun Linux ではそのままでは動かなかった

アリババクラウドのLinuxであるAliyun Linuxで早速試します。

```bash:コマンド:
$ sudo mount -t nfs -o vers=3,nolock,proto=tcp 2e77777777-bje98.cn-shenzhen.nas.aliyuncs.com:/ /mnt
```

```text:結果(例):
mount: wrong fs type, bad option, bad superblock on 2e77777777-bje98.cn-shenzhen.nas.aliyuncs.com:/,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
$
```
NFSv3もv4も同じエラーで失敗します。
どうやら標準ではNFS非対応なようです。NFS接続ツールを導入します。

```bash:コマンド:
$ sudo yum -y install nfs-utils
```

```text:結果(例):
読み込んだプラグイン:fastestmirror, langpacks
(snip)
インストール:
  nfs-utils.x86_64 1:1.3.0-0.33.4.al7

依存性関連をインストールしました:
  gssproxy.x86_64 0:0.4.1-13.4.al7
  keyutils.x86_64 0:1.5.8-3.1.al7
  libbasicobjects.x86_64 0:0.1.1-27.4.al7
  libcollection.x86_64 0:0.6.2-27.4.al7
  libevent.x86_64 0:2.0.21-4.1.al7
  libini_config.x86_64 0:1.3.0-27.4.al7
  libnfsidmap.x86_64 0:0.25-15.4.al7
  libpath_utils.x86_64 0:0.2.1-27.4.al7
  libref_array.x86_64 0:0.1.5-27.4.al7
  libtalloc.x86_64 0:2.1.6-1.4.al7
  libtevent.x86_64 0:0.9.28-1.4.al7
  libverto-tevent.x86_64 0:0.2.5-4.1.al7

完了しました!
```

そして再びコマンドを実行すると

```
$ sudo mount -t nfs -o vers=3,nolock,proto=tcp 2e77777777-bje98.cn-shenzhen.nas.aliyuncs.com:/ /mnt
$ df -h /mnt/
ファイルシス                                    サイズ  使用  残り 使用% マウント位置
2e3384a0dd-bje98.cn-shenzhen.nas.aliyuncs.com:/    10P     0   10P    0% /mnt
$ 
```
成功！
空き容量が10PBとか表示されていますが、契約容量を超えて使用すると従量課金で費用が請求されます。


# 性能を試す

dd コマンドにより書き込み性能を測定します。

```
# dd if=/dev/zero of=/mnt/hoge bs=1M count=10K conv=fsync
10240+0 レコード入力
10240+0 レコード出力
10737418240 バイト (11 GB) コピーされました、 81.0375 秒、 132 MB/秒
# dd if=/dev/zero of=/mnt/hoge2 bs=1M count=10K conv=fsync
10240+0 レコード入力
10240+0 レコード出力
10737418240 バイト (11 GB) コピーされました、 81.0441 秒、 132 MB/秒
# dd if=/dev/zero of=/mnt/hoge3 bs=1M count=10K conv=fsync
10240+0 レコード入力
10240+0 レコード出力
10737418240 バイト (11 GB) コピーされました、 81.0575 秒、 132 MB/秒
# 
# dd if=/dev/zero of=/mnt/hogehoge bs=1M count=100K conv=fsync
102400+0 レコード入力
102400+0 レコード出力
107374182400 バイト (107 GB) コピーされました、 815.421 秒、 132 MB/秒
# 
```
契約容量1TBだと、ほぼ132MB/秒で固定のようです。
10GB書こうと100GB書こうと、上記のとおり結果は同じでした。


```
# dd if=/dev/zero of=/mnt/hogehoge2 bs=1M count=100K conv=fsync &
[1] 1786
# dd if=/dev/zero of=/mnt/hogehoge3 bs=1M count=100K conv=fsync &
[2] 1787
# 
102400+0 レコード入力
102400+0 レコード出力
107374182400 バイト (107 GB) コピーされました、 1609.15 秒、 66.7 MB/秒
102400+0 レコード入力
102400+0 レコード出力
107374182400 バイト (107 GB) コピーされました、 1625.34 秒、 66.1 MB/秒
```
同時に２ファイル書き込む事も試しましたが66MB/秒ずつでやはり132MB/秒。
契約容量による性能制限に達し性能は常に固定でした。


# まとめ

- スループットは常に固定（1TBで132MB/秒）
- 現在は容量タイプの月額契約のみで時間課金での利用不可
- パフォーマンスタイプは未実装

パフォーマンスタイプの時間課金が実装されたら限界性能に挑戦してみたいと思います。