Ubuntu 16.04でRancherを使用してNode.jsおよびMongoDBアプリケーションをデプロイする方法

前書き

Rancherは、運用環境でコンテナを実行および簡単に管理するための、オープンソースの自己ホスト型の完全なプラットフォームです。 Dockerイメージ自体であるRancherサーバーは、Dockerが利用可能なすべてのLinuxホストで動作します。

Rancherを魅力的なソリューションにする主な機能のいくつかは次のとおりです。

  • クロスホストネットワーキング:Rancherに追加されたすべてのサーバーがリンクされ、コンテナ間の安全な通信が可能になります。

  • 負荷分散:負荷分散サービスが含まれており、コンテナ間または複数のクラウド間でワークロードを分散します。

  • サービスの検出:Rancherには、コンテナとサービスを名前で識別できるようにする内部DNSシステムが含まれているため、ネットワーク上の他のサービス内で使用できます。

  • インフラストラクチャ管理:Rancherを使用すると、クラウドプロバイダーのコンピューティングリソースを追加、監視、管理できます。

  • オーケストレーションエンジン:Rancherは、Cattle、Swarm、Kubernetes、Mesosなどの最も一般的なコンテナーオーケストレーションフレームワークをサポートする唯一のコンテナー管理プラットフォームです。 そのため、これらのフレームワークのいずれかでインフラストラクチャが既に機能している場合は、Rancherを簡単に使用できます。

  • オープンソース:Rancherは無料で、オープンで、透明です。 インフラストラクチャを完全に制御できます。

このガイドでは、https://www.mongodb.org [MongoDB]を使用してデータストレージをサポートし、負荷分散されたhttp://nodejs.org [Node.js]アプリケーションをデプロイするRancherクラスターを構築します。

このチュートリアルの最後に、単純なNode.jsアプリケーションの4つの負荷分散されたインスタンスと、永続ストレージ用の個別のデータコンテナーを備えたMongoDBサーバーがあります。

前提条件

  • Rancherがインストールされた1 GB Ubuntu 16.04ドロップレット1つ。 Rancherを使用して、それぞれ1GBのRAMを備えた6つの追加のドロップレットを作成します。 Ubuntu 16.04でRancherとDocker Machineを使用してマルチノード展開を管理する方法で、Rancherを使用して初期ドロップレットを設定します。

  • データストレージにMongoDBを使用するNode.jsアプリケーション。 このチュートリアルでは、http://hapijs.com/ [Hapi.js]ライブラリを使用した簡単な例を示します。独自のアプリケーションをまだ準備していない場合に使用できます。 このサンプルアプリケーションはhttps://github.com/do-community/hapi-example [このGithubリポジトリ]にあります。詳細については、ステップ1で説明します。

  • ローカルマシンにGitがインストールされているため、サンプルアプリケーションを複製できます。 この前提条件を満たす必要がある場合は、https://git-scm.com/book/en/v2/Getting-Started-Installing-Git [公式Gitインストールドキュメント]に従ってください。

  • ローカルマシンにDockerがインストールされているため、デプロイするアプリケーションイメージを構築できます。 これについては、https://docs.docker.com/engine/installation/ [公式ドキュメント]を参照してください。

  • Docker Hubのアカウント。これは、Dockerイメージの無料の公開レジストリです。 ここでアプリケーションコードをホストし、Rancherを使用して複数のホストにデプロイできます。 このチュートリアルの手順を完了するには、Docker Hubのユーザー名が必要です。

  • Applications&APIページにアクセスして生成できる読み取りと書き込みの両方のアクセス権を持つDigitalOceanアクセストークン。 追加のホストを作成するためにRancherに入力する必要があるため、このトークンをコピーします。

また、コンテナ、イメージ、Dockerfilesなどのhttps://docs.docker.com/engine/reference/glossary/[Dockerの概念]の基本的な知識も必要です。 Dockerの使用の詳細については、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04 [Ubuntu 16.04にDockerをインストールして使用する方法]を参照してください。 。

