FreeBSD8.0 WEBサーバ構築ノート
GMIRRORによるソフトウェアRAID1

GMIRRORによるソフトウェアRAID1のご紹介です
ai-service

RAID1とは

   RAID(Redundant Arrays of Inexpensive Disks)とは、複数台のハードディスク(HDD)を組み合わせて、 仮想的な1台のHDDとして運用する技術であり、信頼性向上(RAID1,RAID5)や高速化(RAID0)を目的としています。 その中で、RAID1は最もシンプルなRAIDであり、複数台のHDDに同時に同じ内容を書き込むミラーリングという方法です。 RAID1は、常に記録容量の2倍の容量のHDDが必要であるという欠点はありますが、 以下のような利点があるため、信頼性が必要なサーバのHDD、 特にOSをインストールするシステムディスクにはぜひ導入しておきたい技術と言えるでしょう。

GMIRRORによるRAID1の組み方

   GMIRRORによりRAID1を組むためには、少なくとも2台のHDDが必要です。 また、FreeBSD8.0ソースのダウンロードおよびインストールCDの作成で述べたように、 8.0-RELEASE-*-livefs.iso のCDが必要ですので、あらかじめ準備して下さい。

HDD名称およびパーティションの確認

   まず、FreeBSD8.0 をインストールしたサーバのHDDが認識されているかどうか確認します。 ここで、認識されていなければ、FreeBSD8.0がHDDインターフェースに対応していない可能性がありますので、 再度、FreeBSD8.0でサポートされているデバイスのチェックで示した通り、 FreeBSD8.0でデバイスがサポートされているかどうか、確認して下さい。 以下の例では、480GBのHDDが2台認識されており、その名称は、"ad4"と"ad6"になっていることがわかります。
表1 "dmesg"コマンドによるHDD名称の確認
# dmesg
・・・
ad4: 476940MB <WDC WD5002ABYS-18B1B0 02.03B04> at ata2-master SATA300
ugen0.1: <Intel> at usbus0
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus0
ugen1.1: <Intel> at usbus1
uhub1: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1
ad6: 476940MB <WDC WD5002ABYS-18B1B0 02.03B04> at ata3-master SATA300
acd0: DVDROM <PLDS DVD-ROM DH-16D5S/VD15> at ata6-master SATA150
・・・
Trying to mount root from ufs:/dev/ad4s1a
また、FreeBSD8.0は"ad4"にインストールしましたので、"ad4"のパーティション(スライス)を示す /etc/fstab ファイルは以下のようになっています。
表2 /etc/fstabの内容確認
# cat /etc/fstab
# DeviceMountpoinFStypeOptionsDumpPass#
/dev/ad4s1bnoneswapsw00
/dev/ad4s1a/ufsrw11
/dev/ad4s1e/tmpufrw22
/dev/ad4s1f/usrufsrw22
/dev/ad4s1d/varufsrw22
/dev/acd0/cdromcd9660ro,noauto00

GMIRRORによるRAID1の設定 - 読み込み時の負荷分散アルゴリズムの指定

   8.0-RELEASE-*-livefs.iso のCDからサーバを起動し、国とキーボードを選択後、Fixitを選択し、 起動メディアとしてCD-ROM/DVDを選択すると、プロンプト"Fixit#"が表示されますので、以下のように入力します。
表3 "ad4"をgmirror仮想ディスク"gm0"に設定
Fixit# chroot /dist
Fixit# mount -t devfs devfs /dev
Fixit# kldload geom_mirror.ko
Fixit# gmirror label -v gm0 /dev/ad4 <-- "ad4"をgmirrorの仮想ディスク"gm0"に設定する。
Metadata value stored on /dev/ad4.
Done.
ここでは、"gmirror label"コマンドでは、読み込み時の負荷分散アルゴリズムを指定していませんが、 -bオプション("gmirror label -b ***")により以下の4種類の負荷分散アルゴリズムを指定することが出来ます。 負荷分散アルゴリズムには、以下の4種類の方法があります。    WEBサイトを調べた限りでは、 デフォルトの負荷分散アルゴリズムでは、2台のHDDでは読み込み速度が2倍近く向上するが、3台以上のHDDを使用したシステムでは逆に遅くなるという報告があります。 "load" も確実に負荷分散が出来る訳でもなさそうです。 以上から、"round-robin" が最も読み込み速度を高速化できそうな感触です。最もシンプルな負荷分散方法だからでしょうか!? 一度設定した負荷分散方式は、次のコマンドにより変更可能です。
表3-1 gm0 の負荷分散方式を round-robin に変更する
# gmirror configure -b round-robin gm0
ただし、GMIRRORをMySQLとの組み合わせでテストしたケースにおいて、 2台のHDDによる複数のクエリ処理速度は、1台のHDDの場合に比較して、 高々10%程度の高速化しか達成できなかったことを付記しておきます。
   次に、"gmirror list"コマンドで、"ad4"が"Consumers"に設定されているか確認します。
