« | Home | »

2009.02.25

FreeBSDでRAID1(mirror)の設定

災害は忘れた頃にやってくる。24H運転のサーバを運営していると、何時か突然にHDDの故障に見舞われる。そのために、2台のサーバで真夜中にお互いのデーター領域をBackupするようにしているが、最悪故障前24時間のデータは失われるし、なによりもHDDを交換して、再度サーバを立ち上げ直すのは簡単な仕事ではない。優に1日ぐらいは必要である。
そこで、HDDをミラー構成にして突然の事故に備えることにした。
FreeBSDではgmirrorというソフトウェアミラーが備わっているので、これを用いる。
まず、空いているPCを用いてトライアルすることにし、以下はその記録である。

1. 準備

FreeBSD releaseの最新版である7.1版の7.1-RELEASE-i386-disc1.isoと7.1-RELEASE-i386-livefs.isoをダウンロードし、どちらもCDRを作成しておく。
実験用に用意したPCには2台のHDDを入れ、ad0(40GB)とad2(160GB)となっていて、ad0にはFreeBSD-7.1を普通にインストールしておいた。なお、DVDがacd1に割り付けられている。

2. gmirrorの設定

普通はLivefs CDで起動するが、テストに用いたPCでは何故か起動できなかったので、インストールCDで起動して、以下に示すように進めた。
なお、Livefs CDで起動出来ても、同じように進んで行き、途中でCDの入れ替えが不要なだけである。

(1) FreeBSDのインストールディスクで起動し、国の選択でJapanを選び、キーボードのコードはJapanese 106を選ぶ。ここで英文でも良いと思ってUSAのまま進めると、キーボードが日本語キーボードのとき、記号の配置が違い苦労する。

mirror_01.jpg
mirror_02.jpg

(2) キーボードを選んで現れる画面で、
Fixit: Repair mode with CDROM/DVD/Floppy or start shellを選択する。

mirror_03.jpg

(3) 現れた画面で、
CDROM/DVD:Use the “live” filesystem CDROM/DVD を選ぶ。
Livefs CDを使ってBootしても、ここまでは同じで、これ以降はCDの入れ替え無しで、次の3. 設定に進む。

mirror_04.jpg

(4) Please insert a FreeBSD live filesystem CD/DVD and press return のメッセージがでたら、CDをFreBSD Live CD に交換してReturnを押す。

mirror_05.jpg

3. 設定

# Fixitのプロンプトが表示されるので、下記のように設定する。
IDEではad0, ad2のようにprimaryとsecoondaryのMaster接続がよく、sataではad4, ad6がよい。dmesgでドライブ名を調べておくとよい。
なお、ミラーの形式のround-robinは負荷分散の方式の1つである。他にも幾つかの種類があるが、round-robinが最もポピュラーらしい。

Fixit# chroot /dist
Fixit# kldload geom_mirror           ← gmirrorのload
Fixit# exit
Fixit# gmirror label -b round-robin gm0 ad0 ← round-robinでmirrorを構成

下記のメッセージが表示される。

Metadata value stored ad0.
Done.

Statusを表示してみると、下記のように表示されmirror機能が出来ている。

Fixit# gmirror status
 Name         Status   Components
mirror/gm0  COMPLETE    ad0

出来たミラーディスクを/mntにマウントしてfstabを書き換える。
sedの替わりに、eeで/mnt/etc/fstabを編集して/dev/ad4s1a → /dev/mirror/gm0s1aのように全ての ad4をmirror/gm0に変更しても良い。なお、viはtemporary file領域がいるので使用不可。

Fixit# mount /dev/mirror/gm0s1a /mnt
Fixit# sed -i bak s/ad0/mirror\/gm0/ /mnt/etc/fstab/

geom_mirrorの読み込みを/boot/loader.confに設定し、/etc/rc.confも修正。
これは、eeを使った方が楽かもしれない。

echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf
echo 'swapoff="YES"' >> /mnt/etc/rc.conf

CDRを抜いて、再起動する。立ち上がったらroot権限でad2を組み込む。

# gmirror insert gmo ad2   ← ad2の組み込み

これで、同期化が始まる、statusを見ると、

# gmirror status
   Name     Status  Components
  mirror/gm0  DEGRADED    ad0
                  ad2(2%)

30分ほどでad2(100%)になりミラー構成は完了した。

# gmirror status
Name          Status   Components
mirror/gm0     COMPLETE      ad0
               ad2

4. 状態の監視

ミラーで動作させていると、1台のHDDが故障してもサーバの動作は続行するが、1台が故障した時点で対処しないと、ミラーにしている意味がない。
このために、/etc/defaults/periodic.confを編集してミラーの状態を毎日メールで知らせてもらうようにする。
/etc/defaults/periodic.confをみると、下記のようにDaily check項目の406番が”NO”になっている。

# 406.status-gmirror
daily_status_gmirror_enable="NO"                # Check gmirror(8)

“NO”を”YES”に直しても良いのだが、/etc/defaults/rc.confの内容は書き換えず、/etc/rc.confを作成して指定するのと同様に/etc/periodic.confを作って記述する。この記述が優先される。

# cd /etc
# vi periodic.conf
daily_status_gmirror_enable="YES"
: wq

これで、毎日のdaily checkメールにgmirror statusの情報が載る。

コメント

コメントはありません

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)