2007/11/07

Red Hat Cluster: kernel-xenにバグか?

Red Hat Cluster: GNBD, CLVM and GFS』シリーズが全然進んでいない。その言い訳。どうも、現時点で最新のカーネルkernel-xen-2.6.18-8.1.15.el5にはバグがあるようだ。一世代前のkernel-xen-2.6.18-8.1.14.el5ならば問題ない。
#Xen対応でないバニラカーネルでどうなのかは未確認。

シリーズの続きを書くべく、作業を進めていたのだが、クラスタの動作が安定しなかった。クラスタメンバを一斉に起動するような場合には問題なくクラスタが開始されるのだが、この後、各クラスタメンバの再起動を行うと、OS起動時にクラスタ関連のサービスが正常に起動されなかったり、最悪、OS起動時に停止してしまい、ログインプロンプトすら出ない、という現象に遭遇した。
クラスタメンバを一斉に起動し、クラスタが正常に起動した後、何度かクラスタメンバの再起動を繰り返していると、OS起動時に、
Welcome to  CentOS release 5 (Final)
Red Hat Enterprise Linux Server release 5 (Tikanga)
Press 'I' to enter interactive startup.
Setting clock  (localtime): Wed Nov  7 13:27:24 JST 2007 [  OK  ]
Starting udev: [  OK  ]
<<略>>
Starting RPC idmapd: [  OK  ]
Starting cluster:
Loading modules... DLM (built Oct 22 2007 09:34:27) installed
GFS2 (built Oct 22 2007 09:34:51) installed
done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing... done
[  OK  ]
Starting system message bus: [  OK  ]
Starting clvmd: dlm: got connection from 2
dlm: connecting to 1
dlm: got connection from 1
dlm: connecting to 1
[  OK  ]
の部分で停止してしまう。このとき、他のクラスタメンバ上では、
dlm: connecting to 3
dlm: got connection from 3
Extra connection from node 3 attempted
dlm: got connection from 3
の様なメッセージが表示される。
この状態から、停止しているノードをフェンスしたり、強制再起動したりすると、今度は、
Welcome to  CentOS release 5 (Final)
Red Hat Enterprise Linux Server release 5 (Tikanga)
Press 'I' to enter interactive startup.
Setting clock  (localtime): Wed Nov  7 13:37:28 JST 2007 [  OK  ]
Starting udev: [  OK  ]
<<略>>
Starting RPC idmapd: [  OK  ]
Starting cluster:
Loading modules... DLM (built Oct 22 2007 09:34:27) installed
GFS2 (built Oct 22 2007 09:34:51) installed
done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing...
ここで五分程停止する。おそらく、fencedの起動でタイムアウトまで待っているのだと思われる(/etc/init.d/cman中のFENCED_START_TIMEOUTの既定値は300[秒])
更にこの後、clvmdの起動に失敗する。
[  OK  ]
Starting system message bus: [  OK  ]
Starting clvmd: clvmd startup timed out
[FAILED]
Mounting other filesystems:  [  OK  ]
<<略>>
Starting Cluster Module - cluster monitor: Setting verbosity level to LogBasic
[  OK  ]
Starting Cluster Service Manager: [  OK  ]
Starting ricci: [  OK  ]

CentOS release 5 (Final)
Kernel 2.6.18-8.1.15.el5xen on an i686

ノード3 login:
このとき、別のクラスタメンバ上では、
[root@ノード2 ~]# cman_tool services
type             level name       id       state
fence            0     default    00010002 FAIL_ALL_STOPPED
[1 2 3]
dlm              1     clvmd      00010003 FAIL_STOP_WAIT
[1 2 3]
dlm              1     rgmanager  00020003 FAIL_STOP_WAIT
[1 2]
[root@ノード2 ~]#
の様になっている。正常ならば、
[root@ノード2 ~]# cman_tool services
type             level name       id       state
fence            0     default    00010002 none
[1 2 3]
dlm              1     clvmd      00010003 none
[1 2 3]
dlm              1     rgmanager  00020003 none
[1 2 3]
[root@ノード2 ~]#
のようになるはずだ。
ここから、クラスタメンバを停止しようとすると、正常に停止できない。
[root@ノード3 ~]# shutdown -h now

Broadcast message from root (xvc0) (Wed Nov  7 13:50:09 2007):

