6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

45個のHDDを使ったNASを作る

Last updated at Posted at 2021-03-19

設計

45本のハードディスクでNASを作ろうと思ったとき、どのように構成したらいいでしょうか?
それはその用途によってかなり異なると思います。並列計算機で多数のユーザ、多数のタスクが同時にR/Wを行う場合には分散ストレージが向いていると思いますし、多少遅くてもいいから容量とコストを重視したい場合もあると思います。

今回は容量と(少々の)速度を重視したzfsを使用したRAIDカードレスのNASを作ります。ブートも含めて冗長構成をとり、HDDもRAID Z2構成をとります。

ハードウェア構成

Disks

12TB HDD 45台
2TB SSD x1台
240GB boot SSD x2台
(あとでsync=enabledできるように)ZIL用のSSDもあっていいかと思っています。

その他

  • CPU: Intel Silver 4214R x2ソケット分
  • memory:16GB @2400MHz x12チャネル(6チャネル/ソケット) 192GB(total)
  • 1000W冗長電源
  • 2x 10GbE

RAIDカードは使っていません。今回はすべてソフトウェアRAIDで構成します。
CPUは、あまりグレードを上げず安価なパーツにしています。あまり差異は出ないと思います。
メモリは容量を少し多めに確保してキャッシュを有効に利用できるようにしました。SSDのキャッシュには、そのインデックスに巨大なRAMを利用します。余裕をもってRAMを確保しておいた方がいいと思います。
1000Wの電源ですが、45台のHDDともなると電力供給を安定して確保する必要がありますので、この程度の容量が必要です。100Vで利用するときは45台が限度でしょうね。200Vだと60台とかもっと大きい電源が利用できるので、可能性が広がります。(今のところピークで723Wですが、ストレージの負荷とCPUの負荷が重なればもっと上がると思います。900Wくらいはいきそう。)
あとはHDDなので10GbE程度で飽和してしまうのでこんな感じです。

RAID構成

これは、使うアプリケーションのアクセスパターンによって大きく変わります。パフォーマンスの考え方、容量を重視する場合や冗長性を重視する場合など様々挙げられます。
一般にRAIDのパフォーマンスを上げるためにはRAID Z2などをさらにストライプする必要があります。今回はそこまでパフォーマンスはいらないけど44枚すべてで構成することもあまり得策ではないので22枚ずつ構成することにしました。
22枚をRAID Z2で構成してそれを2つストライプします。残りの1枚はホットスペアにして残しておきます。
2TBのSSDに関してはリードキャッシュに使うので壊れても多少のパフォーマンスを犠牲にしてそのまま使い続けることができます。

RAIDカードを利用しない理由は2つあります。

  • RAIDカード+バックアップキャパシタは一般的に高価であるため
  • RAIDカードは十分なパフォーマンスが得られないことがあるため

CPUの性能向上やソフトウェアRAIDの発達によりRAIDカードによるオフロードの効果は少なく、今回はRAIDカードを使いません。

ブート領域はソフトウェアRAIDを構成します。このようなソフトウェアのRAIDで構築する際はブートローダを2つのデバイスに別々にインストールする必要があるため少々面倒ですが、RAIDカードを搭載するよりもコストを削減することができます。

構築

OSにはCentOS 8.3を利用しました。後々Rocky linuxとかに移行するのでしょうかね?
次のような手順でインストールします。
0. RAIDを設定する。

  1. RAID1の上でCentOSをインストールする
  2. ブートディスクをソフトウェアRAID1にする
  3. zfsを構成する
  4. NASに向けた設定を行う。

RAIDのセットアップ

BIOS=>AdvancedのタブからSATAポートなどの設定で、RAIDモードにします。
起動時にCtrl+IでRAIDのセットアップ画面に入り、起動ディスク2つでRAID1を組みます。
選択の切り替えはTabで、RAIDモードの選択はRAID0と表示されているところで上下矢印キーで行います。
RAIDのセットアップでディスクは初期化される点に留意してください。
自分で名前を付けられるので、わかりやすい名前にしておくといいと思います。

OSのセットアップ

先ほど構成したRAID1にOSをインスコします。
特に加筆する点もありません。OSのインストール方法は他で検索してください。

zfsのインストール

https://openzfs.github.io/openzfs-docs/Getting%20Started/index.html
ここに書いてあります(雑)

zfsを構成する。

lsblkでストレージデバイスを確認します。
あとはインストール構成に従ってインストールします。

zpool create tank raidz2 sda adb (省略) sdv raidz2 sdw sdx (省略) sdar

L2ARCを追加します。

zpool add tank cache nvme0n1

hotspareを用意します。

zpool add tank spare sdas

正しく構成すると以下のようになります。

[xxx@localhost ~]$ zpool status
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2-0  ONLINE       0     0     0
            sda     ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0
            sdg     ONLINE       0     0     0
            sdh     ONLINE       0     0     0
            sdi     ONLINE       0     0     0
            sdj     ONLINE       0     0     0
            sdk     ONLINE       0     0     0
            sdl     ONLINE       0     0     0
            sdm     ONLINE       0     0     0
            sdn     ONLINE       0     0     0
            sdo     ONLINE       0     0     0
            sdp     ONLINE       0     0     0
            sdq     ONLINE       0     0     0
            sdr     ONLINE       0     0     0
            sds     ONLINE       0     0     0
            sdt     ONLINE       0     0     0
            sdu     ONLINE       0     0     0
            sdv     ONLINE       0     0     0
          raidz2-1  ONLINE       0     0     0
            sdw     ONLINE       0     0     0
            sdx     ONLINE       0     0     0
            sdy     ONLINE       0     0     0
            sdz     ONLINE       0     0     0
            sdaa    ONLINE       0     0     0
            sdab    ONLINE       0     0     0
            sdac    ONLINE       0     0     0
            sdad    ONLINE       0     0     0
            sdae    ONLINE       0     0     0
            sdaf    ONLINE       0     0     0
            sdag    ONLINE       0     0     0
            sdah    ONLINE       0     0     0
            sdai    ONLINE       0     0     0
            sdaj    ONLINE       0     0     0
            sdak    ONLINE       0     0     0
            sdal    ONLINE       0     0     0
            sdam    ONLINE       0     0     0
            sdan    ONLINE       0     0     0
            sdao    ONLINE       0     0     0
            sdap    ONLINE       0     0     0
            sdaq    ONLINE       0     0     0
            sdar    ONLINE       0     0     0
        cache
          nvme0n1   ONLINE       0     0     0
        spares
          sdas      AVAIL

errors: No known data errors

圧縮を有効にする

いろいろ見ていると、lz4圧縮はデメリットが少ないみたいなので有効にします。というか、zfsのデフォルトみたいですね。

zfs set compress=on tank

非同期書き込みにする

書き込みのシグナルを無視するようにします。これは、データベースなどで行うとデータの整合性が取れなくなる可能性があるので推奨されませんが、NASで行えば同期漏れのファイルがロストするだけなので、あまり問題にはならないと思います。

zfs set sync=disable tank

以上です。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?