Tech Sketch Bucket of Technical Chips by TIS Inc.

実践! CentOS 7へMesosをインストール!

Pocket

実践! CentOS 7へMesosをインストール!

はじめに

分散ジョブ実行ツールであるApache Mesosがバージョン0.20.0でDockerをサポートして以来、Mesosは更に注目を集めてきました。今まではMesos-Slaveへジョブを実行させるための環境構築を、機能が追加される度に行わなければいけませんでしたが、その手間からはこのバージョンによって開放されたのです。
「・・・これは!」と思い早速使ってみようとCentOS 7へインストールを実施しようとしたが、手順がわからずに挫折した方も居るのではないでしょうか?
そこで今回はmesosphereから提供されているrpmリポジトリを使用し、CentOS 7上へyumで簡単にインストールが可能なインストール手順から、UIの操作・curlコマンドによる Chronos / MarathonへのREST APIジョブ実行依頼を実施してみたいと思います。

注意点

  • 本記事では、ジョブの実行にあたり下記ソフトウェアを使用しております。各種ソフトウェアの機能詳細については記載しておりませんので、予めご了承下さい。
アプリケーション 用途 バージョン DL先
mesos master ジョブ実行管理 0.21.1 mesosphere repo ※1
mesos slave ジョブ実行先 0.21.1 mesosphere repo ※1
zookeeper mesos masterの冗長化に使用 mesosphere-zookeeper-3.4.6 mesosphere repo ※1
marathon mesos framework。コンテナの管理に使用 0.8.0 mesosphere repo ※1
chronos mesos framework。 Jobのスケジュール管理に使用 2.3.2 mesosphere repo ※1
docker コンテナアプリケーション。 mesos slaveのサーバ上で実行される 1.3.2 CentOS repo

※1 インストール手順内にてyum installを実施しています。

mesos にはDNSによる名前解決が必要となりますが、今回は簡易構成の為hostsによる名前引きを使用します。

実践した構成について

サーバ構成

mesos

今回は、KVM上にMesosMaster3台・MesosSlave3台を構築しており、Master/Slaveの構成は上記となっています。

また、OS設定情報は下記となっています。

  • mesos-master情報
名称 サーバ1 サーバ2 サーバ3
ホスト名 develop-mesos-master1 develop-mesos-master2 develop-mesos-master3
IPアドレス 192.168.122.11 192.168.122.12 192.168.122.13
  • mesos-slave情報
名称 サーバ1 サーバ2 サーバ3
ホスト名 develop-mesos-slave1 develop-mesos-slave2 develop-mesos-slave3
IPアドレス 192.168.122.15 192.168.122.16 192.168.122.17

システム構成

system-configuration

  1. ユーザはchronos / marathon、または直接mesos-masterへの実行依頼を発行します。
  2. masterは、情報を受け取り次第slaveの負荷状況を自動的に判断し、jobの実行依頼を出します。
  3. slaveでの処理が終了次第、結果をmasterへ返します。dockerを使用している場合は、コンテナを破棄します。

事前に

  1. 本検証で使用したCentOS 7は、SELinuxが無効化されています。
  2. mesos-masterは3台構成での説明となっていますが、1台での動作も可能です。作成する台数で手順を読み替えて下さい。
  3. mesos-slaveは3台構成での説明となっていますが、1台での動作も可能です。作成する台数で手順を読み替えて下さい。

インストール

共通設定

  • 対象機器
  1. develop-mesos-master1
  2. develop-mesos-master2
  3. develop-mesos-master3
  4. develop-mesos-slave1
  5. develop-mesos-slave2
  6. develop-mesos-slave3

1. 名前解決設定

本来であれば、BindやDnsmasq等から名前を解決するべきですが、今回はhostsファイルで環境を作成します。

Mesos Master インストール

  • 対象機器
  1. develop-mesos-master1
  2. develop-mesos-master2
  3. develop-mesos-master3

