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

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の未来は、日々成長を続けています。