序章

Mesosphereは、多数のコンポーネントを組み合わせて、既存のオペレーティングシステムレイヤー上でサーバークラスタリングと高可用性展開を効果的に管理するシステムです。 CoreOSのようなシステムとは異なり、Mesosphereは特殊なオペレーティングシステムではなく、パッケージのセットです。

このガイドでは、Mesosphereで高可用性クラスターを構成する方法について説明します。 この構成では、マスターノードのいずれかがダウンした場合のフェイルオーバーと、スケジュールされたタスクを処理するためのスレーブサーバーのプールが設定されます。

このガイドでは、Ubuntu14.04サーバーを使用します。

前提条件と目標

このガイドを完了する前に、Mesosphereの概要を確認することを強くお勧めします。 これは、システムが構成されているコンポーネントに精通し、各ユニットが何を担当しているかを特定するのに役立つ良い方法です。

このチュートリアルでは、6つのUbuntuサーバーを使用します。 これは、実稼働環境に少なくとも3つのマスターを持つというApacheMesosの推奨事項を満たしています。 また、タスクがクラスターに送信されるときに作業が割り当てられる3つのワーカーサーバーまたはスレーブサーバーのプールも提供します。

使用する6台のサーバーは、zookeeperを使用して、マスターサーバーの現在のリーダーを追跡します。 この上に構築されたMesosレイヤーは、分散同期とリソース処理を提供します。 クラスターの管理を担当します。 クラスターの分散初期化システムであるMarathonは、タスクをスケジュールし、スレーブサーバーに作業を渡すために使用されます。

このガイドでは、マシンの構成が次のとおりであると想定しています。

ホスト名 働き IPアドレス
master1 Mesosマスター 192.0.2.1
master2 Mesosマスター 192.0.2.2
master3 Mesosマスター 192.0.2.3
slave1 Mesosスレーブ 192.0.2.51
slave2 Mesosスレーブ 192.0.2.52
slave3 Mesosスレーブ 192.0.2.53

これらの各マシンには、Ubuntu14.04がインストールされている必要があります。 Ubuntu14.04初期サーバーセットアップガイドにリストされている基本的な構成項目を完了する必要があります。

上記の手順が完了したら、このガイドに進んでください。

サーバーにMesosphereをインストールする

クラスタを起動して実行するための最初のステップは、ソフトウェアをインストールすることです。 幸い、Mesosphereプロジェクトは、インストールが簡単な最新のパッケージを備えたUbuntuリポジトリを維持しています。

Mesosphereリポジトリをホストに追加します

ホスト(マスターとスレーブ)の all で、次の手順を実行します。

まず、Mesosphereリポジトリをソースリストに追加します。 このプロセスには、UbuntuキーサーバーからMesosphereプロジェクトのキーをダウンロードしてから、Ubuntuリリースの正しいURLを作成することが含まれます。 プロジェクトはこれを行うための便利な方法を提供します:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
CODENAME=$(lsb_release -cs)
echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | sudo tee /etc/apt/sources.list.d/mesosphere.list

必要なコンポーネントをインストールします

Mesosphereリポジトリをシステムに追加した後、新しいコンポーネントにアクセスするには、ローカルパッケージキャッシュを更新する必要があります。

sudo apt-get -y update

次に、必要なパッケージをインストールする必要があります。 必要なコンポーネントは、ホストの役割によって異なります。

マスターホストには、mesosphereメタパッケージが必要です。 これには、zookeepermesosmarathon、およびchronosアプリケーションが含まれます。

sudo apt-get install mesosphere

slave ホストの場合、必要なのはmesosパッケージのみで、これも依存関係としてzookeeperを取り込みます。

sudo apt-get install mesos

MesosのZookeeper接続情報を設定する

最初に行うことは、zookeeper接続情報を構成することです。 これは、すべてのホストが正しいマスターサーバーに接続できるようにする基盤となるレイヤーであるため、ここから始めるのが理にかなっています。

マスターサーバーはzookeeperクラスターの唯一のメンバーになりますが、プロトコルを使用して通信できるようにするには、すべてのサーバーで何らかの構成が必要になります。 これを定義するファイルは/etc/mesos/zkです。

すべてのホストですべてで、次の手順を実行します。 root権限でファイルを開きます。

sudo nano /etc/mesos/zk

内部では、接続URLがデフォルトでローカルインスタンスにアクセスするように設定されていることがわかります。 次のようになります。

zk://localhost:2181/mesos

3つのマスターサーバーを指すようにこれを変更する必要があります。 これは、localhostを最初のMesosマスターサーバーのIPアドレスに置き換えることによって行われます。 次に、ポート指定の後にコンマを追加し、フォーマットを複製して、2番目と3番目のマスターをリストに追加できます。

