LVMによるストレージミラーリング

LinuxのLVMではミラーリングが行えるので、cmirrorの準備として、まず通常のミラーリングを行っておく。まあ、テストの際には、作成したLVMは後で一旦削除したのだが、ww まず1台でLVMを作っておき、後でサーバー側をスケールアウトすることも一応可能なようだ。

ディスクとしては、後で共有することを考え、iSCSIターゲット x 2 を使用した。ターゲット自体を1つとして、LUNを2つ提供してもらうことでもミラーリングはできるのだが、ストレージノードも冗長化することを考え、(ストレージ内部でRAID1を行うのではなく) 2つのターゲットを使うことにした。

iSCSIターゲットへの接続方法は以前書いたので、既に/proc/partitions には、データディスクが2つある。 ww (それぞれ /dev/sda, /dev/sdb で、openfiler-virt1, openfiler-virt2 で提供している。) PVとして使用するため、

# pvcreate /dev/sda /dev/sdb

とし、同じVGに登録する。(同じVG内で無いとミラーリングはできない)

# vgcreate iscsivg1 /dev/sda /dev/sdb

とする。この状態でLVを作成するのだが、LVのミラーリングを行うには、レプリケーションログを記録するためのディスクが必要で、RAID1のためには最低3つのディスクが必要となる。回避策としては、 --corelog でログをメモリ上に記録するか、--alloc anywhere で作成したLVM自体に内容を記録するように設定する必要がある。テスト時には --alloc anywhere を使った。 (--corelog と違って、一応ディスク内に書き込むため、安全性が高そうに見えたため ww ) 2台でのミラーリングを設定するには、 -m1 をオプションとして指定する。

# lvcreate -L 1G -n iscsilv1 --alloc anywhere -m1 iscsivg1

この状態で、 mke2fs -j /dev/iscsivg1/iscsilv1 を行ったあとマウントしておき、片方のLUNだけをiscsiadmでログアウトする。(もしくは、Openfiler のノードを片方停止する) lvdisplay などをうつと "入出力エラー" が表示されるが、その状態でも読み書きが可能になっていればLVMミラーリングは成功である。


次は、clvmd を使って、ノード側の冗長化を行ってみる。ディスクはまず1つの方向で…。 ww