負荷分散の概要 Nginx の負荷分散実装を紹介する前に、負荷分散の分類について簡単に説明します。負荷分散は、主にハードウェア負荷分散とソフトウェア負荷分散に分かれます。ハードウェア負荷分散は、専用のソフトウェアとハードウェアを組み合わせて使用するデバイスです。機器ベンダーは、F5 などの完全で成熟したソリューションを提供します。これは、データの安定性とセキュリティの面で非常に信頼性が高いですが、ソフトウェアよりも高価です。ソフトウェア負荷分散は、主に Nginx などのソフトウェアに基づいており、メッセージ キュー分散メカニズムを実装しています。 簡単に言えば、負荷分散とは、多数のリクエストを転送し、異なるサーバーに割り当てて処理することです。たとえば、A、B、C の 3 つのサーバーがあり、ポーリング戦略を使用して Nginx で負荷分散を行っているとします。この時点で 9 つのリクエストを受信した場合、これらの 9 つのリクエストは A、B、Cf サーバーに均等に分散され、各サーバーは 3 つのリクエストを処理します。このように、複数のマシン クラスターの特性を利用して、単一のサーバーにかかる負荷を軽減できます。 負荷分散を実装する Nginx の例の図: 負荷分散戦略 NGINX Open Source では 4 つの負荷分散方法をサポートしており、NGINX Plus ではさらに 2 つの方法が追加されています。 1.ラウンドロビン: すべてのリクエストをポーリングして送信します。これがデフォルトの割り当て方法です。 nginx.conf の設定例: 上流 サーバー www.panchengming.com; サーバー www.panchengming2.com; } 注: 上記のドメイン名は IP に置き換えることもできます。 2. 接続数が最も少ない: サーバーの重みも考慮して、アクティブな接続数が最も少ないサーバーにリクエストを送信します。 nginx.conf の設定例: 上流 最小接続数; サーバー www.panchengming.com; サーバー www.panchengming2.com; } 3.IPハッシュ: リクエストが送信されるサーバーは、クライアントの IP アドレスによって決まります。この場合、ハッシュ値の計算には IPv4 アドレスの最初の 3 バイトまたは IPv6 アドレス全体が使用されます。この方法により、サーバーが利用できない場合を除き、同じアドレスからのリクエストが同じサーバーに到達することが保証されます。 上流 ip_ハッシュ; サーバー www.panchengming.com; サーバー www.panchengming2.com; } 4.汎用ハッシュ: リクエストが送信されるサーバーは、ユーザー定義のキーによって決定されます。ユーザー定義のキーは、テキスト文字列、変数、またはその組み合わせにすることができます。 上流 ハッシュ $request_uri は一貫しています。 サーバー www.panchengming.com; サーバー www.panchengming2.com; } 5. 最短時間(NGINX Plusのみ) NGINX Plus は、リクエストごとに、平均レイテンシが最も低く、アクティブな接続数が最も少ないサーバーを選択します。平均レイテンシの最小値は、least_time ディレクティブを含む次のパラメータに基づいて計算されます。
上流 least_time ヘッダー; サーバー www.panchengming.com; サーバー www.panchengming2.com; } 6. ランダム: 各リクエストはランダムに選択されたサーバーに渡されます。両方のパラメータが指定されている場合、NGINX は最初にサーバーの重みに基づいて 2 つのサーバーをランダムに選択し、次に指定された方法を使用してそのうちの 1 つを選択します。
上流 ランダム2 least_time=last_byte; サーバー www.panchengming.com; サーバー www.panchengming2.com; } 負荷分散を実現するNginx+SpringBoot 環境の準備
このプロジェクトでは、私が以前に作成した SpringBoot プロジェクトを使用しています。SpringBoot のプロジェクト アドレスは次のとおりです: https://github.com/xuwujing/springBoot-study/tree/master/springboot-thymeleaf まず、プロジェクトをダウンロードし、 Nginx の設定 nginx/conf/nginx.conf ディレクトリにある nginx 設定ファイル nginx.conf を見つけて、設定を変更し、次の設定を追加します。 上流 pancm{ サーバー 127.0.0.1:8085; サーバー 127.0.0.1:8086; }
ラウンドロビン戦略を使用しない場合は、別の戦略に切り替えることができます。 次に、サーバー上で次の構成を追加/変更します。 サーバー{ 聞く 80; サーバー名 127.0.0.1; 位置 / { ルートhtml; proxy_pass http://pancm; proxy_connect_timeout 3秒; proxy_read_timeout 5秒; proxy_send_timeout 3秒; インデックス index.html index.htm; } エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルートhtml; } } 設定手順:
nginx.conf の完全な設定: イベント { ワーカー接続 1024; } error_log nginx-error.log 情報; http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; キープアライブタイムアウト65; 上流 pancm{ サーバー 127.0.0.1:8085; サーバー 127.0.0.1:8086; } サーバー{ 聞く 80; サーバー名 127.0.0.1; 位置 / { ルートhtml; proxy_pass http://pancm; proxy_connect_timeout 3秒; proxy_read_timeout 5秒; proxy_send_timeout 3秒; インデックス index.html index.htm; } エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルートhtml; } } } 負荷分散テスト Nginx の設定が完了したら、Nginx を起動します。 Nginx を起動したら、ダウンロードした Springboot と、変更されたポートがコピーされたプロジェクトを順に起動し、 すべてが正常に起動したら、ブラウザにサービス IP を入力してアクセスできるようになります。 サンプル画像: 注: ここではテストに Windows システムを使用していますが、実際の Linux システムも同じです。 次にそれを実行して、コンソール ログを確認します。 上記の例の図から、4 つのインターフェース更新要求が行われ、最終的に 2 つのサービスに均等に分散されました。上記のテスト結果から、負荷分散が実現されました。 ここでは、Nginx を使用する際の注意事項について説明します。学習やテストの際には、一般的に nginx のデフォルト ポートを使用して負荷分散を実現しても問題ありません。ただし、プロジェクトで使用する場合、特にログイン インターフェイスがあり、ポートが 80 でない場合は、ログイン インターフェイスをリダイレクトできません。デバッグ時に、net::ERR_NAME_NOT_RESOLVED などのエラーが表示されます。これは、nginx のデフォルト ポートが 80 であり、デフォルトのジャンプもこれであるためです。したがって、このような場合は、location の下に proxy_set_header Host $host:port 構成を追加し、ポートと listen ポートが一致している必要があります。 上記は、負荷分散を実現するための Nginx+SpringBoot の例の詳細です。負荷分散を実現するための Nginx の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: CentOS8 で MySQL 8.0 をインストールしてデプロイする方法
>>: Vue3はJingdong製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します
HTML はプレゼンテーションからコンテンツへの移行を試みており、コンテンツの意味(HTML) とプ...
目次1. Bootstrapグリッドシステムの仕組み1.1 12グリッドシステム1.2 Bootst...
mysql のインストール情報を表示します。 #ps -ef | grep mysql usr/bi...
目次1. 計算プロパティとは何ですか? 2. 計算プロパティの構文3. 例1. 計算プロパティとは何...
opencv.zip をダウンロード依存関係を事前にインストールします。まずダウンロードソースを更新...
この記事では、画像を読み込むためのJavaScriptキャンバスの具体的なコードを参考までに紹介しま...
最近、hadoop テスト クラスターで spark ストリーミング プログラムを実行し、その後、n...
1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...
1. 関連ツールと画像をダウンロードするダウンロードリンクバーチャルボックス: https://do...
Win10 システムをインストールしていて、k8s クラスターを構築する場合、Win10 に付属する...
<a href="https://www.jb51.net/" title...
Linux 仮想マシン: VMware + Ubuntu 16.04.4 Windows ネイティブ...
mysql 5.6.35 winx64無料インストールバージョン構成チュートリアルwin10、具体的...
この記事では、フィルターを使用して日付をフォーマットするVueの具体的なコードを参考までに紹介します...
Linux に VMWare をインストールするには、公式 Web サイト https://www....