ステップ1-Node.jsアプリケーションの調査

このチュートリアルでは、メッセージを受信して​​記録し、以前に送信されたすべてのメッセージをリストするHapi.jsフレームワークに基づいたシンプルなNode.jsアプリケーションを使用します。 イメージの作成時にDockerを使用してこれらの値を設定できるように、アプリケーションがどのように機能し、どのように構成値を受け取るかを調べてみましょう。

サーバーではなく、ローカル開発マシンでアプリケーションとDockerイメージを準備します。

次のコマンドを使用して、サンプルアプリケーションをローカルマシンに複製します。

git clone https://github.com/do-community/hapi-example

次に、プロジェクトディレクトリに移動します。

cd hapi-example

アプリケーションのメインファイルである `+ server.js`を見てみましょう。 これには、MongoDB接続とサーバーを初期化するコードが含まれています。 このファイルをローカルのテキストエディターで開くと、次の内容が表示されます。

server.js

const Hapi = require('hapi');
const mongojs = require('mongojs');

// Loads environment variables
// Used only in development
require('dotenv').config({silent: true});

const server = new Hapi.Server();
server.connection({ port: process.env.PORT || 3000 });

// Connect with the database
server.app.db = mongojs(process.env.MONGO_HOST + '/api');

// Add the routes
server.register(require('./routes'), (err) => {

 if (err) {
   console.error('Failed to load plugin:', err);
 }

 // Start the server
 server.start((err) => {
   if (err) {
     throw err;
   }

   console.log('Server running at:', server.info.uri);
 });
});

このチュートリアルのスペースを節約するために、ルートのコードはHapi.jsプラグインとしてカプセル化されていますが、興味がある場合は、ファイル `+ routes.js +`を確認できます。

`+ server.js`ファイルの重要な部分は次のとおりです。

server.js

require('dotenv').config({silent: true});

これは、 + dotenv + Node.jsパッケージを使用して、 `+ .env `ファイルから環境変数をロードします。 動作に興味がある場合は、https://github.com/motdotla/dotenv [Githubリポジトリ]で ` dotenv +`パッケージのドキュメントを確認できます。 開発プロセスのためにのみ、このファイルに変数を保存します。ターミナルに手動で変数を書き込むよりも簡単です。 本番環境では、DockerからRancherを介して変数を取得します。

次に、変数が定義されていない場合に備えて、「+ PORT 」という環境変数を使用して、フォールバック値「+3000」を使用してサーバーのポートを設定します。

server.js

server.connection({ port: process.env.PORT || 3000 });