表4 gmirror仮想ディスク"gm0"に設定した"ad4"の確認
Fixit# gmirror list
Geom name: gm0
State: COMPLETE
Components: 1
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 1438289296
Providers:
1. Name: mirror/gm0
  Mediasize: 500107861504 (466G)
  Sectorsize: 512
  Mode: r0w0e0
Consumers:
1. Name: ad4
  Mediasize: 500107862016 (466G)
  Sectorsize: 512
  Mode: r1w1e1
  State: ACTIVE
  Priority: 0
  Flags: NONE
  GenID: 0
  SyncID: 1
  ID: 2117239218
   次に、空きディスクの"ad6"をgmirrorの仮想ディスクとして追加します。
表5 "ad6"をgmirrorの仮想ディスクとして追加
Fixit# gmirror insert -v gm0 /dev/ad6
Done.
"gmirror list"コマンドで、"ad4"と"ad6"が"Consumers"に設定されているか確認します。 また、"ad6"の追加に伴い、"ad4"と"ad6"の同期が開始されます。 "ad6"のStateが"SYNCHRONIZING"、Flagsが"DIRTY,SYNCHRONIZING"となり、同期中であることがわかります。 同期が完了するまで待ちますが、SAS6iRコントローラの146GBのディスクで30分程度、 SATAコントローラの500GBのディスクなら1~2時間程度かかります。 同期の進行状況は、"ad6"のSynchronized: **%の項目で調べることができます。
表6 gmirror仮想ディスクのリストと同期状況の確認
Fixit# gmirror list
Geom name: gm0
State: DEGRADES
Components: 2
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 1438289296
Providers:
1. Name: mirror/gm0
  Mediasize: 500107861504 (466G)
  Sectorsize: 512
  Mode: r1w0e0
Consumers:
1. Name: ad4
  Mediasize: 500107862016 (466G)
  Sectorsize: 512
  Mode: r1w1e1
  State: ACTIVE
  Priority: 0
  Flags: NONE
  GenID: 0
  SyncID: 1
  ID: 2117239218
2. Name: ad6
  Mediasize: 500107862016 (466G)
  Sectorsize: 512
  Mode: r1w1e1   State: SYNCHRONIZING
  Priority: 0
  Flags: DIRTY,SYNCHRONIZING
  GenID: 0
  SyncID: 1
  Synchronized: 0%
  ID: 841091143
また、"gmirror status"コマンドでも同期の進行状況を調べることができます。
表7 gmirror仮想ディスクの同期状況の確認
Fixit# gmirror status
  NameasStatuComponents
mirror/gm0DEGRADEDad4
ad6(33%)

同期完了後のgmirrorの状態

   HDDの同期が完了すると以下のようなメッセージが出力されます。
表8 "ad6"同期完了メッセージ
GEOM_MIRROR: Device rebuilding provider ad6 finished.
また、同期完了後、"gmirror list"コマンドにより仮想ディスクのリストを表示すると、 Stateが"ACTIVE"に、Flagsが"NONE"に、それぞれ変化していることがわかります。 その後、gmirrorが仮想ディスクを処理中には、Flags:が"DIRTY"に変化しますが、完了すると"NONE"に戻ります。
表9 同期完了後の仮想ディスクリスト
Fixit# gmirror list
Geom name: gm0
State: COMPLETE
Components: 2
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 1438289296
Providers:
1. Name: mirror/gm0
  Mediasize: 500107861504 (466G)
  Sectorsize: 512
  Mode: r1w0e0
