Apache Mesosはカリフォルニア大学バークレー校で開発されたクラスタマネージャで、複数のノードをクラスタとして構成し、分散アプリケーション・フレームワークの実行環境として効率的なリソース管理とスケジューリングを行う機能を提供している。
Apache Mesosで構成されたクラスタ環境をDockerコンテナの実行環境として使用するために、関連製品であるMarathonとChronosが使用されることが多い。Marathonはクラスタ内で任意のコマンドを指定した並列数で自動的に起動、維持する制御を行う。Docker環境ではコンテナの起動・停止および、コンテナが停止した場合に自動的に起動する自己修復の機能に使用される。ChronosはMesos上でcronと同様に、指定された日時や順序など「指定された条件」でサービスの開始や停止などを制御する。Docker環境でもコンテナの指定された条件での起動や停止などの制御に使用される。
ライセンスはApache License 2.0。2016年8月時点の最新バージョンは、Mesosが2016年7月6日にリリースされたVer 1.0.0、Marathonが、2016年7月13日にリリースされたVer 1.1.2、Chronosが2015年8月28日にリリースされたVer 2.4.0となる。
MesosはRHEL/CentOS/Ubuntuなどの各種Linuxおよび、Yosemite以降のMac OS X、Windows Server 2012以降、Windows 10でも使用することが可能である。基本的にはインストール用のバイナリパッケージを使用する方法が一般的であり、Linuxであれば、リポジトリを追加し、yumコマンドやaptコマンドでインストールを行う形となる。今回の評価はCentOS 7.2上にMesos、Marathon、Chronosをインストールする形で検証を行っている。最小構成はMesosマスター兼ノード×1台で構成できるが、今回は別途、ノード×1台を追加した2台構成で行っている。
Mesosのインストール方法は公式ガイドにも記載されているが、クリエーションラインの技術ブログ「Mesosphere チュートリアル01」に、複数サーバでクラスタ構成を取る方法が詳しく記載されており非常に参考になる。クラスタ構成を取る上では、通信を行うポート数が多く、ファイアウォールの開放が不十分だと正常に起動しない。必要なポートは事前に確認しておくことが必須となる。検証に使用した環境の構築手順は、以下の弊社技術ブログで公開しているので参考にしていただきたい。
参考リンク:Apache Mesos上でMarathonとChronosを動かしてみた(Tech Sketch/TIS)
ブラウザでMesosマスターの5050ポートにアクセスすると、Mesosのダッシュボードが表示される。ノード×2台が存在し、合計のリソース値がどれくらいあるか管理されていることが分かる。
ブラウザでMesosマスターの8080ポートにアクセスするとMarathonのダッシュボードが表示される。
Marathonで実行するコンテナの情報については、json形式のデータファイルを使い、以下のようなcurlコマンドで事前登録する。
$ curl -X POST -H "Content-Type: application/json" http://10.255.202.93:8080/v2/apps -d@marathon-api.json
{ "container": { "type": "DOCKER", "docker": { "image": "libmesos/ubuntu" } }, "id": "ubuntu-marathon", "instances": 1, "cpus": 0.5, "mem": 256, "uris": [], "cmd": "while sleep 10; do date -u +%T; done" }
「Create Application」で起動するコンテナと同時起動数を指定すると、ノード内でロードバランスされた状態でコンテナが起動する。Marathonから明示的に同時起動数を削減しない限り、コンテナがダウンして数が減少すると、空いているノードに対して、自動的にコンテナを追加、起動する。
ブラウザでMesosマスターの4400ポートにアクセスすると、Chronosのダッシュボードが表示される。
Chronosで実行するジョブの情報については、json形式のデータファイルを以下のようなcurlコマンドで事前に登録する。
$ curl -L -H "Content-Type: application/json" -X POST http://10.255.202.93:4400/scheduler/iso8601 -d@chronos-api.json
{ "schedule": "R/2016-08-22T09:45:00Z/PT2M", "name": "mariadbjob", "container": { "type": "DOCKER", "image": "mariadb" }, "command": "docker run –name mariadb –e MYSQL_ROOT_PASSWORD=root –d mariadb" }
MySQL用のChronosのjsonファイルのサンプルなども公開されており、カスタマイズして使用してみたのだが、現状のChronosではcontainerにtype/image以外の設定を行うとエラーになってしまった。そのため、例としてはあまり良くないのだが、command行で直接docker runを実行する形で対処している。
登録されたジョブは指定日時になると自動的にChronosから実行されるが、ジョブの管理画面から手動で強制実行することも可能である。
Marathonの開発も行っているMesosphere社がApache Mesosの機能を強化した商用版である「Mesosphere」を提供しており、有償サポートも行っている。さらにパブリッククラウドでの利用を簡単にするため、AWS、Microsoft Azure向けのサービスも提供されている。 国内でも前述のクリエーションラインをはじめとする各社から有償サポートを受けることが可能だ。
初期構築が若干難しいことや、Marathon、Chronosを定義するためのjsonファイルの作成などに学習時間が必要なことはあるが、参考文献やインターネット上の情報も多いため、解決は難しくないだろう。世界的企業での導入事例、実績もあり、安定した環境の実現が期待できる製品である。
Copyright © ITmedia, Inc. All Rights Reserved.