ポート + 3000 +`はNode.jsアプリケーションの一般的な規則です。 この値は必要に応じて変更できます。唯一の要件は、http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml [上記の「+1023+」以上「+65535+」であることです]。

最後に、ルートをロードしてサーバーを起動する前に、 `+ MONGO_HOST +`という環境変数を使用してMongoDBサーバーに接続します。

server.js

server.app.db = mongojs(process.env.MONGO_HOST + '');

この環境値は、MongoDBコンテナーを作成すると、MongoDBサーバーのホスト名を使用してRancherで定義されます。 値「++」は接続するデータベースの名前であり、存在しない場合は自動的に設定されます。

アプリが何を探しているのか、ポートとデータベース接続をどのように構成するかについての背景がわかったので、Dockerを見てみましょう。

ステップ2-Dockerイメージの構築

RancherはDockerイメージを使用してアプリケーションをサーバーにデプロイするため、アプリケーション用のDockerイメージを作成しましょう。 アプリのDockerイメージを作成するには、イメージを作成するときにDockerが実行する一連の手順を含む `+ Dockerfile +`というファイルが必要です。 このファイルは、複製したアプリケーションリポジトリに既に含まれています。 その内容を見て、仕組みを理解しましょう。 テキストエディタで開くと、次のコードが表示されます。

Dockerfile

FROM node:6
MAINTAINER James Kolce <[email protected]>

RUN mkdir -p /usr/api
COPY . /usr/api
WORKDIR /usr/api
RUN npm install --production

ENV PORT 3000
EXPOSE  $PORT

CMD ["npm", "start"]

各ステップを詳しく見てみましょう。 まず、次の行が表示されます。

Dockerfile

FROM node:6

この行は、Docker Hubからhttps://hub.docker.com/_/node/[official Node.js image]の上にイメージが構築されていることを宣言し、アプリからNode.jsのバージョン6を選択しているそのバージョン以上でのみ利用可能ないくつかのES6機能を使用します。 本番環境で*最新*を使用するのではなく、特定のバージョンを選択することをお勧めします。これにより、アプリを壊す可能性のある変更を避けることができます。

その行の後、作業ディレクトリを設定します。

Dockerfile

RUN mkdir -p /usr/api
COPY . /usr/api
WORKDIR /usr/api

まず、 + mkdir`コマンドを実行して、 + / usr / api _`という新しいディレクトリを作成します。これは、アプリケーションが存在する場所です。 `+ -p `フラグは、 ` mkdir +`が必要に応じて中間ディレクトリを作成することを意味します。 次に、イメージの内容をそのディレクトリにコピーします。 次に、この新しいディレクトリを作業ディレクトリとして設定し、後続のコマンドがそのディレクトリから実行されるようにします。

次の行は、 `+ npm +`コマンドを実行し、アプリの本番依存関係をインストールします。

Dockerfile

RUN npm install --production

次に、次の2行が表示されます。

Dockerfile

ENV PORT 3000
EXPOSE  $PORT

最初の行は、アプリケーションがリスニングポートに使用する「+ PORT 」という環境変数を定義します。 この変数が定義されていない場合に備えて、デフォルト値として「+3000」を設定します。 次に、そのポートを公開して、コンテナの外部からアクセスできるようにします。 環境変数を使用すると、アプリケーションコードを書き直すことなく、これを簡単に変更できます。 そして、このアプリケーションはこれらの環境変数を使用するように設計されていることを忘れないでください。

Dockerfileの最後のステップでは、 `+ npm start +`コマンドを発行してNode.jsサーバーを実行します。

Dockerfile

CMD ["npm", "start"]

このファイルからアプリケーションのDockerイメージを作成するには、ターミナルの `+ hapi-example +`フォルダーにいることを確認し、次のコマンドを実行します。

docker build -t / .

このコマンドは、 `+ Dockerfile `を使用してDockerイメージを作成します。 コマンドの最後にあるドットに注意してください。 これは、現在のフォルダーにある ` Dockerfile `へのパスを指定します。 ` -t `フラグは画像にタグを設定します。タグには ` / +`を使用します。これは画像に適用するラベルで、画像からコンテナインスタンスを作成するために使用できます。 Docker Hubのユーザー名をプレフィックスとして使用します。テストするとこのイメージを公開する準備をしているため、DockerイメージのローカルタグはDocker Hubのリポジトリ名と一致する必要があります。

次に、作成したばかりのイメージをテストして、すべてが期待どおりに機能することを確認します。 前に見たように、アプリケーションはMongoDBに依存しているため、アプリケーションがデータを保存するために使用できるMongoDBコンテナーを作成しましょう。 次のコマンドを実行して、公式のMongoDB Dockerイメージに基づいてMongoDBコンテナーを作成および開始します。

docker run --name  -p 27017:27017 -d mongo:

`-name +`オプションを使用して、コンテナに一時的な名前を割り当てます。アプリケーションのテストが終了したら、その名前を使用してサーバーを停止します。 また、ホストポート「+27017」をコンテナによって公開されているポートにバインドし、ローカルのWebブラウザーを使用してMongoDBが実行されていることをテストできるようにします。 最後に、使用する画像を指定します。 すべてが期待どおりに機能することを保証するために、アプリケーションが開発された同じバージョンのMongoDBを使用することをお勧めします。この場合、バージョン「3」を指定します。

そのコマンドを実行した後、ブラウザーで + http:// localhost:27017 +`にアクセスすると、メッセージが表示されます: `+ネイティブドライバーポートでHTTPを介してMongoDBにアクセスしようとしているようです+ MongoDBが実行されています。

次のコマンドを実行して、アプリケーションコンテナーを実行し、MongoDBコンテナーにリンクします。

docker run --name  -p 3000:3000 -d -e MONGO_HOST= --link  /

このコマンドは、MongoDBコンテナーを起動するために使用したコマンドに似ていますが、今回はアプリケーションイメージ( + / +)を使用し、ホストのポート `+ 3000 `をコンテナーによって公開されたポートにマップします。 これは、 ` Dockerfile `を作成したときに使用したポートと同じです。 また、データベースサーバーに接続するためにアプリケーションで使用されるMongoDBコンテナーの名前を指定する「 MONGO_HOST 」という環境変数を追加します。 `-link +`パラメーターを使用すると、データベースコンテナーの名前をアプリケーションのコンテナー内のホストとして使用できます。

コマンドを実行した後、ブラウザーで `+ http:// localhost:3000 +`にアクセスしてアプリケーションをテストします。 空のページが*エラーなしで表示されます*。

