トップページ > ZFS関連 > Solaris ZFSでRAID-Zの構築
カテゴリー
オラクルエンジニア通信
サポートページ
マニュアルページ
ソフトウェアダウンロード
中古UNIXマシン購入
blogs.sun.com
お勧めサイト
プライベートリンク

Solaris ZFSでRAID-Zの構築

RAID-Zストレージプールの構築例の紹介です。
■ RAID-Z とは
RAID-ZはRAID-5に似ています。従来のRAID-5に似たアルゴリズム (RAID-4, RAID-5, RAID-6など)はすべてRAID-5書き込みホールと呼ばれる影響を受けます。RAID-Zでは、可変幅のストライプを使用して、すべての書き込みが ストライプ全体を書き込むようになっています。ZFSでは、ファイルシステムとデバイス管理を統合して、可変幅RAIDストライプの処理に必要な配下の データ複製モデルの情報をファイルシステムのメタデータに取り込むことによってこの設計を実現しています。RAID-ZはRAID-5書き込みホールをソ フトウェアだけで解決する、世界初のソリューションです。現在のところRAID-Zのパリティーは1つのディスクに置かれます。例えば3本のディスクを使 用した場合、パリティが置かれるのはその中の1本のディスクになります。

■ RAID-Z ストレージプールの作成

以下のように3本のディスクを使ってrztest という名前の RAID-Z プールを作成します。
ちなみに使用しているディスクは全て約8.4GBのディスクです。

# zpool create -f rztest raidz c2t64d0 c2t69d0 c2t74d0

作成したプールの状態を確認します。

# zpool status
  プール: rztest
 状態: ONLINE
 スクラブ: 何も要求されませんでした
構成:

        NAME         STATE     READ WRITE CKSUM
        rztest       オンライン     0     0     0
          raidz      オンライン     0     0     0
            c2t64d0  オンライン     0     0     0
            c2t69d0  オンライン     0     0     0
            c2t74d0  オンライン     0     0     0

エラー: 既知のデータエラーはありません


作成したプールの容量を確認します。

# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
rztest                 25.2G    141K   25.2G     0%  オンライン  -
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
rztest                 135K  24.9G    49K  /rztest
#

まず気になることとしては容量がなぜか25.2GBもあります。
RAID-5のような冗長性があるはずなのに、プールのサイズとしては全容量(8.4GB x 3)が表示されています。
一見不思議ですが、このカラクリは実際にデータを格納すれば、解消されます。

以下のように 1GBのファイルを作成して使用される容量を確認します。

# mkfile 1g /rztest/size_1g
# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
rztest                 25.2G   1.50G   23.7G     5%  オンライン  -

これでわかりますね。1GBのデータを格納するのに1.5GBを使用しています。
この1.5倍という倍率はRAID-5と同じ考え方です。
1本分がパリティですので実データの容量としては N-1本分になります。

■ RAID-Z で動的ストライピング

ZFSの素晴らしいところはディスクの数が膨大になっても、いかのようにRAID-Zデバイスを簡単にストライプすることができる点です。
先程のRAID-Zプール rztest に新たに3本のディスクを RAID-Z 構成で追加します。

# zpool add rztest raidz c2t80d0 c2t86d0 c2t90d0
# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
rztest                 50.5G   4.50G   46.0G     8%  オンライン  -
# zpool status
  プール: rztest
 状態: ONLINE
 スクラブ: 何も要求されませんでした
構成:

        NAME         STATE     READ WRITE CKSUM
        rztest       オンライン     0     0     0
          raidz      オンライン     0     0     0
            c2t64d0  オンライン     0     0     0
            c2t69d0  オンライン     0     0     0
            c2t74d0  オンライン     0     0     0
          raidz      オンライン     0     0     0
            c2t80d0  オンライン     0     0     0
            c2t86d0  オンライン     0     0     0
            c2t90d0  オンライン     0     0     0

エラー: 既知のデータエラーはありません
#

上記のように RAID-Z デバイスが2つでき、それぞれにストライプされます。容量は当然2倍になっています。
試しに次のように 2GBのファイルを作成してみます。

