[Linux-ha-jp] secondary単独で起動しない。結果報告

Back to archive index

H.Nakai nakai****@shink*****
2011年 11月 25日 (金) 09:33:39 JST


以前、Secondaryだったサーバ単独で起動しないとか、Primaryだったサーバが
単独で起動しないと言っていた中井です。問題が解決したので報告します。

環境は、(DRBD 8.3.8 + HeartBeat 3.0.5 + Pacemaker 1.0.11 +
resource-agents 3.9.2) / CentOS 5.5 です。

システムを(PrimaryもSecondaryも)落とすとき、タイミングを合わせて
両方のサーバを落とすことはできません。Primaryが先に落ちる場合は、
Secondaryを昇格させて、Primaryだった自分に古いデータだよとフラグを
立てて落ちます。Secondaryが先に落ちる場合は、自分のデータが古いデータ
だよというフラグを立てて落ちます。(Primaryから順にわずかな時間差で
Secondaryが落ちるときは、フラグは立ちません。)
この状態でシステムを立ち上げるとき、ハードウェアの故障か何かで最後に
Primaryだったサーバが立ち上がらない場合、残ったサーバではサービスは
自動で起動しません。自分のデータは古いというフラグが立っているから
です。これはSplitBrainを防ぐ為でもありますし、システムを立ち上げる
ときSecondaryから立ち上がった場合に古いデータに合わせて起動してしまう
ことを防ぐ為でもあります。

当然の動作(仕様)なんですが、やっぱりシステム全体を停止・起動する
ときに最後にPrimaryだったサーバが起動しないということはあり得る話で
自動でシステムが起動しないのは困ったことです。もちろん手動で、フラグ
を落として起動することはできるのですが。

そこで、サーバを落とすときのシャットダウンシーケンスの中で、
Heartbeatの起動・停止スクリプトとは別に、Heartbeatの直前に
同期を取るスクリプトを追加しました。このスクリプトの中では、
udpを使って相手のサーバにパケットを投げ、自分がパケットを
受け取ったら終了するというプログラムを起動しています。この
プログラムが直接相手のサーバと同期を取ります。
そしてスクリプトの中で、自分がSecondaryだった場合は、1秒遅れて
スクリプトを終了するようにしました。これで、両方のサーバを落とす
ときに順番を気にしなくても、確実にPrimaryだったサーバから順に落ちる
ことになりますし、Secondaryだったサーバもすぐに続いて落ちるので
どちらのサーバにも古いデータというフラグは立ちません。
起動するときSplitbrainの状態ですが、どちらがPrimaryになっても構わ
ないです。
サーバのメンテナンス等で片方だけ落とすときは、heartbeatのサービスを
落とせば普通に古いデータだというフラグが立ちますし、通常のshutdown
コマンドで落としても、上記のプログラムにはタイムアウトが仕込んで
あるので、一定時間後heartbeatは古いデータだというフラグを立てて
落ちます。

めでたし、めでたし。

-- 
-=-=-=-=  SHINKO ELECTRIC INDUSTRIES CO., LTD.           =-=-=-=-
=-=-=-=-    Research & Development Div.                  -=-=-=-=
-=-=-=-=      Designing Technology Development Dept.     =-=-=-=-
=-=-=-=-  Name:Hisakazu Nakai          TEL:026-263-3922  -=-=-=-=
-=-=-=-=  Mail:nakai****@shink*****      FAX:026-263-4562  =-=-=-=-





Linux-ha-japan メーリングリストの案内
Back to archive index