快適10GbE環境に向けて -NAS編-

こんにちは、PICMANです。

今回は10GbE対応のNASとしてQNAP TS-932Xを導入しましたので、そのセットアップとベンチマーク結果についてまとめました。ストレージ性能の測定結果をすぐに見たい方は4. ストレージ性能の測定へどうぞ。

1. QNAP TS-932Xの概要

Fig.1 買ったもの

TS-932Xは3.5インチベイ×5、2.5インチベイ×4と大容量ながらコンパクトで一般のご家庭でも手軽に導入できます。またネットワークインターフェースは1GbE×2、SFP+×2と非常に充実しています。

Fig.2 充実したNIC

CPUはAlpine AL-324になります。これはAmazonが作ったARMコアでアーキテクチャはCortex-A57、クアッドコア1.7 GHz駆動です。RAMはDDR4 SO-DIMMで2GBモデルと8GBモデルがあります。今回は2GBモデルを購入し、自分で8GBに増設しました。

余談ですが増設したDDR4 SO-DIMMの8GB RAMはM715qに入っていたSamsungのやつです。M715qはRAM16GBでは物足りなくなり16GB×2のキットを買い足しました。クライントPCにおける基本的人権はRAM16GB[要出典]なので仮想基盤には最低その2倍は必要ですね[独自研究]

用意したストレージ

今回用意したストレージは次の通りです。

  • WesternDigital Red 3TB ×2
  • Seagate IronWolf 3TB ×2
  • WesternDigital SSD Red 500G ×1
  • Crucial SSD MX500 500GB ×1

これらのうち上3点は常時稼働を前提としたNAS向けのHDD及びSSDになります。最後のSSDは普通のSSDです。

物理記憶装置の運用構成はHDD×4でRAID 6を、SSD×2でRAID 1としました。なおSSDはNASのシステムドライブとしました。

ちなみに,メーカー混在で記憶装置を用意した理由はRAIDを組んだ上で冗長性を持たせるためです。

本来RAID自体がHDDの故障による停止時間を限りなく短くするものですが、特にRAID1の様な複数のディスクに同じデータ量を同時に書き込むことを、同一ロットの同一製品に適用していれば経年劣化による故障するタイミングは同じではないかと思っています。よって複数の異なる製品を導入しています。

さてRAIDを組んでいて最も怖いのは突然の電源喪失です。ということでUPSも導入しました。

Fig.3 APC Smart-UPS 500

APC Smart-UPS 500はQNAP NASに接続することで元の電源が切断されるとその情報をNASと共有し、NASを自動的にシャットダウンすることができます。これでひとまず安心ですね!

運用方針

TS-932Xの運用方針としてはファイルサーバの機能だけを利用したいと考えています。

これまで使っていたNAS(TS-251+)にはWebサーバやらDockerやら仮想マシンやら何でもかんでもこれ一台にやらせていました。するとパフォーマンス不足に陥り物足りなくなってしまったので完全分業することにしました。

そもそも、本NASはCPUがARMアーキテクチャであり、仮想マシンはもちろんDockerもこれまで運用していたイメージをそのまま載せ換えることができません。よってTS-932Xにはファイルサーバに専念してもらい、これまで動かしていたアプリケーションは以前導入したLenovo M715qにESXiを乗せたマシンで運用しています。

2. TS-932Xのセットアップ

基本的なセットアップに関してはいろいろなところに書かれてるので詳しく書きません。こちらではストレージの設定及び旧環境をなるだけコピーするために行った設定について説明します。

2.1. 環境移行について

QNAP製品では便利なことに旧NASから新NASへHDDを載せ換えるだけで移行できる様になっています。しかし残念ながら今回のようなx86(x64)アーキテクチャのNASからARMアーキテクチャのNASへは対応してないみたいです。こちらのサイトで確認できます。

Fig.4 TS-251+ -> TS-932Xの移行可否

というわけで、新NASを通常通りセットアップした後にQNAP NASのアプリケーションであるHybrid Backup Sync(以下HBS3)を用いてデータを移行することになります。