ガイドの場合、マスターのIPアドレスは192.0.2.1192.168.2.2、および192.168.2.3です。 これらの値を使用すると、ファイルは次のようになります。

zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/mesos

行はzk://で始まり、/mesosで終わる必要があります。 その間に、マスターサーバーのIPアドレスとzookeeperポート(デフォルトでは2181)が指定されます。

終了したら、ファイルを保存して閉じます。

マスターとスレーブのそれぞれでこの同じエントリを使用します。 これは、個々のサーバーがクラスターと通信するために正しいマスターサーバーに接続するのに役立ちます。

マスターサーバーのZookeeper構成を構成する

マスターサーバーでは、追加のzookeeper構成を行う必要があります。

最初のステップは、マスターサーバーごとに1〜255の一意のID番号を定義することです。 これは/etc/zookeeper/conf/myidファイルに保存されます。 今すぐ開く:

sudo nano /etc/zookeeper/conf/myid

このファイルのすべての情報を削除し、1から255までの単一の番号に置き換えます。 各マスターサーバーには一意の番号が必要です。 簡単にするために、1から始めて、上に向かって進むのが最も簡単です。 ガイドには1、2、3を使用します。

私たちの最初のサーバーは、ファイルにこれを持っています:

1

終了したら、ファイルを保存して閉じます。 各マスターサーバーでこれを実行します。

次に、zookeeper構成ファイルを変更して、zookeeperIDを実際のホストにマップする必要があります。 これにより、サービスが使用するIDシステムから各ホストを正しく解決できるようになります。

zookeeper構成ファイルを今すぐ開きます。

sudo nano /etc/zookeeper/conf/zoo.cfg

このファイル内で、各IDをホストにマップする必要があります。 ホスト仕様には2つのポートが含まれます。1つはリーダーとの通信用で、もう1つは新しいリーダーが必要な場合の選挙の処理用です。 zookeeperサーバーは、「サーバー」の後にドットとそのID番号が続くことで識別されます。

このガイドでは、各機能のデフォルトのポートを使用し、IDは1〜3です。 ファイルは次のようになります。

server.1=192.168.2.1:2888:3888
server.2=192.168.2.2:2888:3888
server.3=192.168.2.3:2888:3888

これらの同じマッピングを各マスターサーバーの構成ファイルに追加します。 終了したら、各ファイルを保存して閉じます。

これで、zookeeperの構成が完了しました。 MesosとMarathonに焦点を当てることができます。

マスターサーバーでMesosを構成する

次に、3つのマスターサーバーでMesosを構成します。 これらの手順は、各マスターサーバーで実行する必要があります。

クラスターサイズを反映するようにクォーラムを変更します

まず、決定を下すために必要なクォーラムを調整する必要があります。 これにより、クラスターが機能状態になるために必要なホストの数が決まります。

クォーラムは、マスターメンバーの50%以上が決定を下すために出席しなければならないように設定する必要があります。 ただし、すべてのマスターが存在しない場合でもクラスターが機能できるように、フォールトトレランスを組み込む必要もあります。

マスターは3つあるため、これらの要件の両方を満たす設定は2つのクォーラムのみです。 初期構成では単一サーバーのセットアップを想定しているため、現在、クォーラムは1に設定されています。

クォーラム構成ファイルを開きます。

sudo nano /etc/mesos-master/quorum

値を「2」に変更します。

2

ファイルを保存して閉じます。 各マスターサーバーでこれを繰り返します。

ホスト名とIPアドレスを構成する

次に、各マスターサーバーのホスト名とIPアドレスを指定します。 インスタンスが正しく解決できないように、ホスト名にIPアドレスを使用します。

マスターサーバーの場合、IPアドレスを次のファイルに配置する必要があります。

  • / etc / mesos-master / ip
  • / etc / mesos-master / hostname

まず、/etc/mesos-master/ipファイルに各マスターノードの個別のIPアドレスを追加します。 適切な値に一致するように、サーバーごとにこれを変更することを忘れないでください。

echo 192.168.2.1 | sudo tee /etc/mesos-master/ip

これで、この値をホスト名ファイルにコピーできます。

sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname

各マスターサーバーでこれを実行します。

マスターサーバーでMarathonを構成する

Mesosが構成されたので、Mesosphereのクラスター化されたinitシステム実装であるMarathonを構成できます。

Marathonは各マスターホストで実行されますが、実際にジョブをスケジュールできるのは主要なマスターサーバーのみです。 他のMarathonインスタンスは、リクエストをマスターサーバーに透過的にプロキシします。

まず、各サーバーのMarathonインスタンスのホスト名を再設定する必要があります。 ここでも、ファイルにすでにあるIPアドレスを使用します。 それを必要なファイルの場所にコピーできます。

