Tumblrは,データセンタ自動化のためのオープンソースツールGenesisをリリースした。新たに接続されたマシンの検出,TumblrのCollinsインベントリ管理システムへのハードウェア詳細情報の通知,ハードウェアコンフィギュレーションを実行するメカニズムという,一連のプロセスを統合する。
Genesisは,PXEによるブート用にストリップダウンされたLinuxイメージと,ホストで実行するタスクを記述するためのRubyベースのドメイン固有言語(DSL)で構成されている。Genesis DSLを使用してタスクを作成することにより,パッケージのインストールやコマンドの実行が容易になる。タスクの例として,システムの実稼働前にストレステストを実施してハードウェアエラーの検出可能性を向上するTimedBurninが,Genesis Gitgubリポジトリで公開されている。
Genesis DSLは,ホスト上へのオペレーティングシステムのプロビジョニングの先立って,BIOS設定の変更やRAIDカードの設定といったハードウェアコンフィギュレーションを行う機能も提供している。ハードウェアコンフィギュレーションタスクの例として提供されているBiosConfigR720は,Dell R720のBIOSをTumblr仕様に正しく設定するタスクだ。
Genesisの管理するマシンが起動すると,そのマシンがTumblrのCMDB(Configuration Management DataBase)アプリケーションに通知される。これにより,マシンインベントリ管理の自動化が可能になる。CollinsのGithub上のプロジェクトWebページには,このアプリケーションがTumblrのインフラストラクチャ全体の正確性と知識の根源である,と記されている。Tumblrの製品環境のすべての情報はCollinsに格納され,エンコードされる。このデータが,Tumblrのデータセンタ自動化のすべての動作で使用される。
Collinsアプリケーションは,Tumblr製品環境内にあるすべての物理的サーバ,スイッチ,ラックを管理するシステムとして開発された後,ハードウェアのインベントリやIPアドレス,ソフトウェアをサポートするように拡張されたものだ。Tumblrは,Collins APIとデータが自動プロセスを実行する上で,非常に好都合なメカニズムを提供してくれることに気が付いた。現在のCollinsは,ボタンひとつのクラスタデプロイ提供,ハードウェアトポロジ変更時のコンフィギュレーション生成,ソフトウェア構成変更時のアップデート,ソフトウェアでデプロイの管理支援といった機能を実装している。
データセンタ内のマシン管理にGenesisを使用するためには,サーバの属性をいくつか追加する必要がある。
GenesisのGithubプロジェクトにあるINSTALL.mdには,さらに詳細な操作説明とともに,必要なサーバ設定オプションに関しても記述されている。
同じプロジェクトのGithub README.mdには,Genesisによって管理されるマシンの一般的なワークフローに関する説明がある。最初にマシンが起動すると,DHCPサーバがPXEファームウェアに対して,続いてiPXEを起動するように指示する。起動したiPXEは,リモートサーバからメニュー選択を取得して,ユーザに対して表示する。ユーザが選択を行うと,Genesisカーネルとinitrd(ファイルサーバから取得)が,カーネルのコマンドライン上のパラメータと共にロードされる。
Genesis OSがロードされると,genesis-bootloaderが,第2ステージを記述したRubyスクリプトのフェッチを実行する。その中で,必要な基本RPMとRuby gemがインストールされた上で,リモートサーバからGenesisタスクのフェッチが行われる。そして最後に,それらのタスクが実行される。プロジェクトのGithub README.mdには,実際の例が記載されている。
新しいサーバを起動する場合を考えてみましょう。DHCPリクエストを行って,iPXEメニューをロードします。この場合,MACアドレスが今までなかったことから,新しいマシンであることが分かります。そこで,Genesisをディスカバリモードで起動して,Collinsに返送する必要のあるハードウェア情報を収集するタスクを実行します。私たちのセットアップでは,この中に,ハードドライブとその容量,CPUの数といったものだけでなく,より詳細な情報,例えばサービスタグ,どのメモリバンクが使用されているか,全インターフェースが接続されているスイッチポートの名称といったものまで含まれています。その後はTimedBurninタスクを使用して,48時間のハードウェアストレステストを実施します。
Genesisには,VirtualBoxベースの仮想テスト環境が含まれていて,フレームワークの変更と新規タスクを,エンドツーエンドでテストすることができる。テスト環境に関する詳細情報とコンフィギュレーション方法については,プロジェクトのGithub ‘testenv’サブディレクトリにある,README.mdに記載されている。
Tumblrのブログには,Genesisについて,シェルスクリプトの集合体であった旧システムのリプレースであり,Ruby DSLの採用によってよりフレキシブルで,理解やメンテナンスが容易な,スタッフにとって利用しやすく,拡張しやすいシステムである,と説明されている。
GenesisはAapacheライセンスによってオープンソース公開されているが,現在はまだ開発の初期段階にある。Tumblrでは,プロジェクトを向上させるため,バグリポートや機能リクエスト,質問を,プロジェクトのGithubリポジトリ,またはGenesis-user Googleグループ経由で募集している。