fbpx

Mesosphere チュートリアル02:Mesosphere Chronos検証 #mesos

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

前回とりあげたMesosはOSでいうCPU動作を管理するカーネルに相当します。OSにinit.dやcronなどのサービスが存在しているように、Mesosにもそれらのサービスに相当するものがあります。
今回紹介するChronosは、OSでいうcronのように、Mesos上で動く各サービスの開始と停止(とエラー処理)を自動化するためのジョブ・スケジューラです。

本稿は下記の資料を参考に検証しております。
“How to run Chronos on Apache Mesos”:"Apache Mesos上でChronosを実行する方法"

事前準備

Mesosphere 3node-cluster検証』を参照して、Master 3ノード以上、Slave 1ノード以上のMesosphereクラスタ構成が作成できていること

1.インストール(すべてのMasterノードで実行)

Masterノードにsshログインし、ヘルスチェックします。

curl -i localhost:5050/master/health
HTTP/1.1 200 OK
Date: Fri, 16 Jan 2015 05:14:33 GMT
Content-Length: 0

動作がOKであれば、chronosのバイナリをダウンロードします。

curl -sSfL http://downloads.mesosphere.io/chronos/chronos-2.1.0_mesos-0.14.0-rc4.tgz --output chronos.tgz
tar xvf chronos.tgz

2.実行・動作確認

(Masterノードがクラスタ構成の場合、すべてのノードで設定が必要です。)

cd /root/chronos
./bin/start-chronos.bash --master `cat /etc/mesos/zk` --zk_hosts `cat /etc/mesos/zk` --http_port 8081

Webブラウザで http://<chronosを実行したノード>:8081/ を開きます。
次のような画面が表示されます。

chronos01

サンプルジョブを作成します。
画面上の[+ New Job]をクリックします。
(※クリックしても次の画面が出ない場合は4-1を参照してください。)

chronos03

NAME(ジョブの名前)
任意。今回は"test1"
COMMAND
Slaveノードで実行できるコマンド。今回は”hostname”
PARENTS
このジョブが依存する親ジョブ。今回は無視します。
OWNER(S)
ジョブ投入者のメールアドレス。今回は”root@localhost.localdomain”
SCHEDULE(スケジュール)
          
R(Repeat)
繰り返し回数
デフォルト値は∞ (無制限繰り返し)
ジョブ作成時は”繰り返したい回数+1”回を入力
日付
UTCのみサポート。ある特定の日時に実行したい場合、入力
P(Epsilon)
現在の日時が上記の開始日時を過ぎていた場合、どの程度の間隔で繰り返し実行するかを指定。例えば”T5M”とすると、ジョブが5分間隔で繰り返し実行されます。

今回は以上のように入力しました。

入力後、画面上部の[Create]ボタンを押すとジョブが作成されます。

ジョブ作成後の状況は次のようになります。

chronos04

ジョブの実行状況はMesosのUIでも確認することができます。
http://<chronosを実行したノード>:5050/ をブラウザで開きます。
(Zookeeperのリーダーノードでない場合はリダイレクトされます。)
Mesos管理画面上部の[Framework]をクリックします。

chronos05

Active Frameworks の欄から Chronosが動作していることが確認出来ます。
IDのリンクをクリックするとTask(詳細情報)が表示されます。

chronos06

各ジョブの状態が表示されます。
先ほど投入したジョブ ”test1” が [State]の情報から終了していることを確認できます。
確認後、[Sandbox]のリンクをクリックします。
イアkの
chronos07

ジョブの標準出力(stdout)、標準エラー出力(stderr)のリンクをクリックすると、それぞれの出力結果を確認することができます。

標準出力(stdout)の例
chronos08

標準エラー出力(stderr)の例
chronos09

3.起動時の自動実行設定

/etc/init/chronos.confを作成します。

description "Chronos scheduler for Mesos"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 10 5