2.2. 初期設定

まずはじめにHDDとSSDを本体にセットしましょう。最近のNASはツールレスでHDDをトレイにマウントできるので便利ですね。

次に電源やらLANやらを差し、電源ボタンを押します。起動後は通常通りadminのパスワードやらIPアドレスやらを設定します。そしていつものGUIが出てきたらSSDとHDDを使用できるように設定します。

2.3. ストレージ設定

QNAPでははじめに「ストレージプール」を作成し、その上に「ボリューム」を作成することでデータを保存できるようになっています。 「ストレージプール」 では主にRAIDといった物理ディスクの扱い方を設定します。また「ボリューム」はその名の通り論理ボリュームの作成になります。

ここで重要なのは、一番初めに作成した論理ボリュームがシステムボリュームになるということです。つまり、SSD上にシステムデータを載せたければ最初にSSDのストレージプールを作成し、すぐその上にボリュームを作成する必要があるということです。システムボリューム周りの情報はこちらのサイトさんを参考にさせていただきました。

私の環境では、構成を変えてベンチマークを取った後、最終的にFig.4のように設定しました。なおストレージプール1はHDD4台のRAID6、ストレージプール2はSSD2台のRAID1です。

Fig.4 ストレージ状況

今のところはこちらの設定で運用していますが、HDD-RAID6のボリュームはスナップショットを撮る予定もなく、空き容量警告が出るという理由だけでストレージプール1のスペースを残してます。正直このままボリュームを最大まで拡張してもいいかなと思っています。

2.4. 旧NASから引き継いだ設定

この節を用意しましたが、NASで運用させていたアプリケーションはほとんどESXi上のサーバに移してしまったので特に大きな引き継ぎ項目はなく、ユーザー設定とDBくらいになります。

2.4.1. ユーザ設定の移行

ユーザ設定は移行元のNASを開き、「コントロールパネル」の「権限設定」->「ユーザ」の画面を出します。続いてエクスポートするユーザのチェックボックスにチェックを入れて「作成」->「ユーザのインポート/エクスポート」をクリックします。

Fig.5 ユーザ移行画面1

そこで「ユーザーとユーザーグループ設定のエクスポート」のラジオボタンを選択し、次へをクリックするとユーザーデータが入ったファイルがダウンロードできます。

Fig.6 ユーザ移行画面2

ここで生成されたファイルを移行先のNASへインポートします。同様の手順でユーザの設定画面を開き、Fig.6の部分で「ユーザーとユーザーグループの設定インポート」の方(上)のラジオボタンを選び、次へをクリックするとファイルしていの画面になります。先ほどダウンロードしたファイルをアップロードすれば完了です。

2.4.2. DBの移行

QNAP NASに組み込まれているSQLサーバ機能を昔使っていたのでその中身も移行しました。移行にはphpMyAdmin上でエクスポートさせるのが良いかと思います。インストールしていない方ははじめにAppCenterからインストールしましょう。

phpMyAdminを開き、全DBにアクセス可能なユーザでログインします。「エクスポート」をクリックし、そのまま実行をクリックでsqlファイルがダウンロードできます。

Fig.7 DB移行画面

落ちてきたsqlファイルを移行先のNASで同様にphpMyAdminを開き、インポートの画面から「ファイルを選択」でファイルをアップロードした後「実行」をクリックすることで全DBを移行できました。

2.5. HBS3を用いて旧NASからデータを転送

さて本命のデータ移行です。QNAPのバックアップ・同期アプリケーションのHBS3はとてもよくできていて簡単にデータを移すことができました。その手順をまとめておきます。

Fig.4に示した移行可否の結果では「HBS3でバックアップして移行してください」と下の方に書かれています。今回は手元に新旧両方のNASがあり、移行が完全に終わるまでは双方運用し続けるので「同期」の方を用いることにしました。

Fig.8 HBS3画面1

まずはじめに移行する共有フォルダを移行先NASにて生成しておきましょう。「File Station」から生成します。