# mkfile 2g /rztest/size_2g

それぞれのRAID-Zデバイスがどれだけ使用されたかを確認してみます。
2GBのファイルを作成したので3GBの容量が新たに使用され、以下のようにキッチリ1.5GBずつ振り分けられています。
(1つ目の RAID-Zデバイスはもともと1.5GB使用していたので現在は3GBになっています)

# zpool iostat -v
                capacity     operations    bandwidth
pool          used  avail   read  write   read  write
-----------  -----  -----  -----  -----  -----  -----
rztest       4.50G  46.0G      0     15    155  1.80M
  raidz      3.00G  22.2G      0     10    155  1.20M
    c2t64d0      -      -      0      6    181   615K
    c2t69d0      -      -      0      6    220   615K
    c2t74d0      -      -      0      7    143   615K
  raidz      1.50G  23.7G      0     33      3  3.88M
    c2t80d0      -      -      0     26    433  1.95M
    c2t86d0      -      -      0     26    433  1.95M
    c2t90d0      -      -      0     26    681  1.95M
-----------  -----  -----  -----  -----  -----  -----

#

ちなみにストライプの配分は各RAID-Zデバイスを構成するディスクの数が等しい場合は均等になりますが、そうでない場合にはバラつきがでてきます。
以下のように一度rztestを破棄して、もう一度、3本のRAID-Zデバイスと4本のRAID-Zデバイスでrztest2プールを作成します。

# zpool destroy rztest
# zpool create -f rztest2 raidz c2t64d0 c2t69d0 c2t74d0 raidz c1t0d0 c2t80d0 c2t86d0 c2t90d0
# zpool iostat -v
                capacity     operations    bandwidth
pool          used  avail   read  write   read  write
-----------  -----  -----  -----  -----  -----  -----
rztest2       141K  58.7G      0      0      0    835
  raidz        63K  25.2G      0      0      0    378
    c2t64d0      -      -      0      0    409  5.36K
    c2t69d0      -      -      0      0    409  5.34K
    c2t74d0      -      -      0      0    409  5.35K
  raidz        78K  33.5G      0      0      0    457
    c1t0d0       -      -      0      0    409  5.35K
    c2t80d0      -      -      0      0    409  5.35K
    c2t86d0      -      -      0      0    409  5.34K
    c2t90d0      -      -      0      0    409  5.31K
-----------  -----  -----  -----  -----  -----  -----

4本のディスクで構成したRAID-Zデバイスの方が当然サイズも大きくなります。(33.5GB ≒ 8.4GB x 4)
先程と同様に2GBのファイルを作成します。

# mkfile 2g /rztest2/size_2g

# zpool iostat -v
                capacity     operations    bandwidth
pool          used  avail   read  write   read  write
-----------  -----  -----  -----  -----  -----  -----
rztest2      2.83G  55.9G      0     45   1003  5.25M
  raidz      1.44G  23.8G      0     21    637  2.50M
    c2t64d0      -      -      0     19  1.16K  1.25M
    c2t69d0      -      -      0     19  1.36K  1.25M
    c2t74d0      -      -      0     20  1.36K  1.25M
  raidz      1.39G  32.1G      0     23    365  2.75M
    c1t0d0       -      -      0     22  1.67K   942K
    c2t80d0      -      -      0     21  1.73K   942K
    c2t86d0      -      -      0     21  1.62K   942K
    c2t90d0      -      -      0     21  1.60K   942K
-----------  -----  -----  -----  -----  -----  -----

上記のように、4本で構成したRAID-Zデバイスもあるので2GBのファイルの保存に2.83GBで済んでいます。
とはいうものの、やはり同じディスク数でRAID-Zデバイスを構成した方がすっきりします。
RAID-5と同様に10本以上のRAID-Z構成はパフォーマンス的によくありません。
例えば15本のディスクであれば5本のRAID-Zを3つ作成して80%の容量を確保するのが望ましいと思います。


オラクルユニバーシティSolaris系技術トレーニング一覧

Solarisお勧め書籍

Solaris 11.2 システムハンドブック
Oracle Solaris 11 試験対策本(OCA)