1. mesosphereリポジトリ登録

2. mesos-masterインストール

クォーラム設定

$ sudo echo 2 > /etc/mesos-master/quorum

※ この値[上記"2"]は、mesos-masterの台数÷2以上として下さい。

3. zookeeperセットアップ

最下部へzookeeperサーバのIPを追加

zookeeper連携用のID(1-255)を設定

$ sudo echo 1 > /var/lib/zookeeper/myid

※ "1"の箇所をサーバごとに変更してください。

mesos-zookeeper連携設定

$ sudo echo "zk://develop-mesos-master1:2181,develop-mesos-master2:2181,develop-mesos-master3:2181/mesos" > /etc/mesos/zk

4. slave停止

5. master firewall許可設定

6. master 自動起動設定と再起動

Mesos Slave インストール

  • 対象機器
  1. develop-mesos-slave1
  2. develop-mesos-slave2
  3. develop-mesos-slave3

1. mesosphereリポジトリ登録

2. mesos-slaveインストール

mesos-zookeeper連携設定

$ sudo echo "zk://develop-mesos-master1:2181,develop-mesos-master2:2181,develop-mesos-master3:2181/mesos" > /etc/mesos/zk

docker連携設定

$ sudo echo 'docker,mesos' > /etc/mesos-slave/containerizers
$ sudo echo '5mins' > /etc/mesos-slave/executor_registration_timeout

4. dockerインストール

3. slave firewall許可設定

※ mesos-masterから受け取ったJobをmesos-clientで実行する際、何故かslaveのloopbackを使用せずにfrontのinterfaceを使用します。そのため、必ず「自分自信のフロントからのListen許可する」設定を加えてください。

4. master停止

5. slave 自動起動設定と再起動

動かしてみる

お待たせしました。実際に動作する画面を見てみましょう。

  • Chronos

http://develop-mesos-master1:4400/

chronos-screen2

  • Mesos

http://develop-mesos-master1:5050/

chronos-screen3

  • Marathon

http://develop-mesos-master1:8080/

marathon-screen3

UIの雰囲気が全て異なるのが味わい深いですね。

jsonファイルを作成し、curlでPOSTしてみる

    では、実際に命令を発行してみましょう。
    今回は、mesosphereのチュートリアルにあるlaunch-docker-container-on-mesosphereを使い、コンテナイメージを取得し終了条件無しで日付をひたすら出力する処理を走らせてみます。

    Chronosへ実行依頼を出す

$ curl -L -H "Content-Type: application/json" -X POST -d@chronos-api.json http://develop-mesos-master1:4400/scheduler/iso8601

しばらくすると、Jobが1つ作成されると思います。

chronos-api

スケジューラなので実行時間まで待つ事になりますが、テストなので強制的に実行してみましょう。「Force Run」をクリックします。

  • Marathonへ実行依頼を出す

こちらもしばらくすると、Jobが1つ作成されると思います。
marathon-api

作成されたJobのID[ /ubuntu-marathon ]をクリックしてみましょう。
develop-mesos-slave1でコンテナが上がった事がわかります。
marathon-api2

Mesosでの表示

masterのUIにて、無事に2つのコンテナが起動されている事がわかります。
mesos-screen3

最後に

今回の手順を作成していく上で、ハマりどころになった点がありました。
それはサーバのFirewallです。先の手順でも触れていますが、mesosはJobを実行する為に自分自信のloopbackアドレスを使用せず、mesos間通信インターフェースのハイポートを使用していました。
Firewallを無効化するのも1つの手ですが、FirewallのSourceIPがmesos間通信用インターフェースだった場合は許可する設定を加える事をおすすめします。



Jenkinsを始めmesosプラグインが普及し始めている今、折角ですので新しいOSのバージョンでmesosを構築してみてはいかがでしょうか。

エンジニア採用中!私たちと一緒に働いてみませんか?