Dockerイメージがローカルで機能することが証明されたので、ローカルコンテナーを停止して削除しましょう。 コンテナを削除することは、イメージを削除することと同じではないことに注意してください。 後でコンテナを再作成したり、画像をRancherにプッシュしたりできるように、画像はそのまま残ります。これは、ローカル環境をクリーンアップした後に行います。

最初に、以前に定義した名前を使用してデータベースコンテナを停止します。

docker stop

コンテナが停止したので、もう必要ないのでマシンから削除できます。

docker rm

アプリケーションコンテナに対して同じ手順を繰り返します。 まず停止してから削除します。

docker stop  && docker rm

次に、Rancherで使用できるように、作業イメージを公開しましょう。

ステップ3-Docker Hubへの画像のアップロード

Rancherを使用してコンテナをデプロイするには、Dockerレジストリ_にアクセスする必要があります。ここで、Dockerイメージを保存するリポジトリを作成できます。 Dockerの公式レジストリであるhttps://hub.docker.com/[Docker Hub]を使用します。 Docker Hubは、パブリックリポジトリに無料で使用できます。

ユーザー名とパスワードを使用してDocker Hubにログインします。 ログインしたら、画面の右側にある[リポジトリの作成]ボタンをクリックします。 次のようにフィールドに入力します。

  • 名前(必須):リポジトリの名前。この場合は「++」です。

  • 説明:将来的に画像をすばやく識別するための短い説明。

  • 完全な説明:画像の参照としてマークダウンドキュメントをここに追加できますが、アプリケーションは非常に単純なので、このフィールドを空のままにしておくことができます。

  • 可視性:自分だけがアクセスできるプライベートな画像、または誰でも画像を使用できるパブリックな画像を設定できます。 このチュートリアルでは、パブリックリポジトリを作成します。

すべての必須フィールドに入力したら、[作成]ボタンをクリックします。 プロセスが完了すると、新しいリポジトリサイトにリダイレクトされます。

Dockerイメージをアップロードするには、 `+ docker +`コマンドを使用してDocker Hubにログインする必要があります。 端末に戻り、次のコマンドを実行します。

docker login

ユーザー名とパスワードの入力を求められます。 ほとんどのCLIツールと同様に、パスワードを入力しても表示されません。

ログインしたら、次のコマンドを使用して画像をDocker Hubにアップロードします。これにより、すべてのファイルがリポジトリにアップロードされます。

docker push /

ローカルのインターネット接続によっては、画像をプッシュするのに数分かかる場合があります。 イメージが正常に公開されると、Rancherを使用してホストをセットアップできます。

ステップ4-Rancherでのホストサーバーの作成とラベル付け

Rancherを使用して、サービスを展開するために必要なすべてのホストを作成しましょう。 Node.jsアプリケーション用に2つ、MongoDBサーバー用に1つ、ロードバランサー用に1つ必要です。 これはすべて、DigitalOceanのAPIを使用してRancher UI内で行います。

