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)
|