本日の戒め
ここのところ2W程度の間悩まされてきたサーバの障害。まだ確証は取れないが、とりあえず動いたと思う。
まぁいくつも戒めがある。
Raid5を過信するな。
ディスク障害時のデータ保護を目的とするRaid5とは言えどもRaidのコントロールカードが逝ったらデータが吹き飛ぶかも知れない。わかっていたことだけど。今回、1日の終わりにバックアップを取っていたが、バックカップ後から障害発生時までのデータは保証されない可能性がある。より高度のバックアップを取る(金がかかる)か天に祈って覚悟を決めるか。
いちど故障したRaidカードの下のディスクは信用するな
fsckで障害がないように見えても潜在的にディスク障害が残り書き込みが出来ないエリアが地雷のように残っている可能性があるみたい。突然OSがエラーを吐き始める。データの保全をしてさっさとディスクのパーティションから切り直してOSの再構築から行うべきかなと。
ApacheでCGIが動かない場合
既存の環境で動作しているCGIが新しい環境で動かない場合、これで今回ハマった。 Premature end of script headersの500エラー。
通常は、パーミッションやら文字コードやらヘッダの改行コードやらCGIのプログラムエラーだけど、それらでも無いと、どうしても違うという場合、Apacheのsuexecを疑ったら良いみたい。
suexec自体はバーチャルサーバ等でCGIプログラムを違うユーザ権限で走らせる仕掛けみたいだけどセキュリティ的に危ういのでsuexecが行う権限チェックが非常に厳しく、パスしなかった場合上記のエラーを吐く。Apache2ではここに記載があった。
見ないよなー、Apacheのドキュメントなんか。(コラ!)日本語で書いてあるドキュメントなので少しは読めよというわけで、
ソースからコンパイルしたらオプションは自分で選べるんではまらないけど、以前の環境と合わせるためCentOSの4.3に入っていたパッケージをそのまま使ったら最初からもれなく付いてきた。
suexecのバイナリをrenameしてapacheをgracefulで上げなおしたら嘘みたいにCGIは動いた。
前にも同じようなことがあって、その時はサーバの導入ベンダに丸投げしていたんで今回原因がわからずはまった。
これから変更したバックアップサーバとの接続環境に合わせたバックアップスクリプトを書いてお仕舞い。
長かった。早く帰ってシャワーを浴びたて眠りたい。