2017年2月20日月曜日

CLVMに挑戦(アクティベートフラグ編その2)

さて、検証していく過程で、何度かOS再起動が発生する可能性がある。
その都度、OSが共有ボリュームを自動マウントしようとすると、ちょっと不都合が生じる恐れがある。

まずはgemini/cancerの両ノードで、ボリュームの自動マウントが行われないようにしておこう。

まずはgemini/cancerで、アンマウントしておく。
(gemini) $ df
(gemini) $ sudo systemctl stop /mnt/gfs2
(gemini) $ sudo systemctl stop /mnt/ocfs2
(gemini) $ df

(cancer) $ df
(cancer) $ sudo systemctl stop /mnt/gfs2
(cancer) $ sudo systemctl stop /mnt/ocfs2
(cancer) $ df

続いて、両方のVGのディアクティベート(これは片方のノードで実施すればOK)
(gemini) $ sudo vgchange -a n vg-ocfs2
(gemini) $ sudo vgchange -a n vg-gfs2

続いて、OS起動時に自動マウントされないように手を加える。
(gemini) $ sudo vi /etc/fstab
/mnt/ocfs2と/mnt/gfs2のマウントオプションに、noautoを付与する。
--ココから
/dev/mapper/vg--ocfs2-lv--ocfs /mnt/ocfs2 ocfs2 _netdev,x-systemd.requires=o2cb.service 0 0
/dev/mapper/vg--gfs2-lv--gfs /mnt/gfs2 gfs2 _netdev,x-systemd.requires=dlm.service 0 0
↓この2行にnoautoを付与
/dev/mapper/vg--ocfs2-lv--ocfs /mnt/ocfs2 ocfs2 noauto,_netdev,x-systemd.requires=o2cb.service 0 0
/dev/mapper/vg--gfs2-lv--gfs /mnt/gfs2 gfs2 noauto,_netdev,x-systemd.requires=dlm.service 0 0
--ココまで

(cancer) $ sudo vi /etc/fstab
geminiと同じように修正する。

systemdに変更結果を反映させる。
(gemini) $ sudo systemctl daemon-reload
(cancer) $ sudo systemctl daemon-reload

両ノードを再起動して、マウントされていないかを確認する。
(gemini) $ sudo shutdown -r now
(cancer) $ sudo shutdown -r now

(gemini) $ df
(cancer) $ df