同期ジョブを生成します。移行元NASのHBS3上で「バックアップ&復元」->「双方向ジョブ」を選択します。

Fig.9 HBS3-同期ジョブの生成

はじめに保存先ストレージの選択画面が出てきます。「リモートNAS」を選択し、移行先NASのIPアドレスを入れます。パスワードは同期ジョブのみに用いる新規のパスワードをここで決めます。

Fig.10 HBS3-同期先の選択

同期先を作成すると、同期するフォルダの選択画面が出てきます。左の「ペアリングしたフォルダーの追加」と書かれている部分に移行元NASのフォルダを、右は移行先NASのフォルダを選択します。

Fig.10 HBS3-ペアリングするフォルダーの選択

次にスケジュールの設定ですが、自分は手動で切り替えたかったのでデフォルトの「スケジュールなし」のまま「次へ」を選択しました。またその次の「ルール」も特に変更したい点はなかったのでそのまま「要約」へ進み、設定に問題がない頃を確認してジョブを作成しました。

ジョブが完成すると、ホームの画面に戻ります。ここで「同期」を選択し、ジョブを選んで右上の「今すぐ同期」をクリックすると同期が始まります。

Fig.11 HBS3-同期の開始

また同期を停止したい場合はFig.11の「今すぐ同期」の部分が「同期の停止」(忘れた)のような表示になっているのでそこをクリックすれば止まります。

余談ですが、同期パターンをリアルタイムにした状態で同期先のマシンをシャットダウンすると物凄い数の警告メッセージが生成され、メール通知を有効にしていたので受信ボックスが埋まりました。一回警告出れば十分なのでなんとかしてください…

3. ネットワーク構成

10GbEを有効に活用するため以前の記事でAT-X510-28GTXメインPC用にSFP+NICを用意し環境を整えていました。そちらでは10GbEと1GbEを全て同一ネットワーク配置して上位のルータにつないでいました。しかし結局のところ家のインターネット回線は1Gですし、また全機器JumboFrameの設定をするのは手間なので、10GbE対応機器だけJFを有効にしたいです。よって1GbEと10GbEのネットワークをvlan切って分離することにしました。

メインとなる1GbEのネットワークはインターネットに出るルータを接続しそれをデフォルトゲートウェイにしました。また10GbEのネットワークはデフォルトゲートウェイなしでただの10Gスイッチとして運用しています。また10GbE側のネットワークは接続する機器にJumboFrameを設定し、frame sizeは9000[byte]としました。X510の方はマニュアルを参考に設定しました。

Fig.12 X510のvlan

さて10GbE対応機器をvlan2だけに接続していたらインターネットには出れません。しかし幸いなことに手元にある10GbE対応機器はメインのWindowsPCとTS-932Xだけで、どちらもNICが複数あります。よってvlan1の方にもLANケーブルを接続し、1GbEのネットワークにつながる方をデフォルトゲートウェイにすることでインターネットにもちゃんと出れますし、10GbE対応機器同士で通信するときは10GbE側のIPを指定することで高速にアクセスできます。

Fig.13 TS-932Xのネットワーク設定

余談ですがESXiサーバになっているM715qにもSFP+スロットを追加したいのでLenovoさんオプションで用意してくれませんか??

4. ストレージ性能の測定

一番気になるネットワーク越しのアクセスによるストレージ性能の測定です。 測定に先立ち理論最大値を確認しておきましょう。まずSATA6G接続であるHDD及びSSDは最大600[MByte/s]でデータを転送できます。この値はSATA6Gは6[Gbit/s]で通信し、さらにSATA通信では8b/10bエンコードされることを考慮した値になります。

次に1GbEネットワークでは125[MB/s]、10GbEでは1.25[GB/s]になります。TCPヘッダの20[Byte]は考慮していません。ペイロードの最大1500[Byte]と比較して十分小さいので0と近似した値になります。

さて測定のポイントとして下記パラメーターを元に測定してみました。

  • SSD:RAID 0/1
  • JumboFrame:1500(default)/9000

