2014年12月31日水曜日

ログローテーション時Apacheが突然死することがある。

バーチャルホストをたくさん切っているサーバで、年に数回Apacheが突然死することがあって、
プロセスがたくさん立ち上がっているわけでも、SWAP食いつぶしてOOMKillerさんに殺された形跡もないのに不思議だなぁ。と思っていたのですが、また落ちたので少々まじめに調べてみました。

まずは基本のerrorlogの調査。すると、なんか定期的にSIGHUP信号を受けてApacheが再起動しているようです。
お?自動再起動Cronなんて仕掛けたっけ?と調べるも該当なし。
しかも、ある時間帯に集中して、数分おきに再起動しています。
Zabbixによると、その後Apacheがお亡くなりになったようです。
バックアップの時間帯と近かったので、メモリ不足を疑いましたが、OOMKillerさんの形跡はなし。
メモリ使用率やディスクの枯渇もない様子。


ローテーションか!と/var/log/cronを調べたところ、cron.dailyが走っていました。
原因としては、

  1. cron.dailyがキックされる。
  2. ログローテーションが起動。
  3. logrotate.d配下にある各バーチャルホストたちのログローテーションが動き出す。
  4. ログローテーションのスクリプトにはApacheをreloadするように書かれている。
  5. バーチャルホストたちのログがローテーションするまで頻繁にreloadされる。(多分非同期?)
  6. Apache数分おきにreloadされコケる。

あたりと推測されます。
対策としては、

  • reloadをやめてgrasefulにする。ただし、ログ書き出しのタイミングが不明なのでsleepを入れる。参考 ただ、grasefulにした場合のsleep時間は結構問題かも。参考
  • そもそもローテーション時Apacheを再起動しない。ただし、ログファイルコピー中のログは保存されない。参考
  • ログローテーションをしない(ぉ

かなぁ。
皆さん色々苦労されているようで。

2014年12月20日土曜日

オープンセミナー2015@広島を開催します!

突然ですが告知です!

来年2月14日、オープンセミナー2015@広島を開催いたします。



参加申し込みはこちらから。

今回のテーマは「クラウド時代の構成管理入門」とし、Chef、Ansible、そしてPowerShellDSCをとりあげます。

オープンセミナーとは、2003年より中四国地域で開催されているIT技術者向けの非営利の無料セミナーです。
現在は香川県、岡山県、徳島県、広島県、愛媛県で開催されています。
企画と運営は各地域の技術系ユーザコミュニティのボランティアにより行われています。

セッション内容としては、

なぜこのテーマにしたのか?ですが、俺が聞きたい!自分が構成管理に衝撃を受けたことが大きいです。
今まで物理的なサーバをセットアップするのに、丸一日掛かることも珍しくありませんでした。
また、バージョンアップなどの作業も大変でした。
しかし、仮想化技術が進み、クラウドなどインフラをAPIで制御する、つまりインフラをソフトウエアでコントロールできるようになりました。
しかも、ミドルウエアのインストールなども構成管理を利用することによりプログラマブルに制御できるようになりました。
言い換えれば、プログラマがインフラをコントロールできるようになった。とも言えます。

自分は衝撃を受けました。
今まで物理サーバを一台一台丹精込めてセットアップしていたものが、わずか数分で出来るわけです。
開発の分野では、開発環境と本番環境が同一であることが望ましいのですが、実際には中々そうは行きません。
また、途中でミドルウエアのバージョンが変更されたりなど、その都度環境を再構築しないといけません。
しかし、クラウドやVagrantなどを利用すれば、環境のクローンを作ることも出来ますし、構成管理を利用すれば、ミドルウエアのインストールなども自動化できます。そのまま本番環境を構築することだって可能です。

これはインフラのみならず、開発者にとっても非常に有益だと思い、ぜひ多くの人に知ってもらいたいと、このテーマにしました。

構成管理はフレームワーク導入と似ているところがあると思います。
導入すれば便利なのはわかるが、いざ導入しようとすると結構難解で、まずどこから手を付ければいいのか分からない。どれを選べばいいかわからない。学習コストが・・・
だったら、講師を呼んで聞いてみよう!

この機会に、DevOpsやクラウド、構成管理などに興味があればぜひご参加ください!