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 ロック(テーブルロック、行ロック、共有ロック、排他ロック、ギャップロック)の詳細な説明

推薦する

JavaScript strictモードの概要 strictを使用する

目次1. 概要1.1 厳密モードとは何ですか? 1.2 厳密モードの目的2. 厳密モードを有効にする...

JSは画像の滝の流れの効果を実現します

この記事では、画像ウォーターフォールフローを実現するためのJSの具体的なコードを参考までに共有します...

HTML テーブル境界コントロールの詳細な説明

上の境界線のみを表示する <table frame=above>下の境界線のみを表示する...

DIV と画像の水平および垂直の中央揃えは複数のブラウザと互換性があります

最初のタイプ: 完全な CSS コントロール、レイヤーフローティング (ログインページに適しています...

CSSセレクターでの正規表現の使用

はい、CSS にも正規表現があります (アーメン) CSS で目立つための 2 つの強力なツール: ...

MySql はデータを正常に挿入しますが、[Err] 1055 エラーが報告されます。解決策

1. 質問:最近、挿入操作を行っています。MySQLのバージョンは5.7です。挿入は成功しますが、エ...

calc() で全画面背景の固定幅コンテンツを実現

ここ数年、Web デザインには「全幅背景と固定幅コンテンツ」というトレンドが生まれています。このデザ...

dockerカスタムイメージでphp7をビルドする方法

まず、簡単な Docker インストールを実行します。イメージをカスタマイズするには、ベースイメージ...

フォーム送信の更新ページはソースコード設計にジャンプしません

1. ソースコードの設計コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

Linuxカーネルがプロセスアドレス空間に侵入し、プロセスメモリを変更する方法

プロセス アドレス空間の分離は、現代のオペレーティング システムの注目すべき機能です。これは、「古い...

なぜ IE6 が最も多くの人に使用されているのでしょうか?

まず第一に、私はウェブデザイナーです。具体的には、私は XHTML フロントエンド デザイナーです。...

CocosCreatorでWeChatゲームを作成する方法

目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...

Linux システムの .bash_profile ファイルの詳細な説明

目次1. 環境変数$PATH: 2. 環境変数を変更します。 3. bash_profileの目的要...

MySQLでカーソルを宣言する方法

MySQL でカーソルを宣言する方法: 1. 変数とカーソルを宣言する 結果をvarchar(300...

Nginx 7層負荷分散のいくつかのスケジューリングアルゴリズムの簡単な理解

この記事は主に、Nginx 7 層負荷分散のいくつかのスケジューリング アルゴリズムを紹介します。こ...