Ubuntu14.04で本番環境に対応したMesosphereクラスターを構成する方法
序章
Mesosphereは、多数のコンポーネントを組み合わせて、既存のオペレーティングシステムレイヤー上でサーバークラスタリングと高可用性展開を効果的に管理するシステムです。 CoreOSのようなシステムとは異なり、Mesosphereは特殊なオペレーティングシステムではなく、パッケージのセットです。
このガイドでは、Mesosphereで高可用性クラスターを構成する方法について説明します。 この構成では、マスターノードのいずれかがダウンした場合のフェイルオーバーと、スケジュールされたタスクを処理するためのスレーブサーバーのプールが設定されます。
このガイドでは、Ubuntu14.04サーバーを使用します。
前提条件と目標
このガイドを完了する前に、Mesosphereの概要を確認することを強くお勧めします。 これは、システムが構成されているコンポーネントに精通し、各ユニットが何を担当しているかを特定するのに役立つ良い方法です。
このチュートリアルでは、6つのUbuntuサーバーを使用します。 これは、実稼働環境に少なくとも3つのマスターを持つというApacheMesosの推奨事項を満たしています。 また、タスクがクラスターに送信されるときに作業が割り当てられる3つのワーカーサーバーまたはスレーブサーバーのプールも提供します。
使用する6台のサーバーが使用します zookeeper
マスターサーバーの現在のリーダーを追跡します。 この上に構築されたMesosレイヤーは、分散同期とリソース処理を提供します。 クラスターの管理を担当します。 クラスタの分散型initシステムであるMarathonは、タスクをスケジュールし、スレーブサーバーに作業を渡すために使用されます。
このガイドでは、マシンの構成が次のとおりであると想定しています。
ホスト名 | 働き | IPアドレス |
---|---|---|
master1 | メソスマスター | 192.0.2.1 |
master2 | メソスマスター | 192.0.2.2 |
master3 | メソスマスター | 192.0.2.3 |
slave1 | メソス奴隷 | 192.0.2.51 |
slave2 | メソス奴隷 | 192.0.2.52 |
slave3 | メソス奴隷 | 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
メタパッケージ。 これには、 zookeeper
, mesos
, marathon
、 と chronos
アプリケーション:
sudo apt-get install mesosphere
スレーブホストの場合、必要なのは mesos
パッケージも引き込みます zookeeper
依存関係として:
sudo apt-get install mesos
MesosのZookeeper接続情報を設定します
最初に行うことは、 zookeeper
接続情報。 これは、すべてのホストが正しいマスターサーバーに接続できるようにする基盤となるレイヤーであるため、ここから始めるのが理にかなっています。
私たちのマスターサーバーは私たちの唯一のメンバーになります zookeeper
クラスタですが、プロトコルを使用して通信できるようにするには、すべてのサーバーで何らかの構成が必要になります。 これを定義するファイルは /etc/mesos/zk
.
すべてのホストですべてで、次の手順を実行します。 ルート権限でファイルを開きます。
sudo nano /etc/mesos/zk
内部では、接続URLがデフォルトでローカルインスタンスにアクセスするように設定されていることがわかります。 次のようになります。
zk://localhost:2181/mesos
3つのマスターサーバーを指すようにこれを変更する必要があります。 これは、置き換えることによって行われます localhost
最初のMesosマスターサーバーのIPアドレスを使用します。 次に、ポート指定の後にコンマを追加し、フォーマットを複製して、2番目と3番目のマスターをリストに追加できます。
ガイドの場合、マスターのIPアドレスは次のとおりです。 192.0.2.1
, 192.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
マップする構成ファイル zookeeper
実際のホストへのID。 これにより、サービスが使用するIDシステムから各ホストを正しく解決できるようになります。
を開きます zookeeper
今すぐ構成ファイル:
sudo nano /etc/zookeeper/conf/zoo.cfg
このファイル内で、各IDをホストにマップする必要があります。 ホスト仕様には2つのポートが含まれます。1つはリーダーとの通信用で、もう1つは新しいリーダーが必要な場合の選挙の処理用です。 The 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
まず、各マスターノードの個別のIPアドレスを /etc/mesos-master/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
次に、のリストを定義する必要があります zookeeper
マラソンが情報とスケジュールのために接続するマスター。 これは同じです zookeeper
Mesosで使用している接続文字列なので、ファイルをコピーするだけです。 それをというファイルに配置する必要があります 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ブラウザのポートにあるマスターサーバーの1つにアクセスします。 5050
:
http://192.168.2.1:5050
Mesosのメインインターフェイスが表示されます。 選出されたリーダーに接続したかどうかによっては、アクティブなマスターにリダイレクトされていると言われる場合があります。 いずれにせよ、画面は次のようになります。
これは、現在のクラスターのビューです。 使用可能なスレーブノードがなく、タスクが開始されていないため、確認することはあまりありません。
また、Mesosphereの長期実行タスクコントローラーであるMarathonを構成しました。 これはポートで利用可能になります 8080
あなたのマスターのいずれかで:
スレーブをセットアップしたら、これらのインターフェイスの使用方法について簡単に説明します。
スレーブサーバーを構成する
マスターサーバーの構成が完了したので、スレーブサーバーの構成を開始できます。
マスターサーバーでスレーブを構成済みです。 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
各スレーブマシンでこれを実行します。
スレーブがクラスターに正常に登録されているかどうかを確認するには、ポートでマスターサーバーの1つに戻ります。 5050
:
http://192.168.2.1:5050
インターフェイスにアクティブなスレーブの数が「3」で表示されているはずです。
また、インターフェイスで使用可能なリソースが更新され、スレーブマシンのプールされたリソースが反映されていることも確認できます。
各スレーブマシンに関する追加情報を取得するには、インターフェイスの上部にある[スレーブ]リンクをクリックします。 これにより、各マシンのリソース貢献の概要と、各スレーブのページへのリンクが表示されます。
MesosとMarathonでサービスを開始
Marathonは、長時間実行されるタスクをスケジュールするためのMesosphereのユーティリティです。 Marathonは、サービスの開始と停止、タスクのスケジューリング、およびアプリケーションがダウンした場合の確実な復旧を処理するため、Mesosphereクラスターのinitシステムと考えるのは簡単です。
いくつかの異なる方法で、サービスとタスクをMarathonに追加できます。 基本的なサービスのみをカバーします。 Dockerコンテナーは、将来のガイドで処理されます。
Webインターフェイスを介したサービスの開始
クラスタでサービスをすばやく実行する最も簡単な方法は、MarathonWebインターフェイスを介してアプリケーションを追加することです。
まず、マスターサーバーの1つでMarathonWebインターフェイスにアクセスします。 マラソンのインターフェースはポート上にあることを忘れないでください 8080
:
http://192.168.2.1:8080
ここから、右上隅にある「新しいアプリ」ボタンをクリックできます。 これにより、新しいアプリケーションに関する情報を追加できるオーバーレイがポップアップ表示されます。
アプリの要件をフィールドに入力します。 必須のフィールドは次のとおりです。
- ID :プロセスを識別するためにユーザーが選択した一意のID。 これは好きなものにすることができますが、一意である必要があります。
- コマンド:これは、Marathonによって実行される実際のコマンドです。 これは、失敗した場合に監視および再起動されるプロセスです。
この情報を使用して、「hello」を出力し、10秒間スリープする簡単なサービスを設定できます。 これを「こんにちは」と呼びます。
インターフェイスに戻ると、サービスは「デプロイ中」から「実行中」になります。
約10秒ごとに、スリープ量が経過してサービスが停止すると、「タスク/インスタンス」の読み取り値が「1/1」から「0/1」になります。 その後、Marathonは自動的にタスクを再開します。 このプロセスは、ポートのMesosWebインターフェイスでより明確に確認できます。 5050
:
http://192.168.2.1:5050
ここでは、プロセスが終了して再開されていることを確認できます。
いずれかのタスクで「サンドボックス」をクリックしてから「stdout」をクリックすると、「hello」出力が生成されていることがわかります。
APIを介したサービスの開始
MarathonのAPIを介してサービスを送信することもできます。 これには、オーバーレイに含まれるすべてのフィールドを含むJSONオブジェクトを渡すことが含まれます。
これは比較的単純なプロセスです。 繰り返しますが、必要なフィールドは次のとおりです。 id
プロセス識別子と cmd
これには、実行する実際のコマンドが含まれています。
したがって、次のようなJSONファイルを作成できます hello.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を使用して送信できます。 ターゲットは、港でのマスターのマラソンサービスの1つです 8080
エンドポイントは /v2/apps
. データペイロードはJSONファイルであり、これを読み込むことができます curl
を使用して -d
フラグ @
ファイルを示すフラグ。
送信するコマンドは次のようになります。
curl -i -H 'Content-Type: application/json' [email protected] 192.168.2.1:8080/v2/apps
Marathonインターフェースを見ると、正常に追加されたことがわかります。 それは私たちの最初のサービスとまったく同じプロパティを持っているようです:
新しいサービスは、最初のサービスとまったく同じ方法で監視およびアクセスできます。
結論
この時点で、本番環境に対応したMesosphereクラスターが稼働しているはずです。 ここでは基本的な構成についてのみ説明しましたが、Mesosphereシステムを活用する可能性を理解できるはずです。
今後のガイドでは、Dockerコンテナーをクラスターにデプロイする方法と、いくつかのツールをより詳細に使用する方法について説明します。