とあるはてな社員の日記 - まっさらなサーバを30分で本番投入できるようにする

はてなスターの投入時のバックエンド10台追加が30分程度で完了しちゃう件。

次の日に、バックエンドのサーバを一気に10台近くまで増やして、おおむね快適に使える状態になっていると思います。この時に、新しいサーバをまっさらな状態から、だいたい30分程度で本番投入することができていました。これを、どのように実現したのかを軽く紹介したいと思います。

通常こんな設定がいりますよね、って内容です。まぁフロントエンドじゃなかったらFireWall設定は不要ですよね。

サーバをバックエンドの本番に投入するまでには、おおまかに以下のことが必要です。

  • ハードの組み立て・設置
  • OSのインストール
  • アプリケーションの動作に必要なライブラリ等のインストール・設定
  • 監視などインフラの一部として動作するための設定
  • アプリケーションのデプロイ
  • ロードバランサの設定への追加
今回のサーバ増設では、ハードの設置終了から、本番に投入されるまで、だいたい30分程度、OSインストールの終了後からは、だいたい10分程度で終えることができました。

ここをきちんと設定してると、ものすごく楽ですね。

OSのインストールは、キックスタートで、BIOS設定と最初のトリガーさえ与えれた後は、全てネットワーク経由で済むように自動化されています。ここも大量のパッケージをインストールするので、それなりに時間がかかります。

Puppetで、ライブラリとか監視インフラとかやられているそうです。面白そうだなぁ。

aperboy&co.の人が書いた記事があったなぁ↓

アプリケーションのデプロイは、ずいぶん前から、switchtower(現capistrano)で、ほぼコマンド一発で済んでおり、これはすぐに終わります。
残りの「アプリケーションの動作に必要なライブラリ等のインストール・設定」と「監視などインフラの一部として動作するための設定」の部分は、以前は相当の時間と人手がかかっていた部分なのでした。が、「なんでもrpmパッケージ化 & yum で一発インストール」と最近、話題に登っていた「設定自動化ツールpuppet」を導入することで、ほぼ自動化されるようになり、大幅な時間短縮ができるようになりました。

なんでもrpmパッケージか+yumですか。これいいなぁ。管理しているサイト、たいした量じゃないけど考えてみるかな。

「なんでもrpmパッケージ化 & yum で一発インストール」では、MySQLApacheで特定のバージョンを使いたいとか、標準ではないライブラリを使いたい、という時も、全てrpm化してから、自前yumリポジトリ経由でインストールする、ということです。

さすが、はてな!200を超えるアプリが依存しているんですね、それに関連しているCPANなんて、考えたくもないw

一番大変なのは、大量のCPANモジュールなのですが、CPANの依存関係を解析してrpm化する手製スクリプトで、CPANモジュールのrpm化が、ほぼ自動化されています。おかげで、200以上にのぼるはてなのアプリケーションが依存しているCPANモジュールも、簡単にインストールができるようになっています。(また、rpm化のおかげで、CPANモジュールのアップデートを適用するのも簡単になっています。)