Nginx の負荷分散方法の概要

Nginx の負荷分散方法の概要

負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。

注記:

  • フォワードプロキシ、エージェントはユーザーです。
  • リバースプロキシ、プロキシはサーバーです

負荷分散とは

サーバーが単位時間あたりに受ける訪問数が増えるほど、サーバーにかかる負荷は大きくなります。負荷がサーバーの許容量を超えると、サーバーはクラッシュします。サーバーのクラッシュを回避し、ユーザーに優れたエクスペリエンスを提供するために、負荷分散を通じてサーバーの負荷を分散します。

多数のサーバーを構築してサーバー クラスターを形成できます。ユーザーが Web サイトにアクセスすると、まず中間サーバーにアクセスし、この中間サーバーにサーバー クラスター内の負荷の少ないサーバーを選択させ、そのサーバーにアクセス要求を転送します。このようにして、ユーザーがアクセスするたびに、サーバー クラスター内の各サーバーの負荷が均衡化され、サーバーの負荷が分散され、サーバーのクラッシュが回避されます。

負荷分散はリバース プロキシの原理を使用して実現されます。

負荷分散の一般的な方法

1. ポーリング(デフォルト)

各リクエストは時系列順に 1 つずつ異なるバックエンド サーバーに割り当てられます。バックエンド サーバーがダウンしている場合は、自動的に削除されます。

アップストリームバックサーバー{
 サーバー 192.168.0.14;
 サーバー 192.168.0.15;
}

2. 重量

ポーリング確率を指定します。重みはアクセス率に比例し、バックエンド サーバーのパフォーマンスが不均一な場合に使用されます。

アップストリームバックサーバー{
  サーバー 192.168.0.14 重み=3;
  サーバー 192.168.0.15 重み=7;
}

重みが高ければ高いほど、訪問される可能性が高くなります。上記の例では、それぞれ 30% と 70% です。

3. 上記の方法には問題があります。負荷分散システムでは、ユーザーがサーバーにログインした場合、ユーザーが 2 回目のリクエストを行うと、負荷分散システムであるため、各リクエストはクラスター内のサーバーの 1 つに再配置されます。サーバーにログインしたユーザーが別のサーバーに再配置されると、ログイン情報が失われるため、明らかに不適切です。

この問題を解決するには、ip_hash 命令を使用できます。クライアントがすでにサーバーにアクセスしている場合、ユーザーが再度アクセスすると、リクエストはハッシュ アルゴリズムを通じて自動的にサーバーに配置されます。

各リクエストはアクセス IP のハッシュ結果に従って割り当てられるため、各訪問者は固定のバックエンド サーバーにアクセスし、セッションの問題を解決できます。

アップストリームバックサーバー{
  ip_ハッシュ;
  サーバー 192.168.0.14:88;
  サーバー 192.168.0.15:80;
}

4. 公正(第三者)

リクエストはバックエンド サーバーの応答時間に基づいて分散され、応答時間が短いリクエストが優先されます。

アップストリームバックサーバー{
  サーバー server1;
  サーバー server2;
  公平;
}

5. url_hash(サードパーティ)

アクセスされた URL のハッシュ結果に応じてリクエストが分散され、各 URL が同じバックエンド サーバーに送られます。これは、バックエンド サーバーがキャッシュされている場合に、より効果的です。

アップストリームバックサーバー{
  サーバー squid1:3128;
  サーバー squid2:3128;
  $request_uri をハッシュします。
  ハッシュメソッドCRC32;
}123456

各デバイスのステータスは次のように設定されます。

  • ダウンとは、注文の前のサーバーが一時的に負荷に関与していないことを意味します。
  • 重みのデフォルトは 1 です。重みが大きいほど、負荷の重量が大きくなります。
  • max_fails: リクエスト失敗の許容数はデフォルトで1です。最大数を超えると、proxy_next_upstreamモジュールで定義されたエラーが返されます。
  • fail_timeout: max_fails 回の失敗後の一時停止時間。
  • バックアップ: 他のすべての非バックアップ マシンがダウンしているかビジー状態の場合は、バックアップ マシンを要求します。したがって、このマシンは最も軽い圧力がかかります。

