負荷分散の概要 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製品詳細ページの虫眼鏡効果コンポーネントをカプセル化します
データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...
MySQL が複数のテーブルを結合するときに、次のエラーが報告されます: [Err]1267 – 操...
Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...
1. ubuntu16.04 イメージと対応する ubuntu16.04 カーネル バージョンのソー...
1. サーバーを購入するこの例では、購入したサーバーはAlibaba Cloudです。大学生はAli...
最近、個人の Web サイトに非常にシンプルなカラー スキーム (テーマ) スイッチャーを追加しまし...
障害者の定義と使用法disabled 属性はブール属性です。 disabled 属性は、テキスト領域...
目次更新可能なビュービューのパフォーマンスビューの制限ビューは MySQL 5.0 以降で導入されま...
目次序文1. セレンとは何ですか? 2. 使用手順1. ライブラリをインポートする2. テストコード...
目次インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックスプッ...
ビジネスシナリオの要件と実装ロジックの分析ビジネスでは、HTTP GET を使用してデータを要求する...
Ubuntu Server 16.04 MySQL 8.0 のインストールと設定のグラフィックチュー...
1. ダウンロード2. 減圧3. パス環境変数を追加し、mysqlが配置されているbinディレクトリ...
アニメーションアニメーションを定義します。 /*アニメーションの各ステップで実行されるアクションを定...
Unicode は、世界中のすべてのテキストと記号に対応できる国際組織によって開発された文字エンコー...