ただし、必要なMarathon構成ディレクトリ構造は自動的に作成されません。 ディレクトリを作成する必要があります。その後、ファイルをコピーできます。

sudo mkdir -p /etc/marathon/conf
sudo cp /etc/mesos-master/hostname /etc/marathon/conf

次に、Marathonが情報とスケジューリングのために接続するzookeeperマスターのリストを定義する必要があります。 これは、Mesosで使用していたzookeeper接続文字列と同じであるため、ファイルをコピーするだけで済みます。 masterというファイルに配置する必要があります。

sudo cp /etc/mesos/zk /etc/marathon/conf/master

これにより、MarathonサービスがMesosクラスターに接続できるようになります。 ただし、Marathonが独自の状態情報をzookeeperに保存することも必要です。 このために、他のzookeeper接続ファイルをベースとして使用し、エンドポイントを変更するだけです。

まず、ファイルをMarathonzookeeperの場所にコピーします。

sudo cp /etc/marathon/conf/master /etc/marathon/conf/zk

次に、エディターでファイルを開きます。

sudo nano /etc/marathon/conf/zk

このファイルで変更する必要があるのは、エンドポイントだけです。 /mesosから/marathonに変更します。

zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/marathon

これが、Marathon構成で行う必要があるすべてです。

サービス初期化ルールの構成とサービスの再起動

次に、マスターサーバーのサービスを再起動して、構成した設定を使用します。

まず、マスターサーバーがMesosマスタープロセスのみを実行し、スレーブプロセスを実行していないことを確認する必要があります。 現在実行中のスレーブプロセスを停止できます(これは失敗する可能性がありますが、これはプロセスを確実に停止するためだけなので問題ありません)。 オーバーライドファイルを作成することで、サーバーが起動時にスレーブプロセスを開始しないようにすることもできます。

sudo stop mesos-slave
echo manual | sudo tee /etc/init/mesos-slave.override

これで、zookeeperを再起動するだけで、マスター選挙が設定されます。 次に、MesosマスターとMarathonプロセスを開始できます。

sudo restart zookeeper
sudo start mesos-master
sudo start marathon

設定した内容を最大限に活用するには、Webブラウザのポート5050でマスターサーバーの1つにアクセスします。

http://192.168.2.1:5050

Mesosのメインインターフェースが表示されます。 選出されたリーダーに接続したかどうかによっては、アクティブなマスターにリダイレクトされていると言われる場合があります。 いずれにせよ、画面は次のようになります。

Mesos main interface

これは、現在のクラスターのビューです。 使用可能なスレーブノードがなく、タスクが開始されていないため、確認することはあまりありません。

また、Mesosphereの長期実行タスクコントローラーであるMarathonを構成しました。 これは、任意のマスターのポート8080で利用できます。

Marathon main interface

スレーブをセットアップしたら、これらのインターフェイスの使用方法について簡単に説明します。

スレーブサーバーを構成する

マスターサーバーの構成が完了したので、スレーブサーバーの構成を開始できます。

マスターサーバーのzookeeper接続情報を使用してスレーブを構成済みです。 スレーブ自体は、独自のzookeeperインスタンスを実行しません。

スレーブノードで現在実行されているzookeeperプロセスを停止し、サーバーの再起動時に自動的に開始されないようにオーバーライドファイルを作成できます。

sudo stop zookeeper
echo manual | sudo tee /etc/init/zookeeper.override

次に、別のオーバーライドファイルを作成して、Mesosマスタープロセスがスレーブサーバーで開始されないようにします。 また、現在停止していることを確認します(プロセスがすでに停止している場合、このコマンドは失敗する可能性があります。 これは問題ではありません):

echo manual | sudo tee /etc/init/mesos-master.override
sudo stop mesos-master

次に、マスターサーバーの場合と同様に、IPアドレスとホスト名を設定する必要があります。 これには、各ノードのIPアドレスをファイルに入れることが含まれます。今回は/etc/mesos-slaveディレクトリの下にあります。 これをホスト名としても使用し、Webインターフェイスを介してサービスに簡単にアクセスできるようにします。

echo 192.168.2.51 | sudo tee /etc/mesos-slave/ip
sudo cp /etc/mesos-slave/ip /etc/mesos-slave/hostname

ここでも、最初のコマンドに各スレーブサーバーの個別のIPアドレスを使用します。 これにより、正しいインターフェイスにバインドされていることが保証されます。

これで、Mesosスレーブを開始するためのすべての要素が整いました。 サービスをオンにする必要があります。

sudo start mesos-slave

各スレーブマシンでこれを実行します。

スレーブがクラスターに正常に登録されているかどうかを確認するには、ポート5050でマスターサーバーの1つに戻ります。

http://192.168.2.1:5050

インターフェイスにアクティブなスレーブの数が「3」で表示されているはずです。

