負荷分散の概要 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製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します
皆さんもJDを使ったことがあると思います。ホームページには非常によく見られる機能があります。階段の特...
DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...
目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...
WeChatアプレット計算機の例、参考までに、具体的な内容は次のとおりです。インデックス.wxml ...
<本文> <div id="ルート"> <h2&...
Busybox: 小さなコマンドが詰まったスイスアーミーナイフ。ステップ1: ディレクトリ構造を作成...
入力ボックスへのユーザー入力、ウィンドウのサイズ変更、スクロール、Intersection Obse...
現在、クロスプラットフォーム開発技術はもはや新しい話題ではありません。市場にはいくつかのオープンソー...
この記事では、例を使用して、MySQL 累積集計の原理と使用方法を説明します。ご参考までに、詳細は以...
目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...
目次初期化初期化状態()初期化プロパティ()初期化データ()観察する()オブザーバーリアクティブを定...
目次1. Docker Compose とは何ですか? 2. Docker Composeのインスト...
次のコードは、Chrome による Cookie の変更の監視を導入しています。コードは次のとおりで...
序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...
XiaobaiはVueについて学び、次にwebpackについて学び、そしてさまざまなものをインストー...