俺のブログサーバーがこんなに遅いわけがない6。docker構成見直し敢行。

Linux

さて、このブログサーバーはdockerを用いて環境をサンドボックス化して運用しているのですが、構成の見直しに着手しました。理由は簡単で、「dockerをdockerらしく使い、その恩恵を受けるため」です。

現状の構成。

VPSの上で1個のdockerを動かし、その中でプロセスマネージャmonitを稼働、その管理下で、apache、php-fpm、mysql、newrelicの管理管理エージェント、syslogd、sshd、cron、fluentdまですべて動かし、管理はSSHでログインする、という構成です。要するに、dockerコンテナをVPS的に使っている状態です。

この構成にはそれなりのメリットがあり、VPS本体のOS環境とは独立して環境ができているのは非常に便利なのですが・・・ちょっとした問題がありました。

ここで稼働しているphpもmysqlも、CentOS6標準のものなので、phpが5.3、mysqlが5.1です。性能改善のため、これらのバージョン・アップをしようと思ったのですが、これだけのサービスが動いていると、パッケージ相互の影響やら何やら、いろいろ考えなくてはいけなくなる、と。動かなくなったら大変なので、結構な手間がかかる。

改めて考えてみた。こういう手間を避けるためのdocker、Immutable Infrastructureなのではないか?と。そうやって考えてみると、今の使い方は、dockerの正しい使い方にはなっていないということです。

そこで、いろいろ調べてみると、宗教論はあるようですが、やはりdockerコンテナはImmutable Infrastructureとして、綺麗に動かすべし、というのが正論のようです、ズバリ言えば、

  • プロセスマネージャを動かさない。
  • sshでログインしない
  • 変動するトランザクションファイルはdockerの外部で管理する

とか、こんな話。言われてみれば確かに、現状dockerで動かしているこの環境、不定期にcommitしているのですが、ログからwordpressのコンテンツまで抱えたイメージサイズは6GBを超え、commitにかかる時間は30分近くになっている。コンテナの再実行をしようとすると、結局この時間がメンテナンス時間となってしまうので、あまり良くない状態です。

そこで、一念発起して、docker複数構成に変更することにしました。

  • 現在稼働している各サービスを別コンテナにする
  • トランザクションファイル(ログ等)はずべてホストとの共有ディレクトリに書き出す
  • 各サービスのミドルアップグレードを、個別に別コンテナを作成して実施できるようにする
  • commitのコストを下げる

newrelic関連のモジュール構成がちょっとややこしいのでどうしようか考えていますが、まずは、明らかに独立できるmysqlから、分離してみようと、構成変更に着手しました。

詳細はつづく・・・いろいろトライ&エラーでやってますので・・・

コメント

タイトルとURLをコピーしました