GEOM STRIPE + MIRROR で RAID10 を構成してみる

GEOM

今回は GEOM STRIPE と MIRROR を組み合わせた RAID10 について纏めてみたいと思います.
ストライピングは複数のディスクを束ねた分散の読み書きが可能で IO 性能の向上が見込まれますが,耐障害性はありません.
一方,ミラーリングはデータを複数のディスクに保持する為耐障害性を得る事が可能となりますが,容量と IO 性能 はディスク1本分の性能となります.
その為ストライピングとミラーリングを組み合わせた RAID10 とする事で両方の弱点を補う事が可能となります.
デメリットは,RAID3 以降の技術と比較してディスク本数と容量の兼ね合いで損失が大きい事になります.通常,パフォーマンスは RAID10 の方が向上が見込めます.
「通常」というのは GEOM の仕組みだと制限があるのでこの書き方となっています.

GEOM による RAID10 のイメージ

GEOM STRIPE と MIRROR の組み合わせによる RAID10 のイメージです.
MIRROR の2セットを STRIPE で束ねる事で容量と IO 性能の向上,耐障害性の向上が図れます.

RAID10 の作成

実施にあたり,カーネルモジュールは先にロードしておきます.

 cat /boot/loader.conf
geom_stripe_load="YES"
geom_mirror_load="YES"

まずは2つのミラーリングのセットを作成します.

# gmirror label mirror0 da1 da2
root@bsd13:~ # gmirror label mirror1 da3 da4
root@bsd13:~ # gmirror status
          Name    Status  Components
mirror/mirror0  COMPLETE  da1 (ACTIVE)
                          da2 (ACTIVE)
mirror/mirror1  COMPLETE  da3 (ACTIVE)
                          da4 (ACTIVE)

# gmirror list
Geom name: mirror0
State: COMPLETE
Components: 2
Balance: load
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 226490004
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror0
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r0w0e0

Geom name: mirror1
State: COMPLETE
Components: 2
Balance: load
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 518624559
Type: AUTOMATIC
Providers:
1. Name: mirror/mirror1
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r0w0e0

続いて,作成したミラーリングデバイスをストライプで束ねます.

# gstripe label stripe0 /dev/mirror/mirror0 /dev/mirror/mirror1

# gstripe status
          Name  Status  Components
stripe/stripe0      UP  mirror/mirror0
                        mirror/mirror1

# gstripe list
Geom name: stripe0
State: UP
Status: Total=2, Online=2
Type: AUTOMATIC
Stripesize: 65536
ID: 200779422
Providers:
1. Name: stripe/stripe0
   Mediasize: 214748233728 (200G)
   Sectorsize: 512
   Stripesize: 65536
   Stripeoffset: 0
   Mode: r0w0e0
Consumers:
1. Name: mirror/mirror0
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r0w0e0
   Number: 0
2. Name: mirror/mirror1
   Mediasize: 107374181888 (100G)
   Sectorsize: 512
   Mode: r0w0e0
   Number: 1

ファイルシステムを作成してマウントします.

# newfs /dev/stripe/stripe0
/dev/stripe/stripe0: 204799.9MB (419430144 sectors) block size 32768, fragment size 4096
        using 328 cylinder groups of 625.22MB, 20007 blks, 80128 inodes.
super-block backups (for fsck_ffs -b #) at:
 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776, 11524224, 12804672, 14085120, 15365568,
 16646016, 17926464, 19206912, 20487360, 21767808, 23048256, 24328704, 25609152, 26889600, 28170048, 29450496, 30730944,
 32011392, 33291840, 34572288, 35852736, 37133184, 38413632, 39694080, 40974528, 42254976, 43535424, 44815872, 46096320,
...

# mount /dev/stripe/stripe0 /mnt

# df
Filesystem          1K-blocks    Used     Avail Capacity  Mounted on
/dev/da0p2           19279260 2591108  15145812    15%    /
devfs                       1       1         0   100%    /dev
/dev/stripe/stripe0 203123480       8 186873596     0%    /mnt

以上で RAID10 ボリュームの利用が可能となります.
ディスクが1本障害となった場合は GEOM MIRROR のディスク交換の手順「ミラーデバイスを取り外す」と「ミラーデバイスを追加する」で交換,リビルドが行えます.

ディスクを拡張する

GEOM MIRROR を STRIPE で束ねている事から,さらに MIRROR デバイスを追加した拡張は「GEOM STRIPE (ストライプ/RAID0) を使ってみる の ディスクを拡張する」で記載したように実施出来ません.

MIRROR 側を玉突きで大きなディスクに入れ替えての拡張もこの構成だと上位レイヤーに STRIPE がある為不可能です.

今回のつくり方の場合,最初の段階で最大値を構成する必要がありますので注意してください.

RAID10 については別のアプローチで実現が可能ですので改めて纏めたいと思います.

コメント

タイトルとURLをコピーしました