なお、HDDはRAID6構成のみ、ネットワークは10GbEでの測定になります。1GbEではどの測定も約125MB/sで頭打ちになっていました。

4.1. NASによる各ディスク単体の性能テスト

QNAP NAS自体にもディスクの性能テストを実行する機能があります。はじめにその結果をFig.15に示します。性能テストは「ストレージ&スナップショット」の左ペイン「ディスク」から実行できます。

Fig.14 QNAP NASによるディスク単体の性能測定結果

HDDを見てみると、順次読み取り(シーケンシャルリード)ではWD RED 3TBは約150MB/s、seagate ironwolfは180MB/sといった結果になりました。多少の差ですがseagateのほうが速いみたいです。一方でIO/sではWDのほうが1秒あたり10回ほど多いようです。

SSDはWD、crucialともに約530MB/sでほぼSATAの帯域上限となっています。

4.2. CrystalDiskMarkによるベンチマーク

言わずと知れたCrystalDiskMark(以下CDM)での測定結果です。CDMのバージョンは6.0.2で設定はデフォルトのまま(5回、1GiB)です。はじめに参考情報としてメインPCの内蔵SSD(WD Black, M.2, nvme接続)とHDD(WD Blue, SATA6G接続)の結果をFig.15に貼っておきます。また1GbEと10GbEで比較した結果をFig.16に示します。

Fig.15 PC内蔵のベンチマーク結果
Fig.16 10GbE/1GbEベンチマーク結果

4.2.1. SSD RAID 0/1での比較

はじめに、SSDのRAID 0/1で比較した結果をFig.17に示します。このとき、JumboFrame及びPC側NICのオフロードはどちらも有効です。

Fig.17 SSD RAID 0/1 比較結果

結果、シーケンシャルリードではどちらもほぼ10GbEの帯域上限となりました。Fig.14では単一ディスクの順次読み取りが約530MB/sであったことを考えると、少なくともRAID1環境で1232.1[MB/s]といった値が出たことには疑問が残ります。ランダムリードではどちらもほとんど同じ値でした。またシーケンシャルライトではまあまあ妥当かなという結果になりました。ランダムライトはリード同様にどちらもほぼ同じ値でした。

4.2.2. JumboFrame 有効/無効での比較

続いて、JumboFrameが無効/有効(フレームサイズが1500/9000)での測定結果をFig.18に示します。このとき、SSDのRAID0でNICオフロードは有効です。

Fig.18 JumboFrame 有効/無効 比較結果

唯一差があったのはシーケンシャルリードですね。フレームサイズが1500[byte]では十分に10GbEの実力が発揮できず、2/3程度の速度となっていることがわかります。

4.2.3. NICのオフロード 有効/無効での比較

続いて、 クライアントPCのNIC(intel X520)の各種オフロードを有効/無効にしたときの比較結果をFig.19に示します。変更した設定はIPv4かつTCP関連のオフロードで該当するものです。なおFig.19中のfsはframeSizeを差します。

Fig.19 NICオフロード有効/無効 比較結果

frameSize=9000ではNICでオフロードを有効/無効にしても対して差はない結果となりました。昨今のCPU(測定に使用したマシンはRyzen 2700X)ではネットワーク関連の処理は大きな負担とはならないようです。しかしframeSize=1500ではシーケンシャルリードの値が低下しており、大量のTCPパケットの生成をCPU任せにするには荷が重いようです。ここらへんはCPUの性能に大きく作用されると思います。fs=1500, offload=disableでシーケンシャルリードを実行中のタスクマネージャーの様子をFig.20に示します。

Fig.20 fs=1500, offload=disable, Seq Q32T1時のCPUの様子

Fig.20を見ると、単一スレッドだけが使用率100%になっています。ネットワーク関連の処理はどうやらシングルスレットでの実行になるようで、これがボトルネックとなっているようです。

4.2.4. HDD-RAID6とSSD-RAID0の比較

最後にRAID6構成のHDDとRAID0構成のSSDでの測定結果をFig.21に示します。このとき、JumboFrame及びNICオフロードは有効です。

Fig.21 SSD-RAID0 vs HDD-RAID6