Mesos three slaves

また、インターフェイスで使用可能なリソースが更新され、スレーブマシンのプールされたリソースが反映されていることも確認できます。

Mesos resources

各スレーブマシンに関する追加情報を取得するには、インターフェイスの上部にある[スレーブ]リンクをクリックします。 これにより、各マシンのリソース貢献の概要と、各スレーブのページへのリンクが表示されます。

Mesos slaves page

MesosとMarathonでサービスを開始

Marathonは、長時間実行されるタスクをスケジュールするためのMesosphereのユーティリティです。 Marathonは、サービスの開始と停止、タスクのスケジューリング、およびアプリケーションがダウンした場合の確実な復旧を処理するため、Mesosphereクラスターのinitシステムと考えるのは簡単です。

いくつかの異なる方法で、サービスとタスクをMarathonに追加できます。 基本的なサービスのみをカバーします。 Dockerコンテナーは、将来のガイドで処理されます。

Webインターフェイスを介したサービスの開始

クラスター上でサービスを迅速に実行するための最も簡単な方法は、MarathonWebインターフェースを介してアプリケーションを追加することです。

まず、マスターサーバーの1つでMarathonWebインターフェイスにアクセスします。 Marathonインターフェースはポート8080にあることを忘れないでください。

http://192.168.2.1:8080

ここから、右上隅にある「新しいアプリ」ボタンをクリックできます。 これにより、新しいアプリケーションに関する情報を追加できるオーバーレイがポップアップ表示されます。

Marathon new app

アプリの要件をフィールドに入力します。 必須のフィールドは次のとおりです。

  • ID :プロセスを識別するためにユーザーが選択した一意のID。 これは好きなものにすることができますが、一意である必要があります。
  • コマンド:これは、Marathonによって実行される実際のコマンドです。 これは、失敗した場合に監視および再起動されるプロセスです。

この情報を使用して、「hello」を出力し、10秒間スリープする簡単なサービスを設定できます。 これを「こんにちは」と呼びます。

Marathon simple app

インターフェイスに戻ると、サービスは「デプロイ中」から「実行中」になります。

Marathon app running

約10秒ごとに、スリープ量が経過してサービスが停止すると、「タスク/インスタンス」の読み取り値が「1/1」から「0/1」になります。 その後、Marathonは自動的にタスクを再開します。 このプロセスは、ポート5050のMesosWebインターフェイスでより明確に確認できます。

http://192.168.2.1:5050

ここでは、プロセスが終了して再開されていることを確認できます。

Mesos restart task

いずれかのタスクで「サンドボックス」をクリックしてから「stdout」をクリックすると、「hello」出力が生成されていることがわかります。

Mesos output

APIを介したサービスの開始

MarathonのAPIを介してサービスを送信することもできます。 これには、オーバーレイに含まれるすべてのフィールドを含むJSONオブジェクトを渡すことが含まれます。

これは比較的単純なプロセスです。 この場合も、必須フィールドは、プロセス識別子のidと、実行する実際のコマンドを含むcmdのみです。

したがって、次の情報を使用してhello.jsonというJSONファイルを作成できます。

nano hello.json

内部では、最低限の仕様は次のようになります。

{
    "id": "hello2",
    "cmd": "echo hello; sleep 10"
}

このサービスは問題なく機能します。 ただし、Web UIで作成したサービスを本当にエミュレートする場合は、いくつかのフィールドを追加する必要があります。 これらはWebUIでデフォルト設定されており、ここで複製できます。

{
    "id": "hello2",
    "cmd": "echo hello; sleep 10",
    "mem": 16,
    "cpus": 0.1,
    "instances": 1,
    "disk": 0.0,
    "ports": [0]
}

終了したら、JSONファイルを保存して閉じます。

次に、MarathonAPIを使用して送信できます。 ターゲットはポート8080でのマスターのマラソンサービスの1つであり、エンドポイントは/v2/appsです。 データペイロードはJSONファイルであり、-dフラグと@フラグを使用してファイルを示すことでcurlに読み込むことができます。

送信するコマンドは次のようになります。

curl -i -H 'Content-Type: application/json' [email protected] 192.168.2.1:8080/v2/apps

Marathonインターフェースを見ると、正常に追加されたことがわかります。 それは私たちの最初のサービスとまったく同じプロパティを持っているようです:

Marathon two services

新しいサービスは、最初のサービスとまったく同じ方法で監視およびアクセスできます。

結論

この時点で、本番環境に対応したMesosphereクラスターが稼働しているはずです。 ここでは基本的な構成についてのみ説明しましたが、Mesosphereシステムを活用する可能性を確認できるはずです。

今後のガイドでは、Dockerコンテナーをクラスターにデプロイする方法と、いくつかのツールをより詳細に使用する方法について説明します。