The system is going down for system halt NOW!
INIT: Switching to runlevel: 0
INIT: Sending processes the TERM signal
[root@dノード3 ~]# Shutting down Cluster Module - cluster monitor: [  OK  ]
Shutting down Cluster Service Manager...
Waiting for services to stop:
この部分で停止したままになってしまう。これは、すべてのクラスタメンバで共通の現象だ。こうなると、すべてのノードを一斉に停止・起動するしかない。
これは、サービスrgmanagerを停止中に、デーモンclurgmgrdが「Uninterruptible sleep」状態(ps(1)参照)になっていて、シグナルに応答しなくなることが原因。追求できたのはここまで。

カーネルのバージョン2.6.18-8.1.15.el5に関しては、RHSA-2007:0940-7に更新情報が記載されていて、Distributed Lock Manager(DLM)に関する修正がなされたことが解る。この修正で虫が憑いたのではないだろうか。
当面、2.6.18-8.1.14.el5で検証を行う。しかし、2.6.18-8.1.15.el5への修正は、深刻度「重要(Important)」に分類されているのが頭の痛いところだ。

2007/11/12追記:
続・Red Hat Cluster: kernel-xenにバグか?』に情報を追加した。

追記(2008/2/24):
CentOS 5.1ではこの問題は解決している。以下の記事を参照。
Red Hat Cluster: CentOS 5.1上でRHCSを使ってみる

7 件のコメント:

匿名 さんのコメント...
このコメントはブログの管理者によって削除されました。
Unknown さんのコメント...

Starting fencing... で止まる現象で困っていた通りすがりのものです。

素晴らしい情報を公開して頂いてありがとうございます。


私はバニラカーネルで起きてしまいましたよ。
当面は 2.6.18-8.1.14.el5 の利用を検討したいと思います。

りょう さんのコメント...

広一さん:
このブログは内容が特殊なので、なかなかコメントがいただけません。そこそこアクセス数はあるんですが。
と言うわけで、コメントをもらえただけで嬉しいです。こちらこそありがとうございます。

バニラカーネルでの結果報告、重ねてありがとうございます。
やっぱりバニラカーネルでも発生しましたか。CentOSプロジェクトへバク報告すべきなんでしょうが、手が空かないのでまだできてません。とほほ。

匿名 さんのコメント...

いつも参考にさせてもらっています。同じようなことをバニラカーネル(kernel-2.6.18-8.1.15.el5)で試みいるものです。

いちおう、ウチの環境では動きましたよ。確かにStarting fencing...でハマりましたが、SELinux関係が悪さをしているような気がしたので、seeditをつかってポリシーを追加しました。あとはiptablesでcman関係が使っているポートを開けたぐらいですかね。

りょう さんのコメント...

なべおさん:
コメントありがとうございます。「いつも参考に」なんて言ってもらえると嬉しいです。
さて本題。なべおさんの環境では動きましたか…
こちらの環境では、最初からSELinuxをpermissive、iptablesをローカルネットワークからはすべて許可に設定しているので、これらとは無関係だと思います。
こちらでは、何度か再起動やフェンスを繰り返したときに起こったんですが、なべおさんのところではどうでしょう?

匿名 さんのコメント...

りょうさん:
なべおです。

なるほど、りょうさんのところではSELinuxはPermisiveでiptablesも基本的に全開なのですね。
あと、何度か再起動したりすると悲しいことになると。

実は自分のところでもchkconfigでcman, clvmd, drbdを有効にして再起動するとdrbdがきちんと相手を認識しなかったり、drbdのメタ情報やファイルシステムが壊れてたりということを経験しています。自分の設定が間違っているような気がしなくもないですが、もっとつっこんで調べてみる必要があるかもしれませんね。

りょう さんのコメント...

なべおさん:
こちらの環境はまだ仮環境なので、セキュリティに関してはかなり手抜き設定です。実環境に適用するには、関連ポートの調査が必要なのですが、まだ手をつけてません。
SELinuxは、いろいろありそうなので、CentOS側で対応してくれるのを待とうかな、と(他力本願)。
DRBDですか…直接はCMANと関係ないはずですが…何故でしょうねえ。CentOS的には、DRBDはcentplus/extras扱いなんで、まだまだ安定して使えるもんじゃないよ、ってことなのかもしれません。
でもなら、標準のXenとRHCSが巧く動かんのは何故なんだと(笑)。