chdir /root/chronos
exec ./bin/start-chronos.bash --master `cat /etc/mesos/zk` --zk_hosts `cat /etc/mesos/zk` --http_port 8081 >> /var/log/mesos/chronos.log 2>&1

4.注意点

4ー1.MesosのZookeeperクラスタ内で有効になるChronosは1つしかない場合

(ただしすべてのMasterホストで動かしてもよい)

1つめのChronosをZookeeperクラスタで動作させると管理画面にFrameworkとして登録されますが、
2つめ以降は管理画面に出現せず、そのノード上のUIからも新規ジョブのサブミットはできません。
これはChronosの仕様で、Mesosクラスタ内でジョブのサブミットなどの管理が出来るChronosは1つのみとなります。


2つのホストでChronosを動作しています。
(1つめ)ホスト:yarai-mesos04.ocdet.org
管理画面を見ると Chronos が、Frameworkとして登録されていることがわかります。
chronos10

ChronosのUIからジョブの閲覧や、サブミットも可能です。
chronos11

つぎに2つめのホストでChronosを動かしてみます。
(2つめ)ホスト名:yarai-mesos03.ocdet.org
ホスト上でプログラムは実行されましたが、管理画面を見ると yarai-mesos03 で動作する Chronos は表示されていません。
chronos12

ChronosのUIからジョブをサブミットしようとすると、ボタンがグレーアウトされており、サブミットはできないようになっています。
chronos13

どのホストの Chronos が有効(リーダー)になっているかは次のように確認することができます。

# curl -X GET http://<Chronosのホスト(なんでもよい)>:8081/scheduler/jobs -o /dev/null -w "%{http_code}:%{redirect_url}\n" 2> /dev/null

指定したホストが リーダーの場合は次のように出力されます。

200:
指定したホストが リーダーではない場合は次のように出力されます。
307:http://<リーダーのホスト名>:8081/scheduler/jobs
指定したホストで Chronos が動作していない場合は次のように出力されます。
000:

解説
Chronos の Web API はすべての Chronos で受け付けていますが、実際に応答を返すのはリーダーの Chronos のみです。そのため、その他の Chronos へ問い合わせを投げると、HTTP 307(Temporary Redirect) の応答コードと、リダイレクト先の URL が返ってきます。リダイレクト先のURLに含まれているホストがリーダーの Chronos ということになります。
上記のように Web API を使用することで Chronos のリーダーを確認することが出来ます。
※2015/1/16現在 ( version 0.14.0 ) 、このリダイレクト動作は Web API のみの実装であり Web UI には実装されていないようです。

次に1つめの Chronos ( yarai-mesos04.ocdet.org ) を終了させます。
管理画面上には大きな変化はないが、”Re-Registerd” の項目が更新されていることがわかります。

chronos14

先ほどの方法で Web API 確認をすると、リーダーのホストが変化していることがわかります。

# curl -X GET http://<Chronosのホスト(なんでもよい)>:8081/scheduler/jobs -o /dev/null -w "%{http_code}:%{redirect_url}\n" 2> /dev/nullookeeper-client

指定したホストが リーダーの場合は次のように出力されます。
200:
指定したホストが リーダーではない場合は次のように出力されます。
307:http://yarai-mesos03.ocdet.org:8081/scheduler/jobs

Web UI( yarai-mesos-03.ocdet.org )を見ると、先ほどはジョブのサブミットボタンがグレーアウトして、ジョブの一覧も表示されませんでしたが、再読み込みすると、ジョブの一覧が表示され、ジョブのサブミットも出来るようになりました。(スクリーンショット内のURIに注目)

chronos15

従って、起動時にすべての Masterノードで Chronos を起動しておくようにすれば、Chronos は自動的に冗長性を持った状態で動作することができます。

関連記事


Mesosphere チュートリアル01:Mesosphere 3node-cluster検証(CentOS6.5)

新規CTA