Consumers:
1. Name: ad4
  Mediasize: 500107862016 (466G)
  Sectorsize: 512
  Mode: r1w1e1
  State: ACTIVE
  Priority: 0
  Flags: NONE
  GenID: 0
  SyncID: 1
  ID: 2117239218
2. Name: ad6
  Mediasize: 500107862016 (466G)
  Sectorsize: 512
  Mode: r1w1e1
  State: ACTIVE
  Priority: 0
  Flags: NONE
  GenID: 0
  SyncID: 1
  ID: 841091143
gmirrorが正常に機能しているかどうかは、"gmirror status"コマンドでも確認できます。 以下に示す通り"COMPLETE"が確認できれば、HDDにトラブルは発生していません。
表10 同期完了後の仮想ディスクの状態
Fixit# gmirror status
  NameasStatuComponents
mirror/gm0COMPLETEad4
ad6

ブート設定

gmirrorの同期完了後、ブート設定を行います。 まず、仮想ディスクを"/mnt"という名称でマウントします。
表11 仮想ディスクのマウント
Fixit# mount /dev/mirror/gm0s1a /mnt
次に、editで/mnt/boot/loader.confにgeom_mirror_load="YES"を追加します(CDからの起動なのでエディターはeditしか使用できません)。
表12 editで/mnt/boot/loader.confを編集
Fixit# edit /mnt/boot/loader.conf
また、edit にて /mnt/etc/fstabのデバイス名"/dev/ad4" を"/dev/mirror/gm0" へ変更します。 ここでは、/dev/mirror/gm0s1aを/mntという名称でマウントしているため、/mnt/etc/fstabは、表2の/etc/fstabと同じファイルを指します。
表13 editで/mnt/etc/fstabを編集
Fixit# edit /mnt/etc/fstab
/mnt/etc/fstab ファイルの内容は以下のようになります。
表14 /mnt/etc/fstabファイルの内容
# cat /mnt/etc/fstab
# DeviceMountpoinFStypeOptionsDumpPass#
/dev/mirror/gm0s1bnoneswapsw00
/dev/mirror/gm0s1a/ufsrw11
/dev/mirror/gm0s1e/tmpufrw22
/dev/mirror/gm0s1f/usrufsrw22
/dev/mirror/gm0s1d/varufsrw22
/dev/acd0/cdromcd9660ro,noauto00
以上で、gmirrorの設定は完了です。 exit2回でFixitモードを終了してから、sysinstall Main Menuを終了し、CDを取り出した後再起動し、問題なくgm0から起動することを確認します。

片方のHDDのみによる起動テスト

   システムディスクをgmirrorでRAID1にした訳ですから、HDDが1台故障しても大丈夫なはずです。 とは言っても、最初は半信半疑です。ここでは、実際に1台のHDDで起動するかどうか、確認してみましょう。 サーバをシャットダウン後、HDD1(ad6)のケーブルを抜いて起動すると、問題なく起動できます。 "gmirror status"で仮想ディスクの状態を確認するとStatuが"DEGRADED"になり、"ad6"が消えています。
表15 "ad6"のケーブルを抜いて起動時の仮想ディスクの状態
# gmirror status
  NameasStatuComponents
mirror/gm0DEGRADEDad4
サーバをシャットダウン後、今度は念のため、"ad6"のケーブルを接続し、"ad4"のケーブルを抜いて起動してみましょう。 "ad6"単独でも問題なく起動でき、"gmirror status"で仮想ディスクの状態を確認するとやはりStatuが"DEGRADED"ですが、今度は"ad4"が消えています。
表16 "ad4"のケーブルを抜いて起動時の仮想ディスクの状態
# gmirror status
  NameasStatuComponents
mirror/gm0DEGRADEDad6
以上で、どちらのHDDが故障してもシステムは問題なく動くことが確認できました。

gmirror特異事情発生時の処理

過去に設定したgmirrorメタデータの消去

   OSの再インストール等で、過去にgmirrorを設定した場合には、"gmirror label -v gm0 /dev/ad4" のコマンドを打つ前に、"gmirror list"と入力すると、例えば次のような過去の設定が出ます("ad6"が"Consumers"に設定されている)。 これは、HDDの最後にメタデータが書き込まれているためです。
