Dockerによる負荷分散

Webアプリケーションを実行するときは、通常、ソフトウェアをマルチスレッドまたは複雑なイベントループを使用するように変換せずに、リソースを最大限に活用する必要があります。ただし、Dockerは、アプリケーションを内部的に負荷分散してサーバーリソースを最大限に活用するための簡単な方法を提供します。この記事では、Nginxを使用して、CentOSのDockerでWebアプリケーションの負荷を分散する方法を説明します。

ステップ1:簡単なアプリケーションを作成する

rustを使用して、この単純なアプリケーションを作成します。rustがインストールされていると想定して、を実行しcargo new webapp –binます。成功すると、というディレクトリが表示されwebappます。の中にwebapp、というファイルが表示されCargo.tomlます。次の行を追加します。

[dependencies.iron]
version = "*"

次に、src/main.rsファイル内ですべてを削除し、次のように入力します。

extern crate iron;

use iron::prelude::*;
use iron::status;

fn main() {
    Iron::new(|_: &mut Request| {
        Ok(Response::with((status::Ok, "Hello Vultr :)")))
    }).http("0.0.0.0:3000").unwrap();
}

注:アプリケーション内でIPを変更しないでください。これは、Dockerがアプリケーションをリッスンできるように構成されています。

完了したら、を実行してアプリケーションをコンパイルしますcargo build –release。サーバーによっては、数分かかる場合があります。エラーがない場合は、次の手順に従ってアプリケーションをテストします。

  • を実行しますtarget/release/webapp
  • http://0.0.0.0:3000/ブラウザでに移動します。を0.0.0.0サーバーのIPアドレスに置き換えます。

すべてが適切に機能していれば、ページに「Hello Vultr :)」と表示されます。

ステップ2:Dockerコンテナーを作成する

を作成Dockerfileし、以下を入力します。

FROM centos:latest
MAINTAINER User <user@localhost>
RUN yum update -y
COPY ./webapp/target/release/webapp /opt/
EXPOSE 3000
WORKDIR /opt
CMD ./webapp

ファイルを保存します。次に、というファイルを作成deploy.shし、次のように入力します。

DEFAULT_PORT=45710
APP_PORT=3000
DEPLOY=5
NAME="webapp"
docker build -t webapp:example . 

for ((i=0; i<DEPLOY; i++)); do
        docker kill $NAME$i ; docker rm $NAME$i
        docker run --name $NAME$i -p 127.0.0.1:$(((i * 1000) + DEFAULT_PORT)):$APP_PORT -d webapp:example
done

このスクリプトを実行すると、イメージがビルドされ、設定した量(デフォルトは5)に基づいてコンテナーがデプロイされます。コンテナが存在する場合、コンテナは再デプロイされる前に強制終了され、レジストリから削除されます。

ステップ3:Nginxを構成する

次に、Nginx構成ファイルを作成し、次の内容を入力します。

upstream application {
    server localhost:45710;
    server localhost:46710;
    server localhost:47710;
    server localhost:48710;
    server localhost:49710;
}

