負荷分散の概要 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製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します
MySql Nullフィールド判定とIFNULL失敗処理ps: (プロセスを表示したくない場合は、S...
画像の色を変更するための CSS テクニックは非常にシンプルです。具体的なコードは次のとおりです。ヒ...
目次1. toStringメソッドの3つの機能2. オブジェクトを表す文字列を返す3. カスタム t...
Dockerのインストール公式インストールスクリプトを使用して最新バージョンのDockerをインスト...
目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...
前回の記事では、webpack と react 環境を設定した後、ログイン インターフェースとその後...
MySQL は、スウェーデンの会社 MySQL AB によって開発され、現在は Oracle が所有...
最近レスポンシブ デザインについて学んでいて、これについていくつか整理してみました。写真の一部はイン...
この記事は主に、Nginx のフォワード プロキシとリバース プロキシ、および負荷分散機能の設定コー...
この記事は主に、Nginx セッション共有の問題に対する解決策を紹介します。記事内のサンプル コード...
1. パーティションテーブルの意味パーティション テーブル定義は、任意のサイズに設定できるルールに従...
ページ A、B、C の 3 つがあります。ページ A にはページ B が含まれ、ページ B にはペー...
Flappy Bird は、誰もがアプリでプレイしたことがある非常にシンプルな小さなゲームです。ここ...
docker コンテナの下に kong クラスターを構築するのは非常に簡単です。公式サイトの紹介も非...
シミュレーションテーブルとデータスクリプト次の SQL ステートメントをコピーして、sys_dept...