表17 gmirror仮想ディスクに残った過去の設定
Fixit# gmirror list
State: COMPLETE
Components: 1
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 1438289296
Providers:
1. Name: mirror/gm0
  Mediasize: 500107861504 (466G)
  Sectorsize: 512
  Mode: r0w0e0
Consumers:
1. Name: ad6
  Mediasize: 500107862016 (466G)
  Sectorsize: 512
  Mode: r1w1e1
  State: ACTIVE
  Priority: 0
  Flags: NONE
  GenID: 0
  SyncID: 1
  ID: 2117239218
このような場合には、まず、以下に示す通り"ad6"に書き込まれたメタデータを消去してからgmirrorの仮想ディスクを設定します。
表18 "ad6"のメタデータを消去
Fixit# gmirror stop gm0
Fixit# gmirror clear ad6

HDD故障・交換時のGMIRRORの操作

   HDDの読み込みエラーが頻繁に発生するようになると、やがてgmirrorはそのHDDを認識しなくなる。 例えば、HDDの"ad6"が故障すると、表15に示す通り"ad6"のケーブルを抜いた状況と同じになる。 故障したHDDをgmirrorから除外するには、表19に示す通り、"gmirror forget"コマンドを使用します。
表19 故障したHDDをgmirrorから除外
# gmirror forget gm0
# gmirror status
  NameasStatuComponents
mirror/gm0COMPLETEad4
   故障したHDDのままの状態では、データを失う危険性が高い上、読み取り時の負荷分散も出来ませんので、故障したHDDは速やかに交換するのが望ましいでしょう。 "ad6"を"ad4"と同容量の HDD WD5003ABYX に交換直後、 dmesg コマンドにより、表20 に示す通り HDD が正常に認識されていることを確認します。 GMIRROR では、HDD のスライス(パーティション)ごとにRAID1 を組むことも可能ですが、煩雑になるので、 私は、必ず同容量のHDDを使用して、HDD を丸ごとミラーリングするようにしています。
表20 "ad6"を交換直後の dmesg コマンド
# dmesg
・・・
ad4: 476940MB <WDC WD5002ABYS-18B1B0 02.03B05> at ata2-master SATA300
ugen0.1: <Intel> at usbus0
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus0
ugen1.1: <Intel> at usbus1
uhub1: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1
GEOM_MIRROR: Device mirror/gm0 launched (1/1).
ad6: 476940MB <WDC WD5003ABYX-01WERA0 01.01S01> at ata3-master SATA300
GEOM: mirror/gm0s1: geometry does not match label (16h,63s != 255h,63s).
ad8: 152587MB <WDC WD1602ABKS-18N8A0 02.03B04> at ata4-master SATA300
ad10: 152587MB <WDC WD1602ABKS-18N8A0 02.03B04> at ata5-master SATA300
acd0: DVDROM <PLDS DVD-ROM DH-16D5S/VD15> at ata6-master SATA150
・・・
HDD が正常に認識された後は、表21に示す"gmirror insert"コマンドで"ad6"(交換HDD)をgm0に追加します。このコマンドにより、 "ad4"(既存のHDD)と"ad6"の同期が開始されます。 同期の進行状況は、表6 あるいは表7 に示す通り、"gmirror list"あるいは"gmirror status"コマンドで確認できます。
表21 "ad6"(追加HDD)をgm0に追加
# gmirror insert -v gm0 ad6
Done.
最終更新日:2011年6月12日

* 無断転載禁止。
* どのページでもご自由にリンクして下さい。
* ご意見・ご質問等がございましたら こちらからメールをご送付下さい。

FreeBSD8.0 メニュー
Sponsoredサイト
美容・健康・ダイエットサイト
脳の機能と心と体の健康
健康な心と体の栄養ブログ
占星術・風水・タロット・手相
東洋・西洋占星術
無料姓名判断で読み解く運命
タロットカードで無料占い
手相占いによる未来診断
飛星派風水で住宅開運
夢の夢占い
男と女の心理学と心理テスト
占いと健康ブログ
会社情報等
運営会社情報

プライバシー・ポリシー
お楽しみサイト
Western-Eastern Astrology

ザ・ホラリー占星術

便利サイト
株式投資講座(改訂版)
脳の機能と心と体の健康
ネオラクス
株式投資講座(改訂版)
無料SEO対策
172.31.37.45