『
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を使ってみる』