設定例:

#ユーザーnobody;
ワーカープロセス 4;
イベント {
  # 同時ワーカー接続の最大数 1024;
}
http{
  # 選択されるサーバのリスト アップストリーム myproject{
    # ip_hash ディレクティブは同じユーザーを同じサーバーに誘導します。
    ip_ハッシュ;
    サーバー 125.219.42.4 fail_timeout=60s;
    サーバー 172.31.2.183;
    }

  サーバ{
        # リスニングポート listen 80;
        # ルートディレクトリの場所 / {
          # どのサーバーを選択するか list proxy_pass http://myproject;
        }

      }
}

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • 負荷分散を実現するために nginx をリバースプロキシとして使用する例
  • Nginx ロードバランシングの 4 つの構成例
  • Windows に nginx をインストールする手順の図解 (リバース プロキシと負荷分散)
  • Nginx+Windows 負荷分散構成方法
  • Windows は nginx を使用して Web サイトの負荷分散テスト例を実装します
  • Nginx インストール ノート (PHP サポート、仮想ホスト、リバース プロキシ ロード バランシングを含む)
  • Nginx サーバーの負荷分散戦略の詳細説明(6 種類)
  • Nginx サーバーで TCP の負荷分散を構成する方法
  • 地域負荷分散を実現する Nginx geoip モジュール
  • Nginx 負荷分散マルチサイト共有セッション

<<:  Angularルーティングサブルートの詳細な説明

>>:  MySQL ロック(テーブルロック、行ロック、共有ロック、排他ロック、ギャップロック)の詳細な説明

推薦する

MySQLクエリ書き換えプラグインの使用

クエリ書き換えプラグインMySQL 5.7.6 以降、MySQL Server は、サーバーが実行す...

ノードでシェルスクリプトを使用する方法

背景開発中、特定の状況でビジネス ロジックをバッチ処理するためのスクリプトが必要になる場合があります...

MySQL 8.0.13 zipパッケージのインストール方法について

MySQL 8.0.13 にはデフォルトでデータ フォルダがあります。このフォルダを削除する必要があ...

Linuxカーネルの浮動小数点演算のサポートに関する簡単な説明

現在、ほとんどの CPU は浮動小数点ユニット (FPU) をサポートしています。FPU は、プロセ...

CSS カウンターを使用して数字の順序付きリストを美しく表示する方法

Web デザインでは、Web サイトに表示されるデータの構造とコンテンツをユーザーが明確に理解できる...

HTML で複数のフォームのテキスト ボックスを揃える方法

フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...

vue N​​progress のプログレスバー機能を実装する際の一般的な問題

NProgress は、ページがジャンプしたときにブラウザの上部に表示される進行状況バーです。公式ウ...

Windows で Nginx を使用して https サーバーとリバース プロキシを構成する際の問題

リクエストロジックフロントエンド --> https経由でnginxをリクエストnginx -...

innerHTML を理解する

<br />関連記事: innerHTML HTML DOM insertRow() メ...

JS を使用してクリップボード内の Excel コンテンツを解析する方法

目次序文1. イベントとクリップボードを貼り付ける2. クリップボード内のコンテンツ形式3. HTM...

IIS web.config でクロスドメイン アクセスを設定する方法

要件: ページに画像を表示する必要がありますが、さまざまな理由により、画像はサーバー 2 にあります...

OpenSSL は双方向認証のチュートリアルを実装します (サーバーとクライアントのコード付き)

1. 背景1.1 問題点最近の製品テスト レポートでは、PKI ベースの認証方法の使用が推奨されて...

DockerでMongoDBコンテナをデプロイする方法

目次Dockerとは展開する1. イメージをプルする2. 画像を表示する3. コンテナを実行する4....

HTMLページのネイティブVIDEOタグはダウンロードボタン機能を隠します

Web プロジェクトを作成しているときに、紹介ビデオが別にある紹介ページに遭遇しました。この短いビデ...

MySQL関数の簡単な紹介

目次1. 数学関数2. 文字列関数3. 日付関数4. 暗号化機能主な MySQL 関数は次のように紹...