さて、どのようなアクティベートフラグがあるかを確認、という流れだけど、その前に1つ、再起動直後のvg-ocfs2とvg-gfs2の状態を確認しておきたい。
どちらのノードからでも構わない。
(gemini) $ sudo vgdisplay vg-ocfs2
(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs

(gemini) $ sudo vgdisplay vg-gfs2
(gemini) $ sudo lvdisplay vg-gfs2/lv-gfs

lvdisplayの出力結果のうち、「LV Status」が、どちらのVGもavailableになっていると思う。
これはOS起動時に、当該LVがアクティベートされた、ということだ。
さて、これはいいことなのだろうか?
一応、現在の挙動はこのようになっている、と言う点は覚えておこう。

で、いよいよアクティベートフラグの確認だ。
lvchangeのmanを見ると、アクティベートに関しては以下のようになっている。
[-a|--activate [a][e|s|l]{y|n}]

また、vgchangeのmanはどうかと言うと…
[-a|--activate   [a|e|s|l]   {y|n}]

微妙に記述は違うが、似たような感じだ。

lvchangeの方のオプション表記は
  • aの有無
  • e/s/lのいずれかもしくは無し
  • yかnのいずれか
のパターンのようだ。
ちょっと複雑だぞ…。(2*4*2=16パターンか?)
でも、マニュアルエントリ上は、以下のパターンしか記載が無いな。
  • -a [y|n]
  • -aa [y|n]
  • -ae [y|n]
  • -as [y|n]
  • -al [y|n]
vgchangeのマニュアルエントリも同じようだ。

マニュアルを見る限り、以下のような感じになっている。
  • -a [y|n]
    activationする、解除する
  • -aay
    autoactivationする
    このオプションは、-aanについて言及されてない。なんだ?
  • -ae[y|n]
    exclusiveモード(排他モード)でactivationする、解除する
  • -as[y|n]
    sharedモード(共有モード)でactivationする、解除する
  • -al[y|n]
    当該のノードでのみactivationする、解除する
で、-a、-ae、-asは全てのノードに影響する、ということのようだ。
このあたりは、vgchangeも同じになっている。

一つずつ試してみよう。
まずは、gemini/cancerどちらでもactivateされていることを確認する。
(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs
(cancer) $ sudo lvdisplay vg-ocfs2/lv-ocfs
「LV Status」が「available」なのを確認。

gemini側でdeactivateする。
(gemini) $ sudo lvchange -a n vg-ocfs2/lv-ocfs

gemini/cancerでステータスを確認する。
(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs
(cancer) $ sudo lvdisplay vg-ocfs2/lv-ocfs
「LV Status」が「NOT available」になったのが確認できたはずだ。

このまま、-aaを確認してみよう。
ただ、autoactivateに関しては、/etc/lvm/lvm.confに記載があるはずなので、コマンドで実行するとなると、どのような変化が現れるか…。
まずは、/etc/lvm/lvm.confをコピっておこう。
(gemini) $ cp -i /etc/lvm/lvm.conf ~/lvm.conf
(cancer) $ cp -i /etc/lvm/lvm.conf ~/lvm.conf

続いて、gemini側で-aaを実行してみる。
(gemini) $ sudo lvchange -aay vg-ocfs2/lv-ocfs

ステータスの確認
(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs
(cancer) $ sudo lvdisplay vg-ocfs2/lv-ocfs
gemini側は「LV Status」が「available」になった。でもcancer側は「NOT available」のままだ。
違いが分からない…。

(gemini) $ diff ~/lvm.conf /etc/lvm/lvm.conf
(cancer) $ diff ~/lvm.conf /etc/lvm/lvm.conf
差分は無い。

とりあえず、gemini側で-aanをやってみる。
(gemini) $ sudo lvchange -aan vg-ocfs2/lv-ocfs
Invalid argument for --activate: an
Error during parsing of command line.
お?エラーになった。-aanってオプションは無いのか?

gemini側だけactivationされてしまったので、一旦deactivateしておく。
(gemini) $ sudo lvchange -an vg-ocfs2/lv-ocfs

-aayについてはちょっと良く分からなかったので一旦保留。

続いて、-aeだ。
(gemini) $ sudo lvchange -aey vg-ocfs2/lv-ocfs
(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs
(cancer) $ sudo lvdisplay vg-ocfs2/lv-ocfs
これも、gemini側はavailableに変化、cancer側はNOT availableのまま、だ。

排他モードなら、cancer側ではアクティベーション出来ないはずだ。
(cancer) $ sudo lvchange -a y vg-ocfs2/lv-ocfs
Error locking on node UNKNOWN 1084766088: Device or resource busy
Error locking on node 40a83789: Volume is busy on another node
予想通り。

(cancer) $ sudo lvchange -aey vg-ocfs2/lv-ocfs
Error locking on node 40a83789: Volume is busy on another node
こちらも予想通り。

(cancer) $ sudo lvchange -aay vg-ocfs2/lv-ocfs
Error locking on node 40a83789: Volume is busy on another node
同じだ。

cancer側でdeactivate出来るのか?
(cancer) $ sudo lvchange -a n vg-ocfs2/lv-ocfs
あれ?通った。

(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs
おっと、「NOT available」になった。

この状態でcancer側で排他モードは使えるのか?
(cancer) $ sudo lvchange -aey vg-ocfs2/lv-ocfs
(cancer) $ sudo lvdisplay vg-ocfs2/lv-ocfs
出来た。

う~む。排他モードでアクティベートした場合、他のノードではアクティベート出来ないが、強制的にディアクティベートすることは可能なのかな?
(gemini側でマウント等していなかったので…。もしgemini側でマウントされていたらどうなるのだろうか?)

というわけで、cancer側でアクティベートされているので、そのままマウントして、gemini側でディアクティベートしかけてみよう。
(cancer) $ sudo systemctl start /mnt/ocfs2
(cancer) $ df /mnt/ocfs2
(gemini) $ sudo lvchange -a n vg-ocfs2/lv-ocfs
Error locking on node 40a83789: Logical volume vg-ocfs2/lv-ocfs contains a filesystem in use.
なるほど、ファイルシステムを使用しているよ、ということでディアクティベート出来ないのか。

この状態でcancerが強制的にダウンしてしまった場合はどうなんだろう?
KVMホスト側で、cancerを強制的に止めてみる。
(sagittarius) $ virsh destroy cancer
(sagittarius) $ virsh list --all
止まった。

gemini側で仕掛けてみる。
(gemini) $ sudo lvchange -a n vg-ocfs2/lv-ocfs
あれ?反応が無い。ハングした模様…。
とりあえず、もう1セッション開いて、lvchangeのプロセスをkillしておいた。

じゃぁアクティベートは出来るんかいな?
(gemini) $ sudo lvchange -aey vg-ocfs2/lv-ocfs
ダメだな…。
もう一回killしておく。

そもそも、通常のアクティベートは?
(gemini) $ sudo lvchange -a y vg-ocfs2/lv-ocfs
これもダメか…。

じゃぁローカルアクティベートは?
(gemini) $ sudo lvchange -aly vg-ocfs2/lv-ocfs
これもダメ…。

う~ん。これはちょっとマズいねぇ。
排他モードは解除できるのか?
(gemini) $ sudo lvchange -aen vg-ocfs2/lv-ocfs
これもダメ。

っていうか、LVのステータスすら確認できなくなっちゃった。
(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs

これだと、HAクラスタでアクティブノードがダウンした時、速やかにスタンバイノードでサービス再開出来ないなぁ。

もう少し調査を進めるにしても、一旦元に戻しておきたいので、cancerを起動して復帰したか確認しよう。
(sagittarius) $ virsh start cancer
(gemini) $ sudo lvdisplay vg-ocfs2/lv-ocfs
(cancer) $ sudo lvdisplay vg-ocfs2/lv-ocfs
「LV Status」が「available」になっているのが確認できた。

長くなったので一旦ココで切る。

0 件のコメント:

コメントを投稿