LVMはその仕様上、活性化(アクティベート)・非活性化(ディアクティベート)という概念がある。
論理ボリュームを作成しても、アクティベートしないとその論理ボリュームにI/O出来ない、という仕様だ。
LinuxのLVM2では、VGごとアクティベート・ディアクティベートする方法(vgchange -a)の他に、LV(Logical Volume)単位でアクティベート・ディアクティベートする方法(lvchange -a)もある。
Hewlett Packard Enterprise社が販売しているHP-UXというOSでは、LVMのVGにクラスタマークを付与(vgchange -c y)すると、通常のアクティベート(vgchange -a y)が出来なくなり、排他モードという形でしかアクティベート(vgchange -a e)出来なくなる。
また、クラスタマークが付与されている場合、クラスタリングソフトであるServiceGuardが起動していないと、排他モードでもアクティベート出来なくなる。
HAクラスタを構築した場合、複数のノード(サーバ)で同じディスクボリュームをアクティベート出来てしまうと、複数のサーバから同時書き込みが出来ることになる。
それにより、ボリュームの中身が破壊されてしまう可能性があり、ミッションクリティカルな用途ではそのようなリスクは到底許容できない。
HP-UXの場合、そのようなリスクを回避するために、クラスタマークが付与されているVGは、常にひとつのノードでしかアクティベート出来ない仕様になっている。
恐らく、IBM社のAIXでも、同様の仕組みが備わっていると思われる。
サーバA、サーバBが同一の共有ボリュームを持っていた場合、サーバAでそのボリュームをアクティベート、I/Oしていたとして、そのサーバAが障害でダウンした後は、サーバBでそのボリュームをアクティベート、I/Oする、という感じだ。
ただ、時代は既に変わっていて、Oracle社のOracleDB RACのように、「同一ボリュームに対し、複数のサーバが協調しながらI/Oを行う」という要件も出てきた。
そのため、現在のHP-UXのLVMは多分、クラスタマークの付与・アクティベーションのオプションの組み合わせで、複数のノードでアクティベート出来る仕様になっているはずだ。
さて、振り返ってLinux(Ubuntu)はどうか、というと…。
これまで試してきた通り、クラスタマークの有無に関わらず、複数のノード(今回はgemini/cancerの2ノード)で同時にアクティベート出来た。
逆に言うと、「VG/LVの排他制御」が働いていない状態だ。
きっとこれは、本来の使い方とは異なると思う。
そこで、クラスタマークの付与とアクティベートのオプション(フラグ)について再確認しよう、というのが今回から。
実際には次回記事からこの辺りを実験・検証していきたいと思う。
0 件のコメント:
コメントを投稿