ブラウザで「+ http:// +」にアクセスしてRancherインターフェースにアクセスし、次の手順に従って必要な4つのホストを作成します。

  1. * Infrastructure> Hosts に移動し、ページ上部の Add Host *ボタンをクリックします。

  2. ホストプロバイダーとして* DigitalOcean *を選択します。

  3. 生成したDigitalOceanアプリケーショントークンを* Access Token フィールドに貼り付け、 Next:Configure Droplet *をクリックします。

  4. 名前を割り当てます。 「+」と入力すると、「 host1 」から「 host4 +」までの名前が自動的に生成されます。

  5. * Quantity スライダーを 4 *ホストに移動します。

  6. * Image には、デフォルト値の Ubuntu 16.04.1 x64 *を使用します。

  7. サイズ*には、デフォルト値の 1gb RAM、30gb Disk、1 vCPU *を使用します。

  8. * SSH User フィールドは root *のままにしておくことができます。

  9. [作成]ボタンをクリックし、サーバーが作成されてRancherに追加されるまで数分待ちます。

Rancherがすべてのホストの作成を完了したら、各コンポーネントにラベルを追加してタイプを分類し、各コンポーネントを配置する場所を整理できるようにします。 ホストにラベルを付けると、サーバーの種類に応じてサーバーを拡張できます。 たとえば、アプリケーションに対する需要が多すぎる場合、そのタイプのサーバーの数を増やすことができ、Rancherは適切なDockerコンテナーを自動的にデプロイします。 作成するラベル: + loadbalancer、` + application`、および + database

最初のラベル、「+ loadbalancer +」を作成しましょう。

  1. * Infrastructure> Hosts *に移動し、最初のホスト「++」を選択します。

  2. *オプション*ボタン(ページ上部に縦に3つの点があるアイコン)をクリックし、*編集*オプションを選択します。

  3. * + Add Label ボタンをクリックし、 Key *入力に「+ type 」という単語を入力し、* Value *入力に「 loadbalancer +」と入力します。

  4. [保存]ボタンをクリックします。

次に、アプリケーションホストにラベルを付けます。 次の2つのホストで前のプロセスを繰り返しますが、今回は* Value *入力で `+ application +`を使用します。

最後のホストについて、プロセスを再度繰り返しますが、*値*入力で `+ database +`を使用します。

4つのホストすべてにラベルが設定されているはずなので、サービスを設定しましょう。 データベースから始めます。

手順5-MongoDBサーバーの展開

Docker Hubの公式MongoDB Dockerイメージを使用して、データベースサーバーを展開します。 MongoDBコンテナには、すべてのデータを保存するためのhttp://docs.rancher.com/rancher/v1.0/zh/rancher-compose/#sidekicks[sidekick]コンテナもあります。 両方のコンテナは、「+ database」というラベルの付いたホストにデプロイされます。

それを行うには、Rancherユーザーインターフェイスで次の手順を実行します。

  1. * Stacks メニューを選択し、 User オプションを選択してから、 Define a Service *ボタンをクリックします。

  2. サービスの追加*ページで、*スケール*スライダーが 1コンテナ実行*に設定されていることを確認します。

  3. サービスの名前には、「++」を使用します。

  4. 画像については、「+ mongo:3+」と入力します。

  5. 上部セクションの[サイドキックコンテナの追加]ボタンをクリックします。

  6. この新しいコンテナに「++」という名前を付けます。 このコンテナは、MongoDBデータを保存するボリュームとして使用されます。

  7. このコンテナはデータのみに使用するため、 `+ busybox +`イメージを使用します。

  8. 以下の*コマンド*タブで、* Autorestart オプションを Never(Start Once)*に切り替えます。これは、このコンテナーをストレージにのみ使用するためです。

  9. *ボリューム*タブに切り替え、*ボリュームの追加*ボタンをクリックして新しいボリュームを追加します。 表示されるテキストフィールドに「+ / data / db +」と入力します。 これは、MongoDBがデータを保存するデフォルトのパスです。

  10. *スケジューリング*タブに切り替えて、*スケジュールルールの追加*ボタンをクリックし、次のパラメーターを入力します。 このルールを作成するには、ドロップダウンを使用してください。

  11. * MongoDB サービスタブをクリックしてから、 Command タブまでスクロールし、 Autorestart オプションが Always *に設定されていることを確認します。

  12. * Volumes タブに切り替えて、 Volumes From オプションで Data *を選択します。

  13. * Scheduling *タブに切り替えて、次のパラメータを使用して新しいスケジューリングルールを追加します。 + The host must have a host label of type = database +

  14. 最後に、下部にある[作成]ボタンをクリックし、サービスがアクティブになるまで数分待ちます。

