2019年2月16日土曜日

げ、stonith(fence)の設定が先だ(gfs2用)

RedHat社のサイトをよくよく読んでみると、「クラスターにはフェンシングを設定する必要があります」って書いてあった。
「いつフェンシング設定するんだろう?」って思ってたんだけど、実は先に設定する必要があったのね。

というわけで、fenceの設定を。

まずは、fence-agentsをインストールする。
(gemini) $ sudo apt-get install fence-agents
(cancer) $ sudo apt-get install fence-agents

で、フェンシングを設定するんだけど、どのフェンスデバイスがいいのか…。
(gemini) $ sudo pcs stonith list
gemini / cancer は kvm/libvirt で動かしているので、fence_virsh を使用するのがスジなんだけど…。
そもそも、今検証している gemini / cancer 環境は、物理マシン(sagittarius / aquarius)で正しく gfs2 を使用するための環境なので、物理マシンで使えるフェンスデバイスにする必要がある。
よく見てみたら、fence_scsi というタイプがある。これを使ってみよう。

とりあえず、gemini/cancer 両ノードで共有する1GBのディスクを追加しておく。
これをストレージフェンシングデバイスとして使用してみたい。

OSの再起動等をこなして、/dev/vdc として確認できたら、ストレージフェンシングデバイスを設定してみる。(できるのか?)
と思ったけど、ディスクデバイス側にpersistent reservationの機能が必要みたいで、virtoio 及び scsi passthrough では対応していないっぽい…。

となると、iSCSIデバイスを作ってみるのが正解か。
過去の記事などを参考に、gemini/cancerに1GBの共有iSCSI-LUNが接続されるようにしておく。
合わせて、/dev/vdc は解除しておこう。

で、色々試していってるんだが、どうやら /var/run/cluster/fence_scsi.key と /var/run/cluster/fence_scsi.dev という2つのファイルが必要っぽい。
ただ、/var/run は tmpfs なので、ココのファイルはOS再起動で消えてしまう。
自動で作ってくれる仕組みがあると思うんだが…。

とりあえず fence_scsi のフェンシングデバイスを作成する。
×(gemini) $ sudo pcs stonith create scsi-fence fence_scsi action=off devices=/dev/sda verbose meta provides=unfencing
(gemini) $ sudo pcs stonith create scsi-fence fence_scsi pcmk_host_list="gemini cancer" devices=/dev/sda verbose meta provides=unfencing
meta設定(provides=unfencing)は必要のようだ。

gemini で実行すれば、cancer 側からも確認できる。
(cancer) $ sudo pcs stonith show
 scsi-fence     (stonith:fence_scsi):   Stopped

デバイスとして指定した /dev/sda で、fence_scsi の情報を見てみる。
$ sudo fence_scsi -d /dev/sda -n gemini -o status -v
(略)
0   PR generation=0x0, there are NO registered reservation keys
No registration for key 2b4d0000 on device /dev/sda
Status: OFF

Status は OFF で、 PR の欄を見ると鍵情報が登録されていない。

gemini、cancer の両ノードで、鍵を登録してみる。
(gemini) $ sudo fence_scsi -o on -d /dev/sda -n gemini
(cancer) $ sudo fence_scsi -o on -d /dev/sda -n cancer

(gemini) $ sudo fence_scsi -d /dev/sda -n gemini -o status -v
0   PR generation=0x2, 2 registered reservation keys follow:
    0x2b4d0000
    0x2b4d0001
Status: ON

鍵情報が登録されて、Status が ON になった。

(gemini) $ sudo pcs stonith show
でも、まだ pacemaker 的には stop のままだ。

cleanup すればいいのだろうか…。
(gemini) $ sudo pcs stonith cleanup scsi-fence

実際には、色々試しているうちに動くところまで確認できた。
動き出したのはいいが、cancerで動いている。
(gemini) $ sudo pcs stonith show
 scsi-fence     (stonith:fence_scsi):   Started cancer

これはもしかして…。各ノードごとにフェンスの設定を入れて、自ノードでのみ稼働するように設定する必要があるのだろうか…。
#fence_virsh などはそのように定義する。2ノードクラスタなら良いのだが、3ノード以上のクラスタの場合はどうするんだろうか…?

やっぱりイマイチ分からん。
とりあえずこのまま進めていくか。