gmirror の ちょっと変わった使い方

gmirror を用いると、ブートデバイスを RAID1 化できるため、手軽に冗長性をもたせた運用をすることができます。
ですが、今回のエントリは、それとはちょっと違った gmirror の使い方について紹介します。

最近のサーバ構築のトレンドの1つとしてサーバの仮想化というものがあります。VMware や、Hyper V、Xen などを使ってサーバ自体を仮想化して効率化をはかるというものです。たとえば VMWare ESXi サーバは無償で使用することが出来るため、開発サーバなどでも気軽に使用することが可能です。
その際に、VMを動かすサーバと別にストレージ用にサーバを立てて2台体制で運用するケースがあります。
弊社でも一部そのような仮想化には VMware ESXi サーバ、そしてストレージには FreeNAS を使う環境で運用しています。

VM を動かすサーバにはUSBメモリなどからブートするようにして、HDDレスな運用が可能ですが、ストレージサーバには流石にSSD 等を用いるのは予算的にちょっと無理がありますので通常の HDD を使って運用しています。その際に問題になるのは HDD が故障した場合です。
ハードウエア的にホットスワップが可能であればそれほど問題にならないのですが、ダメな場合、ストレージサーバが落ちると VM も止まってしまうため、保守のタイミングが非常に難しくなってしまいます。

そこで、gmirror の出番です。

  1. 準備するもの
    • なにはともあれ、ブートデバイスを gmirror で登録しておく。その際HDD は一台でも構いません。
    • 十分な空き容量のあるnfsサーバと高速なネットワーク
    • トラブルが起きても泣かないようにサーバのバックアップ
  2. 実際の作業
    • 用意したnfsサーバ上にddで仮想環境のHDDと同じかそれ以上の大きさのファイルを作成する。

    • takemon@nfs> dd if=/dev/zero of=/home/takemon/vm/vhdd bs=1m count=340000

    • 仮想環境から、そのファイルが見えるように nfs でマウントする。

    • takemon@vm1> sudo mount -t nfs nfs:/home/takemon/vm /mnt/vm

    • mdconfig を用いて、md デバイスを作成する。

    • takemon@vm1> sudo mdconfig -a -t vnode -f /mnt/vm/vhdd -u 5

    • /dev/md5 が生えてくるので、こいつを gmirror に参加させる。

    • takemon@vm1> sudo gmirror insert gm0 md5

    • 自動的にリビルドが始まるので、適当に gmirror status で確認しつつミラーが終わるのを待つ。
    • リビルドが終了したら、あとはストレージのメンテナンスを行う。そのために一旦ミラーから切り離す

    • takemon@vm1> sudo gmirror deactivate gm0 da0

    • ストレージのメンテナンスが終了したら、またミラーに復帰させる

    • takemon@vm1> sudo gmirror insert gm0 da0

    • 再び自動でリビルドが走るので、終了まで待つ。終了したらこんどはmd5を切り離す

    • takemon@vm1> sudo gmirror deactivate gm0 da0
      takemon@vm1> sudo gmirror forget gm0
      takemon@vm1> sudo mdconfig -d -u 5

    • 以上で終了
  3. 注意点
  4. da0 を落としたら、そのあとda0がミラーに参加して、リビルドが完了するまで絶対に VM を落としてはいけません。