4.2.1.節同様にリードの値は本当に正しいのか疑問が残ります。やはりなにかしらのキャッシュが効いてるのでしょうか?ライトの測定結果はさすがSSD、速いなといった感じになりました。またHDDのシーケンシャルライトは271.6[MB/s]と1GbEでは出せない速度が出ていて嬉しいポイントですね。なにげにFig.15に示したPCの内蔵のHDDよりも速い結果になっています。

4.2.5. 総評

CDMを用いたベンチマークではリード測定結果の信憑性に疑問が残りました。が、シーケンシャルRead/Write以外にも1GbEでは出せない125[MB/s]以上の速度を記録していて10GbEの効果を確認できました。またJumboFrameを有効にしてフレームサイズを大きくすることは10GbEの能力を最大限活用するには必要であることが確認できました。

4.3. エクスプローラによるファイルコピーの実測

CDMによるベンチマークだけではなく、エクスプローラ上で実際にファイルをコピーしその時間を測定・比較も行いました。コピーしたファイルはこちらのサイトさんを参考にfsutilコマンドで生成した10GBのファイルです。

Fig.22 測定に用いた10[GB]のファイル

ファイルのコピーは以下のパターンで測定しました。なおPC側でボトルネックとならないようPC側ストレージはnvme接続のSSD(Fig.15右)としました。

  • PC -> NAS[SSD-RAID0]
  • PC -> NAS[SSD-RAID1]
  • PC -> NAS[HDD-RAID6]
  • NAS[SSD-RAID0] -> PC
  • NAS[SSD-RAID1] -> PC
  • NAS[HDD-RAID6] -> PC

また4.2.節での測定で1GbEでは、シーケンシャルの場合ストレージ構成よりもネットワークがボトルネックとなるとわかったので測定は10GbEネットワーク越しのみで行いました。さらにJumboFrame及びNICのオフロードは有効にしています。測定にはストップウォッチを用いて簡易的に計測しました。測定の結果をFig.23に、グラフ化したものをFig.24に示します。Fig.23, 24中の転送速度は10[GB]を転送時間で割った値です。

Fig.23 10GBデータ転送時間と転送速度
Fig.24 10GBデータ転送速度比較

やっぱりSSDは速いですね、特にReadの転送速度は 実用上でもこんな速度が出るのかと驚きます。10GbEを用いるとRAID6構成のHDDへのアクセスでも1GbEの2倍以上の速度が出ていて大変満足しています。一方でPCからNAS上のSSD-RAID1へデータを転送した速度と同方向でHDD-RAID6に転送したときの速度があまり変わらなかったのは意外でした。SSDをシステムディスクにしているためファイル転送以外のデータも流れているせいかなと思いましたが、何回か測定しても同じ速度だったので別の理由がありそうです。

おわりに

ついに10GbEをフル活用できる環境が整い、性能もそれなりに実感できたので導入した甲斐がありました。それにしても、SSDが速すぎてHDDを4台でRAID6ではなく、SSDを6台位買ってRAID6組めばよかったかな…?と思ったのは秘密です。まだ空いているベイが3つもあるので後々埋めて拡張したいと思います。拡張したらESXiにiscsiでマウントしてそこに仮想マシンおいたりしたいですね。あ、個人的にはタスクマネージャのネットワーク欄が10Gbpsで飽和しているのを観測できたことが一番盛り上がりました。

Fig.25 これが見れて満足

本シリーズもついに一段落です。この次は家のインターネット回線を10Gにしたいと考えてますが、それを実現するにはまずお引っ越しするところから始まるので少し時間がかかりそうです。

PIC MAN

ソフトとハードの両方の目線を持てるようになりたいです.

あわせて読みたい

2件のフィードバック

  1. 2020年3月5日

    […] 続き -> 快適10GbE環境に向けて -NAS編- […]

  2. 2020年3月7日

    […] 前回(快適10GbE環境に向けて -NAS編-)の続きのようなものです。 […]

コメントを残す

メールアドレスが公開されることはありません。