Mesos v1.5.0をインストールする

Mesosを仕事で使う機会があったのでインストール方法を残しておきます。
インストールバージョンは現時点の最新版v1.5.0(2018.5.9時点)です。
（最終的には、SparkとCassandraとMesosを組み合わせてどうにかしようとしている）
公式の手順を参考にしながらやってみました。

* CentOS Linux release 7.3.1611 (Core)
    * メモリ: 4GB
    * CPU: 1Core
    * Vagrantで構築。
    * 注意事項として、メモリが少ないとMesosのビルドでこけます。
* Mesos 1.5.0 (2018.2)
* 公式: http://mesos.apache.org/documentation/latest/building/

## Mesosビルドのためのパッケージインストール

```
sudo yum -y install git
sudo curl -Lo /etc/yum.repos.d/epel-apache-maven.repo  http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
sudo yum install -y epel-release

sudo bash -c 'cat > /etc/yum.repos.d/wandisco-svn.repo <<EOF
[WANdiscoSVN]
name=WANdisco SVN Repo 1.9
enabled=1
baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/\$basearch/
gpgcheck=1
gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
EOF'

sudo yum groupinstall -y "Development Tools"
sudo yum install -y apache-maven python-devel python-six python-virtualenv java-1.8.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
```

```
sudo yum install -y python-pip
sudo pip install --upgrade pytz
```


## Mesos 1.5.0のダウンロードとビルド

```
curl -o ~/mesos-1.5.0.tar.gz http://archive.apache.org/dist/mesos/1.5.0/mesos-1.5.0.tar.gz
tar xvfz ~/mesos-1.5.0.tar.gz -C ~/

cd ~/mesos-1.5.0
mkdir build
cd build
../configure
make
sudo make install
```
makeはとっても時間がかかる。手元のローカル環境だと1時間以上はかかります。
また、メモリが少ないと途中で失敗します。

`sudo make install`後、`/usr/local/sbin`配下にmesosの資材ができていることを確認しておきます。

```
$ ll /usr/local/sbin/ | grep mesos
-rwxr-xr-x. 1 root root 2456352  5月  9 17:53 mesos-agent
-rwxr-xr-x. 1 root root     406  5月  9 17:53 mesos-daemon.sh
-rwxr-xr-x. 1 root root 2385928  5月  9 17:53 mesos-master
lrwxrwxrwx. 1 root root      11  5月  9 17:53 mesos-slave -> mesos-agent
-rwxr-xr-x. 1 root root    1349  5月  9 17:53 mesos-start-agents.sh
-rwxr-xr-x. 1 root root     888  5月  9 17:53 mesos-start-cluster.sh
-rwxr-xr-x. 1 root root    1366  5月  9 17:53 mesos-start-masters.sh
-rwxr-xr-x. 1 root root    1349  5月  9 17:53 mesos-start-slaves.sh
-rwxr-xr-x. 1 root root    1185  5月  9 17:53 mesos-stop-agents.sh
-rwxr-xr-x. 1 root root     635  5月  9 17:53 mesos-stop-cluster.sh
-rwxr-xr-x. 1 root root    1200  5月  9 17:53 mesos-stop-masters.sh
-rwxr-xr-x. 1 root root    1185  5月  9 17:53 mesos-stop-slaves.sh
```

## ディレクトリ作成

```
sudo mkdir /var/lib/mesos
```

## Mesos Master/Agentの起動

### Mesos masterの起動

```
sudo su -
mesos-master --ip=127.0.0.1 --work_dir=/var/lib/mesos
```

### Mesos agentの起動

```
sudo su -
mesos-agent --master=127.0.0.1:5050 --work_dir=/var/lib/mesos
```

http://127.0.0.1:5050  
にアクセスしてMaster,Agentが確認できればOKです。


## 付属のサンプルアプリで動作確認

ビルド時に利用したフォルダにpythonサンプルアプリがあるので、Mesosで動作するか確認しておきます。（他にもJavaアプリなどがあるのですが、手元の環境ではjarが無いとかで動かなかった..)

```
cd ~/mesos/build

# Run Python framework
./src/examples/python/test-framework 127.0.0.1:5050
```


## サービス登録

`/etc/systemd/system`の下にUnit定義ファイルを作成します。
作成するファイルは以下の2つ。
それぞれMesos masterとMesos agent用になります。

1. `/etc/systemd/system/mesos-master.service`
2. `/etc/systemd/system/mesos-agent.service` 


```/etc/systemd/system/mesos-master.service
[Unit]
Description = Mesos master daemon

[Service]
ExecStart = /usr/local/sbin/mesos-master --ip=127.0.0.1 --work_dir=/var/lib/mesos
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target
```

```/etc/systemd/system/mesos-agent.service
[Unit]
Description = Mesos agent daemon

[Service]
ExecStart = /usr/local/sbin/mesos-agent --master=127.0.0.1:5050 --work_dir=/var/lib/mesos
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target
```

`/etc/systemd/system/mesos-agent.service`の`--master=127.0.0.1:5050`のIP部分は必要に応じて変更してください。
今回は同一サーバ上でmasterとagentを起動する設定のため、上記の設定にしています。


サービスとして認識されたか確認する。

```
$ sudo systemctl list-unit-files --type=service | grep mesos
mesos-agent.service                           disabled
mesos-master.service                          disabled
```


## サービスとして起動

サービスの自動起動On設定とサービス起動

```
sudo systemctl enable mesos-master
sudo systemctl enable mesos-agent

# Start Mesos master
sudo systemctl start mesos-master

# Start Mesos agent
sudo systemctl start mesos-agent
```

起動状態の確認

```
sudo systemctl status mesos-master
sudo systemctl status mesos-agent
```

起動状態が確認できればOKです。