それでは、アプリケーションサービスを設定しましょう。

ステップ6-Node.jsアプリケーションのデプロイ

同様のアプローチを使用して、以前に準備したNode.jsアプリケーションをデプロイします。 Docker Hubに保存したイメージは、「+ application or」というラベルの付いたホストにデプロイされ、MongoDBサービスにリンクしてデータを保存およびアクセスします。 したがって、Rancherユーザーインターフェイスで次の手順を実行します。

  1. * Stacks メニューを選択し、 User オプションを選択してから、 Default スタックの Add Service *ボタンをクリックします。

  2. * Scale *セクションで、*すべてのホストでこのコンテナの1つのインスタンスを常に実行する*オプションを選択します。

  3. このサービスに使用する名前は「++」です。

  4. イメージには、Docker Hubにデプロイしたものを使用します。 「+ / +」を入力します。

  5. * Service Links ボタンをクリックして、 Destination Service を選択し、 MongoDB *を選択します。 次に*名前として*を選択し、「+ db 」と入力して、「 NodeJS +」サービスがこの名前を使用してMongoDBサービスにアクセスできるようにします。

  6. ページの下部にある[コマンド]タブで、[環境変数の追加]ボタンをクリックし、「+ db 」という値を持つ「 MONGO_HOST +」という名前の変数を追加します。一つ前の手順。 アプリケーションはこの環境変数に依存してデータベースサーバーを検索することに注意してください。

  7. *スケジューリング*タブに切り替え、*スケジューリングルールを追加*ボタンをクリックし、ドロップダウンを使用して、「+ホストにはタイプ=アプリケーション+のホストラベルが必要」というルールを作成します。

  8. 最後に、[作成]をクリックして、Rancherがサービスをセットアップするのを待ちます。

すぐに、新しい「+ NodeJS 」サービスが2つのコンテナーを起動したことがわかります。 * Infrastructure *メニューを選択し、* Hosts *をクリックすると、「 application +」というラベルの両方のホストがこの新しいサービスを実行していることがわかります。 複数あるので、ロードバランサーを設定して、これらのホストの両方を効果的に使用できるようにします。

手順7-ロードバランサーの展開

