こんにちは。@jedipunkz です。
今回はクラスタマネージャである Mesos について書こうと思います。
Mesos は Apache Software Foundation によって管理されるソフトウェアで分散アプリ ケーションをクラスタ化することが出来るマネージャです。Twitter が採用しているこ とで有名だそうで、開発にも積極的に参加しているそうです。
@riywo さんが既に Mesos + Marathon + Zookeper + Docker な構成を組む手順をブロ グで紹介されていますので是非試してみると面白いと思います。
http://tech.riywo.com/blog/2013/09/27/mesos-introduction-1/
私は理解した Mesos のアーキテクチャについて少し書いていきたいと思います。
全体の構造
+-----------+
| zookeeper |
| quorum |
+-----------+
|
+----------------+----------------+
| | |
+--------------+ +--------------+ +--------------+
| mesos-master | | mesos-master | | mesos-master |
| active | | hot standby | | hot standby |
+--------------+ +--------------+ +--------------+ ...
|
+----------------+----------------+
| | |
+--------------+ +--------------+ +--------------+
| mesos-slave | | mesos-slave | | mesos-slave |
| executor | | executor | | executor |
| +----++----+ | | +----++----+ | | +----++----+ |
| |task||task| | | |task||task| | | |task||task| |
| +----++----+ | | +----++----+ | | +----++----+ |
+--------------+ +--------------+ +--------------+ ...
基本的に few masters + many slaves の構成です。task は slaves の上で走ります。 master はオファーによりアプリケーション(フレームワーク)に対して CPU, メモリの リソースをシェア出来ます。リソースは slave ID, resource1: amount1, resource2, amount2, … といった配列を含みます。master はポリシに従いそれぞれ のフレームワークに対してリソースをどれだけ提供するか決定します。プラグイン形式 で様々なポリシを取り込む仕組みになっています。
mesos は zookeeper により HA を組むことが出来ます。1つの active master と複数 (もしくは1つの) stand-by master(s) の構成です。active を投票するため zookeeper のアルゴリズムが用いられます。
mesos-master を起動する際に下記のパラメータを渡すとmulti masters の構成が組め ます。
--zk=zk://host1:port1/path,host2:port2/path,...
それに対して multi slaves に対しては下記のパラータを渡します。
--master=zk://host1:port1/path,host2:port2/path,...
ネットワークの分断
ネットワークの分断により様々な事象が発生します。幾つかのパターンによる動きにつ いて見ていきます。
- slave が master と分断された場合
ヘルスチェックが失敗。master は slave のことを ‘deactivated’ と判断しその slave に分配した task を LOST とします。
- master に再接続出来ない場合
‘deactivated’ となった slave が master に再接続出来ない場合、シャットダウンの 指示が送られる
- slave が zookeeper と分断された場合
master がいない状態となり、再び master の投票が行われ active master が現れるま で master からの指示を拒否する
リソースのオファ
+-------------------+
| framework |
| +----+----+ |
| |job1|job2| |
| +----+----+ |
| scheduler |
+-------------------+
~(2) |(3)
| ~
+-------------------+
| mesos-master |
| allocation module |
+-------------------+
~(1) |(4)
| ~
+-------------------+
| mesos-slave |
| executor |
| +----+----+ |
| |task|task| |
| +----+----+ |
+-------------------+
リソースのオファの流れについて。
- (1) mesos-slave が空きの CPU, Mem の状況(4cpus,4g mem)を mesos-mater に伝える。
- (2) mesos-master はそのリソース空き状況を framework に対して伝える
- (3) framework の scheduler は mesos-mater に対して mesos-slave の上で動かすべ き2個のタスクについて伝える。1個めは 2cpus, 1g mem。2個めは 1cpus, 2g memと。
- (4) master は task を slave に対して伝える。結果 1cpu, 1gb mem がアロケートさ れない状況だが、それについては別の framework に対してアロケートすることとな る。
まとめ
このクラスタ自体が1つの OS かのような動きを取ることが見て取れます。Mesos の上 で Hadoop, Spark などを稼働させることが出来るそうですが、次回、私は docker を動 かしてみたいと思っています。
http://mesosphere.io/2013/09/26/docker-on-mesos/
ここが参考になります。
駆け足でしたが、以上です。