甘いもん好きおやじのブログ

日常の面白いことを描きます。

/var/log/messages(syslog)の出力先がいっぱいになるとクラスタが起動しないby ORACLE

/var/log/messagesのmessageファイルがでかくなりすぎて、ディスクの使用量がいっぱいになりました。

その状態でORACLE RACクラスタを起動しようとしたら起動できませんでした。
途中まで起動しようとした形跡はあります。
いくつかのクラスタ系プロセスが上がってはいます。
ただ、メインのocsd.binが上がってないため、クラスタが上がり切れないでいます。
そして、落とすこともできない。
にっちもさっちもいかないとはこのこと。。。
サーバを再起動しても同じでした。

なぜ?


二台のRAC
1ノードずつ、PSUを当てた時の話。
ノード1は成功。
ノード2はというと。


そもそも、ORACLEPSUを当てている時の、ノード2クラスタ起動のところにさかのぼります。
これが、いつまでたっても起動完了にならない。
じーっとしている。
そうこうしている間に、エラーでPSU当てるOPatchautoが死亡。

びびる。

同じコマンドでもう一度PSUを当てるが、エラーが出てダメ。
泣き入る。
最悪、バックアップからリストアかなあ。。。

ふと作業端末を離れ、コンソールからサーバにログインする。

すると、「ディスクいっぱいだよ」というメッセージが。
dfコマンドで確認すると、/var/logのディスクの使用率が100%。
そこに出力されているメッセージファイルが70GByte!

「なにい!?」

これだけ大きいとcatで開けないので、下1000行をtailで見る。
そこには、ノード2からノード1へのインターコネクトを使った通信をDROPするメッセージが大量に。
ログの出力時刻を見ると、さっき、PSUを当てた後に、クラスタを上げている時刻に発生したものだと判明。
ノード2のクラスタが上がらなかったのは、インターコネクトの通信がファイアウオールでブロックされていたからか。。。
そして、インターコネクト通信をブロックしたという旨の大量の/var/log(syslog)が出力され、それがディスクを圧迫した。
遂には、容量不足で/var/log(syslog)に書き込むことが出来なくなった。
クラスタを起動するとき、/var/log(syslog)にメッセージを出力することがあるのだろう。
だが、/var/log(syslog)に書き込むことが出来なければ、起動することはできない。


以下を行えば、クラスタを起動できると予想。
 ・/var/log(syslog)」を消して空き領域を作る。
 ・iptablesの要塞化にインターコネクトのACCEPTを追加する。


iptablesの方は、すぐできた。
/var/log(syslog)ほうは、messageファイルを消しても容量が空かない。
messageサービスがmessageファイルを掴んでいるから、ファイルが消えたように見えてるだけで、容量が実際は解放されていないことが分かった。
messageサービスを落とすことで、容量が空いた。

この状態で、ノード2のクラスタを起動!

無事復活。

OPatchautoが途中で死んだから、ちゃんとパッチが当たってるか心配。
だからlsinventoryで確認。
よかった、当たってた。


いやあ、肝を冷やしましたとさ。

しかし、ORACLEの知識だけじゃ対応できないっすね。
こう言うことが起こると。
クラスタが起動できなかったら、ORACLEクラスタlogだけじゃなく、syslogやiptablesも見る。
OSの設定を疑う。
一つずつ冷静に切り分けて行けば、たどり着けるとは思います。
でも、何か起きるとやっぱ慌てる!