Apache Mesos
Apache Mesosについて。メイソースと発音するらしい。作業メモでありどなたかにお見せすることを想定して書いていない。解説等を期待される向きは最後に貼りまくったReferencesを参照されたし。
MesosでDockerを動かしてみる
なにはともあれdockerである。
環境
- MacOS 10.9.5
- Vagrant x VirtualBox x CentOS 6.5
手順
とりあえずテストとしてMesosphereをSingle Nodeで動かしてみる。ここを参考
Mesos, Marathon, Chronosをインストールする
ここを参考
UbuntuとDebian
# Setup
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
CODENAME=$(lsb_release -cs)
# Add the repository
echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | \
sudo tee /etc/apt/sources.list.d/mesosphere.list
sudo apt-get -y update
# Install packages
sudo apt-get -y install mesos marathon chronos
RedHatとCentOS
# Add the repository
sudo rpm -Uvh http://repos.mesosphere.io/el/6/noarch/RPMS/mesosphere-el-repo-6-2.noarch.rpm
# Install packages
sudo yum -y install mesos marathon chronos
ZooKeeperをインストールする
sudo rpm -Uvh http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
sudo yum -y install zookeeper
sudo zookeeper-server-initialize --myid=1
# => Using myid of 1
Configurationはデフォルトのままでよい。default configurationについて詳しくはここを参照
もろもろを起動する
Zookeeper起動
# Ubuntu / Debian
sudo service zookeeper restart
# RedHat / CentOS
sudo zookeeper-server start
# => JMX enabled by default
# Using config: /etc/zookeeper/conf/zoo.cfg
# Starting zookeeper ... STARTED
mesos master/slave, marathonを起動
sudo service mesos-master start
sudo service mesos-slave start
sudo service marathon start
MesosとMarathonのコンソールにアクセスできることを確認する。5050番と8080番ポートで立ち上がっている(はず)
起動しない
CentOS6.5でzookeeperが起動するところまでは順調に行くものの
sudo service mesos-master start
# => mesos-master: unrecognized service
sudo service mesos-slave start
# => mesos-slave: unrecognized service
sudo service marathon start
# => marathon: unrecognized service
えー。
ls /etc/init.d/mesos*
# => ls: cannot access /etc/init.d/mesos*: No such file or directory
えー。
which mesos-master
# => /usr/local/sbin/mesos-master
which mesos-slave
# => /usr/local/sbin/mesos-slave
which marathon
# => /usr/local/bin/marathon
おや?
mesos-master start
# => Segmentation fault
えー。
sudo /usr/local/sbin/mesos-master start
何も起きない、localhost:5050にアクセスしても何も出ない。
ソース読まないとだめなの?
めんどくさい
困った。何が問題なのだろうと公式のドキュメントを探していたところ
Virtual Machine Installation using Vagrant
あれ?
git clone https://github.com/mesosphere/playa-mesos.git
cd playa-mesos
vagrant up
………。
続・MesosでDockerを動かしてみる
そもそもこういうインストール・マニアックスみたいなものを滅ぼすためのInfrastructure as Codeなのであってその最先鋒たるこの周辺で用意されていないはずがないのであり「まずインストールしてみる」みたいな発想から脱出しなければ生き残れないという思いを強くしつつLaunching a Docker Container on Mesosphereをやってみます。
# 配布されているVagrantfileから立ち上げたものではパーミッション変更が必要ぽい
chmod u+w /etc/mesos-slave
sudo echo 'docker,mesos' > /etc/mesos-slave/containerizers
sudo echo '5mins' > /etc/mesos-slave/executor_registration_timeout
sudo service mesos-slave restart
~/mesos/Docker.jsonを作成
{
"container": {
"type": "DOCKER",
"docker": {
"image": "libmesos/ubuntu"
}
},
"id": "ubuntu",
"instances": "1",
"cpus": "0.5",
"mem": "512",
"uris": [],
"cmd": "while sleep 10; do date -u +%T; done"
}
こいつをcurlでhttp://localhost:8080/apps
にPOSTする
curl -X POST -H "Content-Type: application/json" http://localhost:8080/v2/apps -d@Docker.json
http://localhost:5050/
ではMesosがタスクとリソースの状況を表示してくれていて、http://localhost:8080/
でMarathonが動かしているコンテナをappとして管理してくれている。
しかし
動いていない。
MesosのComplete TasksにStatus:FAILEDのタスクが並びMarathonのAppもInstanceが0/1のまま変化しない。ということは…
# dockerが入ってないのでは?
which docker
# => /usr/local/bin/docker
# ってことはバージョンが古い?
docker --version
# => Docker version 0.9.1, build 3600720
"Docker version 1.0.0 or later needs to be installed on each slave node"とあります通り、アップデートが必要です。
sudo apt-get update && sudo apt-get install -y docker
途中でgrubをインストールするのにパーティションを指定しておくれと言われるのでVBOXのパーティションだけ指定する。インストールできたらcurlコマンドをリトライして…うまくいった!コンテナが動いている。あとはmaster-slaveそれぞれで導入すれば大丈夫そうだ。適当に計算機を集めてきてローカルプチAWSを作れそうだ。こいつのラッパーと実行サポートのCUIツールを書けばよさそう。
というわけでつづく。
References
とりあえず検索して引っかかってきたものを並べて全部読んだ。本番構築の際にはもっとお世話になると思います。ありがとうございます。
- Launching a Docker Container on Mesosphere
- An introduction to Apache Mesos - Dailymotion (20140303)
- 正月休みだし Mesos 触ってみた (20140104)
- Fluentd on Mesos + Docker + Marathon (20131220)
-
EC2でMesosによるクラスタの自動デプロイを実現するElastic Mesos (20140113)
- 翻訳,原文は
Elastic Mesos service automates Mesos cluster deployment in EC2 (20131217)
- 翻訳,原文は
- [Spark][Mesos]SparkバッチをMesosの上で動作させる(その1 (20131129)
- [Mesos]Hadoop YARNとApache Mesosの違いって何? (20131104)
- 米Twitterなどでも利用されているクラスタマネージャ「Apache Mesos」、ApacheのTLPに昇格 (20130725)
Related Documents
- Docker
-
Docker コンテナで InfiniBand を動かす(性能も測定しました) (20140203)
- Docker を理解する - Docker User Guide (20140723)
- VM上のDockerコンテナに固定ipを割り振ってホスト側から接続出来るようにする (20140801)
-
Docker コンテナで InfiniBand を動かす(性能も測定しました) (20140203)
- Apache Spark
- Apache Spark ドキュメント和訳 - Quick Start (20140610)
- Resource Manager High Availability
- Resource Manager HA の概要と動かし方 (20131211)