前書き
Mesosphereは、多数のコンポーネントを組み合わせて、サーバークラスタリングと既存のオペレーティングシステムレイヤー上での可用性の高い展開を効果的に管理するシステムです。 CoreOSなどのシステムとは異なり、Mesosphereは専用のオペレーティングシステムではなく、パッケージのセットです。
このガイドでは、Mesosphereで高可用性クラスターを構成する方法について説明します。 この構成では、マスターノードのいずれかがダウンした場合のフェールオーバーと、スケジュールされたタスクを処理するスレーブサーバーのプールがセットアップされます。
このガイドではUbuntu 14.04サーバーを使用します。
前提条件と目標
このガイドを完了する前に、https://www.digitalocean.com/community/tutorials/an-introduction-to-mesosphere [Mesosphereの紹介]を確認することを強くお勧めします。 これは、システムを構成するコンポーネントに精通し、各ユニットが何を担当しているかを特定するのに役立つ良い方法です。
このチュートリアルでは、6台のUbuntuサーバーを使用します。 これは、実稼働環境用に少なくとも3つのマスターを持つというApache Mesosの推奨事項を満たします。 また、3つのワーカーサーバーまたはスレーブサーバーのプールも提供され、タスクがクラスターに送信されるときに作業が割り当てられます。
使用する6台のサーバーは、「+ zookeeper +」を使用して、マスターサーバーの現在のリーダーを追跡します。 この上に構築されたMesosレイヤーは、分散同期とリソース処理を提供します。 クラスターの管理を担当します。 クラスターの分散initシステムであるMarathonは、タスクをスケジュールし、スレーブサーバーに作業を渡すために使用されます。
このガイドのために、マシンには次の構成があると仮定します。
Hostname | Function | IP Address |
---|---|---|
master1 |
Mesos master |
192.0.2.1 |
master2 |
Mesos master |
192.0.2.2 |
master3 |
Mesos master |
192.0.2.3 |
slave1 |
Mesos slave |
192.0.2.51 |
slave2 |
Mesos slave |
192.0.2.52 |
slave3 |
Mesos slave |
192.0.2.53 |
これらの各マシンにはUbuntu 14.04がインストールされている必要があります。 Ubuntu 14.04初期サーバーセットアップガイドにリストされている基本的な構成アイテムを完了する必要があります。
上記の手順を完了したら、このガイドに進みます。
サーバーへのMesosphereのインストール
クラスターを起動して実行するための最初のステップは、ソフトウェアをインストールすることです。 幸いなことに、Mesosphereプロジェクトは、インストールが簡単な最新のパッケージでUbuntuリポジトリを管理しています。
Mesosphereリポジトリをホストに追加します
すべてのホスト(マスターおよびスレーブ)で、次の手順を実行します。
まず、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
次に、必要なパッケージをインストールする必要があります。 必要なコンポーネントは、ホストの役割によって異なります。
-
master *ホストには、 `+ mesosphere `メタパッケージが必要です。 これには、「 zookeeper 」、「 mesos 」、「 marathon 」、および「 chronos +」アプリケーションが含まれます。
sudo apt-get install mesosphere
-
slave *ホストの場合、必要なのは `+ mesos `パッケージのみで、これは依存関係として ` zookeeper +`も取り込みます:
sudo apt-get install mesos
MesosのZookeeper接続情報をセットアップする
最初に行うことは、 `+ zookeeper`接続情報を設定することです。 これは、すべてのホストが正しいマスターサーバーに接続できるようにする基礎となる層なので、ここから始めるのが理にかなっています。
マスターサーバーは、 `+ zookeeper `クラスターの唯一のメンバーになりますが、プロトコルを使用して通信できるようにするには、すべてのサーバーに何らかの設定が必要になります。 これを定義するファイルは ` / etc / mesos / zk +`です。
すべてのホストで、次の手順を実行します。 ルート権限でファイルを開きます。
sudo nano /etc/mesos/zk
内部では、接続インスタンスがデフォルトでローカルインスタンスにアクセスするように設定されています。 これは次のようになります。
zk://localhost:2181/mesos
3つのマスターサーバーを指すようにこれを変更する必要があります。 これは、「+ localhost +」を最初のMesosマスターサーバーのIPアドレスに置き換えることで実行されます。 次に、ポート指定の後にカンマを追加し、フォーマットを複製して、2番目と3番目のマスターをリストに追加できます。
このガイドでは、マスターのIPアドレスは「192.0.2.1 +」、「 192.168.2.2+」、および「192.168.2.3」です。 これらの値を使用すると、ファイルは次のようになります。
zk://:2181,:2181,:2181/mesos
行は「+ zk:// 」で始まり、「 / mesos 」で終わる必要があります。 その間に、マスターサーバーのIPアドレスと ` zookeeper `ポート(デフォルトでは ` 2181 +`)が指定されます。
完了したら、ファイルを保存して閉じます。
マスターとスレーブのそれぞれでこの同じエントリを使用します。 これにより、個々のサーバーが正しいマスターサーバーに接続してクラスターと通信できるようになります。
マスターサーバーのZookeeper構成を構成する
-
master *サーバーで、追加の `+ zookeeper +`設定を行う必要があります。
最初の手順は、各マスターサーバーに1〜255の一意のID番号を定義することです。 これは、 `+ / etc / zookeeper / conf / myid +`ファイルに保存されます。 今すぐ開く:
sudo nano /etc/zookeeper/conf/myid
このファイル内のすべての情報を削除し、1〜255の単一の数字に置き換えます。 各マスターサーバーには一意の番号が必要です。 簡単にするために、1から始めて作業を進めるのが最も簡単です。 ガイドには1、2、および3を使用します。
私たちの最初のサーバーはファイルにこれを持っています:
1
完了したら、ファイルを保存して閉じます。 これを各マスターサーバーで実行します。
次に、 + zookeeper`設定ファイルを変更して、
+ zookeeper` IDを実際のホストにマッピングする必要があります。 これにより、サービスが使用するIDシステムから各ホストを正しく解決できるようになります。
今すぐ `+ zookeeper +`設定ファイルを開きます:
sudo nano /etc/zookeeper/conf/zoo.cfg
このファイル内で、各IDをホストにマップする必要があります。 ホスト仕様には2つのポートが含まれます。1つはリーダーとの通信用、もう1つは新しいリーダーが必要な場合の選挙の処理用です。 `+ zookeeper +`サーバーは、「server」の後にドットとそのID番号が続くことで識別されます。
このガイドでは、各機能にデフォルトポートを使用し、IDは1〜3です。 ファイルは次のようになります。
server.=:2888:3888
server.=:2888:3888
server.=: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
最初に、各マスターノードの個々のIPアドレスを `+ / etc / mesos-master / ip +`ファイルに追加します。 適切な値に一致するように、サーバーごとにこれを変更することを忘れないでください。
echo | sudo tee /etc/mesos-master/ip
これで、この値をホスト名ファイルにコピーできます。
sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname
これを各マスターサーバーで実行します。
マスターサーバーでMarathonを構成する
Mesosが構成されたので、Mesosphereのクラスター化された初期化システムの実装である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クラスターに接続できるようになります。 ただし、マラソンが独自の状態情報を「+ zookeeper 」に保存することも必要です。 このために、他の ` zookeeper +`接続ファイルをベースとして使用し、エンドポイントを変更します。
最初に、ファイルをMarathonズーキーパーの場所にコピーします。
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/
これが、マラソン構成のために必要なことのすべてです。
サービス初期化ルールの構成とサービスの再起動
次に、マスターサーバーのサービスを再起動して、構成していた設定を使用します。
まず、マスターサーバーが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://:5050
メインのMesosインターフェースが表示されます。 選出されたリーダーに接続したかどうかに応じて、アクティブなマスターにリダイレクトされていると通知される場合があります。 いずれにしても、画面は次のようになります。
image:https://assets.digitalocean.com/articles/mesos_cluster/mesos_main.png [Mesosメインインターフェイス]
これは現在、クラスターのビューです。 使用可能なスレーブノードがなく、タスクが開始されていないため、見ることはあまりありません。
また、Mesosphereの長期実行タスクコントローラーであるMarathonも構成しました。 これは、マスターのポート「8080」で利用できます。
image:https://assets.digitalocean.com/articles/mesos_cluster/marathon_main.png [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 | 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://:5050
インターフェイスのアクティブスレーブの数が「3」になっているはずです。
image:https://assets.digitalocean.com/articles/mesos_cluster/three_slaves.png [3つのスレーブのメソス]
また、インターフェイスで利用可能なリソースがスレーブマシンのプールされたリソースを反映するように更新されたことを確認できます。
image:https://assets.digitalocean.com/articles/mesos_cluster/resources.png [Mesosリソース]
各スレーブマシンに関する追加情報を取得するには、インターフェイスの上部にある[スレーブ]リンクをクリックします。 これにより、各マシンのリソースへの貢献の概要と、各スレーブのページへのリンクが表示されます。
image:https://assets.digitalocean.com/articles/mesos_cluster/slaves_page.png [Mesosスレーブページ]
MesosおよびMarathonでのサービスの開始
Marathonは、長時間実行されるタスクをスケジュールするためのMesosphereのユーティリティです。 Marathonは、サービスの開始と停止、タスクのスケジューリング、およびアプリケーションがダウンした場合に確実に復帰するようにするため、Mesosphereクラスターの初期化システムと考えるのは簡単です。
いくつかの異なる方法で、Marathonにサービスとタスクを追加できます。 基本サービスのみを対象とします。 Dockerコンテナは、今後のガイドで処理されます。
Webインターフェイスを介したサービスの開始
クラスター上でサービスを迅速に実行するための最も簡単な方法は、Marathon Webインターフェイスを介してアプリケーションを追加することです。
まず、マスターサーバーの1つでMarathon Webインターフェイスにアクセスします。 Marathonインターフェースはポート `+ 8080 +`にあります:
http://:8080
ここから、右上隅の[新しいアプリ]ボタンをクリックできます。 これにより、新しいアプリケーションに関する情報を追加できるオーバーレイがポップアップ表示されます。
image:https://assets.digitalocean.com/articles/mesos_cluster/marathon_new_app.png [マラソンの新しいアプリ]
アプリの要件をフィールドに入力します。 必須のフィールドは次のとおりです。
-
* ID *:プロセスを識別するためにユーザーが選択した一意のID。 これは何でも構いませんが、一意でなければなりません。
-
コマンド:これは、Marathonによって実行される実際のコマンドです。 これは監視され、失敗した場合に再起動されるプロセスです。
この情報を使用して、「hello」を出力して10秒間スリープするだけの簡単なサービスをセットアップできます。 これを「こんにちは」と呼びます。
image:https://assets.digitalocean.com/articles/mesos_cluster/simple_app.png [Marathon simple app]
インターフェイスに戻ると、サービスは「デプロイ中」から「実行中」になります。
image:https://assets.digitalocean.com/articles/mesos_cluster/running.png [Marathon app running]
スリープ量が過ぎてサービスが停止すると、10秒程度ごとに「タスク/インスタンス」の読み取り値が「1/1」から「0/1」になります。 その後、マラソンは自動的にタスクを再開します。 このプロセスは、ポート `+ 5050 +`のMesos Webインターフェースでより明確に確認できます。
http://:5050
ここでは、プロセスが終了して再起動されていることがわかります。
image:https://assets.digitalocean.com/articles/mesos_cluster/restart_task.png [Mesos restart task]
タスクのいずれかで「サンドボックス」をクリックしてから「stdout」をクリックすると、「hello」出力が生成されていることがわかります。
image:https://assets.digitalocean.com/articles/mesos_cluster/output.png [Mesos output]
APIを介したサービスの開始
MarathonのAPIを通じてサービスを送信することもできます。 これには、オーバーレイに含まれるすべてのフィールドを含むJSONオブジェクトを渡すことが含まれます。
これは比較的簡単なプロセスです。 繰り返しますが、唯一の必須フィールドは、プロセス識別子の「+ id 」と、実行する実際のコマンドを含む「 cmd +」です。
したがって、次の情報を使用して `+ hello.json +`というJSONファイルを作成できます。
nano hello.json
内部では、最低限の仕様は次のようになります。
{
"id": "hello2",
"cmd": "echo hello; sleep 10"
}
このサービスは問題なく動作します。 ただし、Web UIで作成したサービスを真にエミュレートする場合は、いくつかの追加フィールドを追加する必要があります。 これらはWeb UIでデフォルト設定されており、ここで複製できます。
{
"id": "hello2",
"cmd": "echo hello; sleep 10",
"mem": 16,
"cpus": 0.1,
"instances": 1,
"disk": 0.0,
"ports": [0]
}
完了したら、JSONファイルを保存して閉じます。
次に、Marathon APIを使用して送信できます。 ターゲットは、ポート「8080」でのマスターのマラソンサービスの1つであり、エンドポイントは「+ / v2 / apps 」です。 データペイロードはJSONファイルであり、ファイルを示すために ` -d `フラグと ` @ `フラグを使用して ` curl +`に読み込むことができます。
送信するコマンドは次のようになります。
curl -i -H 'Content-Type: application/json' [email protected] :8080/v2/apps
Marathonインターフェイスを見ると、正常に追加されたことがわかります。 最初のサービスとまったく同じプロパティを持っているようです:
image:https://assets.digitalocean.com/articles/mesos_cluster/two_services.png [マラソン2サービス]
新しいサービスは、最初のサービスとまったく同じ方法で監視およびアクセスできます。
結論
この時点で、実稼働対応のMesosphereクラスターが稼働しているはずです。 この時点では基本的な構成のみを説明しましたが、Mesosphereシステムを活用する可能性を確認できるはずです。
将来のガイドでは、クラスターにDockerコンテナーを展開する方法と、いくつかのツールをより詳細に使用する方法について説明します。