ロードバランサーは、「+ NodeJS +」サービスにリンクされ、アプリケーションホスト全体のすべてのコンテナー間でワークロードのバランスを取ります。

  1. ロードバランサーを作成するには、* Stacks メニューを選択し、 User オプションを選択します。 今回は、 Add Service ボタンの横にある矢印をクリックして、ドロップダウンリストから Add Load Balancer *を選択します。

  2. * Name *には、「+ LoadBalancer +」と入力します。

  3. ポートルール*セクションで、*リクエストホストポート(最初のポートフィールド)を `+ 80 `に設定し、*ターゲットポート*(2番目のもの)を ` 3000 `に設定します。 ` NodeJS +`コンテナが公開されています。

  4. * Target Service オプションで、 NodeJS *を選択します。これは、最近作成したサービスです。

  5. ページの下部にある[*スケジューリング]タブで、[*スケジューリングルールの追加]ボタンをクリックして、「+ The Host must have a host label of type = loadbalancer + `」というルールを作成します。

  6. 最後に、*作成*をクリックして、Rancherがサービスをアクティブにするまで待ちます。

サービスを作成するたびに、作成したラベルを使用してサービスの展開方法を決定しました。 これにより、将来、追加のホストを簡単に管理できます。 では、動作することを確認しましょう。

ステップ8-アプリケーションのテスト

アプリケーションをテストするには、ロードバランサーホストのアドレスを取得する必要があります。 * LoadBalancer *サービスを選択すると、*ポート*タブにIPアドレスが表示されます。

アプリケーションが機能していることをテストするには、ターミナルで次のコマンドを実行します。

curl

このコマンドは、GET要求をサーバーに送信します。 データベースが空であるため、空の配列( + [] +)を含む応答が表示されます。

次のコマンドを実行して、データベースにメッセージを追加し、アプリケーションがデータを保存できることを確認します。

curl -i -X POST -H "Content-Type:application/json"  -d '{"message":""}'

このコマンドは、値がの `+ message `キーを含むJSONオブジェクトとともにPOSTリクエストをサーバーに送信します。 要求を送信した後、MongoDBからの「 _id」とともに、応答として送信したのと同じメッセージを受信する必要があります。 これは、MongoDBサーバーとの接続が機能し、アプリケーションがデータを保存したことを意味します。

ここで、アプリケーションが適切に機能することを再確認するには、最初のコマンドを再度実行すると、前の手順で追加したメッセージが表示されます。

curl

出力は次のようになります。

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
cache-control: no-cache
content-length: 61
Date: Wed, 05 Jan 2017 20:07:02 GMT
Connection: keep-alive

{"message":"This is a test","_id":"e64d85579aee7d1000b075a2"}

この時点で、2つのアプリケーションサーバー、データベース、ロードバランサーが構成され、使用できる状態になりました。 より多くのトラフィックを処理するためにサービスを拡張する方法を見てみましょう。

ステップ9-Node.jsサーバーのスケーリング

アプリケーションが多くの需要を得始め、サーバーが負荷を処理できない場合、Node.jsサーバーの量を増やすことができ、アプリケーションホスト全体のコンテナー間で負荷が自動的に分散されます。 次の手順に従って、アプリケーションをスケーリングします。

  1. * Infrastructure> Hosts ページに移動し、 Add Host *ボタンをクリックします。

  2. 同じ名前のフィールドにDigitalOcean * Access Token *を追加します。

  3. 最後に作成したホストは `+ host4 `であったため、最初の新しいホストの名前として ` host5 `を使用します。 2つの新しいホストを作成するため、Rancherは次のホストに自動的に「 host6 +」という名前を付けます。

  4. 必要な数量を選択してください。この場合、ホストをさらに* 2 *追加します。

  5. * Image には、デフォルト値の Ubuntu 16.04.1 x64 *を使用します。

  6. サイズ*には、デフォルト値の 1gb RAM、30gb Disk、1 vCPU *を使用します。

  7. [ラベルの追加]ボタンをクリックし、[キー]入力に「+ type 」と入力し、[値]入力に「 application +」と入力します。

  8. [作成]ボタンをクリックして、新しいホストがアクティブ化されてRancherに追加されるまで待ちます。

新しいホストがオンラインになった後、それらはアプリケーションホストとしてラベル付けされるため、 `+ NodeJS +`アプリケーションの新しいインスタンスが自動的に設定およびデプロイされ、ロードバランサーは4つのホストの4つのコンテナーにワークロードを分散します。

結論

このチュートリアルでは、MongoDBを使用したデータストレージをサポートする機能的なNode.jsアプリケーションを準備、デプロイ、およびスケーリングする方法を学びました。 ご覧のとおり、RancherとそのGUIを使用すると、プロセスは非常に直感的で、完全なアプリケーションを簡単にスケーリングできます。 また、Rancherのスケジューリング機能のおかげで、アプリが大ヒットしたときに、負荷を簡単に処理できるようになります。

前の投稿:ダウンロードしたファイルを確認する方法
次の投稿:Ubuntu 16.04でMySQL 5.6を使用してGaleraクラスタを構成する方法