はじめまして kihira-h です。 普段は、サーバ管理やネットワーク構築などインフラ関係の仕事をしています。 今回は、この「KLab若手エンジニアの これなぁに?」、通称 “若手ブログ” のインフラ構成をご紹介します。 弊社には DSAS と呼ばれる分散冗長構成のインフラ技術がありますが、この「若手ブログ」も DSAS 程ではありませんが分散環境の上でサービスされています。

インフラ構成

まず、「若手ブログ」インフラの構成要素には
  • リアルサーバ
  • ロードバランサ
  • マスタサーバ
の3つがあります。 「リアルサーバ」が、皆さんからのアクセスを受け付けている Web サーバです。 現在のところ2台のサーバが稼働しています。 次の「ロードバランサ」が、下図のように配下のリアルサーバに対してアクセスを振り分けています。

このロードバランサには、リアルサーバの死活確認を行う仕組みがあり、万一リアルサーバの一部がダウンしても自動的にそのサーバは分散対象から外れます。

最後に、「マスタサーバ」を紹介します。このサーバがある意味この分散環境のポイントでもあります。 先ほど、リアルサーバが Web サーバだと説明しましたが、このマスタサーバも Web サーバです。リアルサーバ2台に加えて、このマスタサーバでも Apache が稼働していて WordPress が動いています。

記事の書き方

それでは、この若手ブログでどのように記事を投稿していくのかをご紹介します。 私たちは、マスタサーバ上で動いている WordPress の管理ページにアクセスして、記事を書き込みます。WordPress のデータは MySQL 上に乗っているので、記事本体はリアルサーバ上でも即座に反映されます。 では画像などの素材のアップロードは、どのようになっているのでしょうか? 実は、マスタサーバ上にアップロードした素材を、スクリプト等を駆使してリアルサーバに同期しているのです。

上図の通り、素材のアップロードは、大きく分けて「マスタサーバへのアップロード」と「各リアルサーバへの同期」の2つの手順で行われます。それぞれどのように行われているか詳しくご説明します。

  1. 関連ファイルのリポジトリ管理 若手ブログにアップロードされている画像などのコンテンツや、WordPress のテーマ、さらには WordPress 本体も含めて関連するファイルは全て git リポジトリ上で管理されています。アップロードしたいファイルを追加してコミット、その後社内のサーバ上のリポジトリにプッシュすることでメンバー間のファイル共有を行っています。
  2. マスタサーバへのアップロード 素材のサーバへのアップロードには rsync を使っていますが、毎回コマンドラインを組み立てるのは面倒なので Makefile を作って使用しています。
    $ make install-young
    のように実行すると、マスタサーバ上のコンテンツがローカル上のファイルに同期するように rsync が実行されます。
  3. アップロード内容のチェック 3.で行ったアップロードはマスタサーバのみに対して行われるため、外には公開されないマスタサーバ上で内容のチェックができます。例えば、テーマの変更や一部の編集などを行った場合でも、公開系に影響を与えずに確認ができるということです。
  4. 各リアルサーバへの同期 マスタサーバからリアルサーバへの素材の展開も、マスタサーバへのアップロード時と同じく Makefile にターゲットが仕込んであります。
    $ make mirror-young
    のように実行すると、マスタサーバ上で各リアルサーバへの rsync が実行されてファイルが同期します。

インフラ構成のポイント

この「若手ブログ」のインフラのポイントは、分散リポジトリ( git )と Makefile による省力化です。 ソースコードだけでなく素材などもまとめてリポジトリ上で管理してしまうことで、アップロード済みデータの管理を簡単にできるほか、コミットのログから誰がどんな変更を行ったかが追跡できるほか、トラブルが発生しても簡単に1つ前のリビジョンに戻すことができます。 また、アップロードに必要なコマンドも引数を含め全て Makefile に書いてしまうことで、扱いやすくミスの少ない作業ができます。 皆さんも身近なファイル管理などを、リポジトリ管理 &Makefile で自動化してみてはどうでしょうか?