server {
    listen 0.0.0.0:80;    
    location / {
    expires 1w;
        proxy_pass http://application;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

0.0.0.0サーバーのIPアドレスに置き換えます。

を実行してNginxを再起動しsystemctl restart nginxます。エラーをすべて解決してから、次の手順に進みます。

ステップ4:アプリケーションをデプロイする

を実行してアプリケーションをデプロイしますbash ./deploy.sh

でアプリケーションのステータスを確認できます。docker psで始まる5つのイメージが作成されwebappます。http://0.0.0.0:3000/ブラウザに移動すると、「Hello、Vultr :)」というメッセージが再び表示されます。

それで、これは正確にどのような違いをもたらしますか?

ロードバランサーの構成に対してベンチマークテストを実行すると、サーバーリソースがより多く使用されていることがわかります。これは、特にアプリケーションが通常はシングルスレッドであるNodeのような言語で構築されている場合に必要です。アプリケーションをアップグレードする必要がある場合は、アップグレードしてdeploy.shイメージを再構築し、コンテナをデプロイするためにを再実行できます。



Leave a Comment

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

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

概要RancherOSは、システムサービスを実行するためのPID 0としてシステムDockerデーモンを実行する、信じられないほど軽量なオペレーティングシステム(わずか約60 MB)です。

Ubuntu 18.04にDocker CEをインストールする

Ubuntu 18.04にDocker CEをインストールする

はじめにDockerは、コンテナーとして実行されるプログラムをデプロイできるアプリケーションです。それは人気のあるGoプログラミング言語で書かれました

Ubuntu 14.04へのDockerのインストール

Ubuntu 14.04へのDockerのインストール

別のシステムを使用していますか?Dockerは、コンテナーとして実行されるプログラムをデプロイできるアプリケーションです。それは人気のある囲碁programminで書かれました

Dockerを使用してNode.jsアプリケーションをデプロイする

Dockerを使用してNode.jsアプリケーションをデプロイする

この記事では、Dockerコンテナー内にノードアプリケーションをデプロイする方法を示します。注:このチュートリアルでは、Dockerがインストールされており、

Alpine Linux 3.9.0でDocker Swarmを作成する

Alpine Linux 3.9.0でDocker Swarmを作成する

はじめにこのガイドでは、複数のAlpine Linux 3.9.0サーバーとPortainerを使用してDockerスウォームを作成および構成する方法について説明します。ご注意ください

CentOS 7にHarbourをインストールする方法

CentOS 7にHarbourをインストールする方法

Harbourは、Dockerイメージを格納および配布するオープンソースのエンタープライズクラスのレジストリサーバーです。HarbourはオープンソースのDockerディストリビューションを拡張しますb

CentOS 7でKubernetesを使ってみる

CentOS 7でKubernetesを使ってみる

Kubernetesは、サーバーのクラスタ全体でコンテナ化されたアプリケーションを管理するためにGoogleが開発したオープンソースのプラットフォームです。それは10年に基づいて構築され、

Ubuntu 16.04にRancherをインストールする

Ubuntu 16.04にRancherをインストールする

別のシステムを使用していますか?はじめにRancherは、コンテナーを実行し、プライベートコンテナーサービスを構築するためのオープンソースプラットフォームです。牧場主がベース

CentOS 7にKubeadmを使用してKubernetesをデプロイする

CentOS 7にKubeadmを使用してKubernetesをデプロイする

概要この記事は、kubernetesクラスターをkubeadmですぐに稼働できるようにすることを目的としています。このガイドでは、2台のサーバーを

CoreOSへのdocker-composeのインストール

CoreOSへのdocker-composeのインストール

この記事では、CoreOSにdocker-composeをインストールする方法について説明します。CoreOSでは、/ usr /フォルダーは不変なので、標準の/ usr / local / binパスは使用できません。

CentOS 7にRancherをインストールする

CentOS 7にRancherをインストールする

別のシステムを使用していますか?はじめにRancherは、コンテナーを実行し、プライベートコンテナーサービスを構築するためのオープンソースプラットフォームです。牧場主がベース

Docker-composeを使用してPHPアプリケーションをデプロイする

Docker-composeを使用してPHPアプリケーションをデプロイする

PHPアプリケーションは通常、Webサーバー、リレーショナルデータベースシステム、および言語インタープリター自体で構成されます。このチュートリアルでは、レバラギンになります

CentOS 7へのDockerのインストール

CentOS 7へのDockerのインストール

別のシステムを使用していますか?Dockerは、仮想コンテナー内でのソフトウェアのデプロイメントを可能にするアプリケーションです。それは囲碁プログラムで書かれました

Ubuntu 14.04でのLXCコンテナの安全なデプロイと管理

Ubuntu 14.04でのLXCコンテナの安全なデプロイと管理

LXCコンテナー(Linuxコンテナー)は、単一のホスト上で複数の分離されたLinuxシステムを実行するために使用できるLinuxのオペレーティングシステム機能です。テス

Ubuntu 16.04でDockerを介してSentryをセットアップする

Ubuntu 16.04でDockerを介してSentryをセットアップする

別のシステムを使用していますか?はじめにSentryは、エラー追跡のためのオープンソースのソリューションです。Sentryは例外やその他の有用なメッセージをあちこちで追跡します

Debian 9でのDocker Swarm(CE)とのスティッキーセッション

Debian 9でのDocker Swarm(CE)とのスティッキーセッション

別のシステムを使用していますか?はじめにDocker Swarmは、個々のサーバーをコンピューターのクラスターに変えます。スケーリング、高可用性、

Dockerの使用方法:最初のDockerコンテナーの作成

Dockerの使用方法:最初のDockerコンテナーの作成

このチュートリアルでは、Dockerの基本的な使い方について説明します。Dockerがすでにインストールされていると思います。このチュートリアルの手順は、

CoreOSで、独自のDockerレジストリをセットアップする

CoreOSで、独自のDockerレジストリをセットアップする

私たちは皆、アプリケーションコンテナーを作成、管理、および複数のマシンに分散するプラットフォームであるDockerを知っています。Docker Inc.が提供するサービスt

Dockerを使用してCentOS 7でSQL Server 2017(MS-SQL)を開始する

Dockerを使用してCentOS 7でSQL Server 2017(MS-SQL)を開始する

前提条件Dockerエンジン1.8以降。最低4GBのディスク容量。4GB以上のRAM。ステップ1. DockerをインストールするSQL-Serverをインストールするには、Docker mus

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。