Nginx の負荷分散アルゴリズムとフェイルオーバー分析

Nginx の負荷分散アルゴリズムとフェイルオーバー分析

概要

Nginx ロード バランシングは、アップストリーム サーバー (実際のビジネス ロジックによってアクセスされるサーバー)、ロード バランシング、フェイルオーバー、障害再試行、フォールト トレランス、ヘルス チェックなどを提供します。
上流サーバー (実際のビジネス ロジックがアクセスするサーバー) に障害が発生した場合、他の上流サーバー (実際のビジネス ロジックがアクセスするサーバー) に転送できます。

構成

アップストリームバックサーバー{
    サーバー 127.0.0.1:8080;
    サーバー 127.0.0.1:8081;
  }
  
  サーバー{
    聞く 80;
    サーバー名 www.itmayiedu.com;
    位置 / {
      ### アップストリーム サーバーの負荷分散サーバー proxy_pass http://backServer を指定します。
      インデックス index.html index.htm;
    }
  }

負荷分散アルゴリズム

各リクエストは時系列順に異なるバックエンド サービスに割り当てられます。バックエンド サーバーがクラッシュした場合、障害のあるシステムは自動的に削除され、ユーザー アクセスに影響が及ぶことはありません。

重み(ポーリング重み)

重み値が大きいほどアクセスされる確率が高くなります。主にバックエンドサーバーごとのパフォーマンスにばらつきがある場合に使用されます。または、マスターとスレーブの状況で異なる重みを設定するだけで、ホスト リソースを合理的かつ効果的に使用できます。

通常は比例する

アップストリームバックサーバー{
 サーバー 127.0.0.1:8080 重み=1;
 サーバー 127.0.0.1:8081 重み=2;
 }

ip_ハッシュ

各リクエストはアクセス IP のハッシュ結果に従って割り当てられるため、同じ IP アドレスからの訪問者は固定のバックエンド サーバーにアクセスでき、動的 Web ページのセッション共有問題を効果的に解決できます。一般的には IP バインディングと呼ばれます。

アップストリームバックサーバー{
   サーバー 127.0.0.1:8080 ;
   サーバー 127.0.0.1:8081 ;
   ip_ハッシュ; 
 }

公正(第三者)

フェア アルゴリズムは、重み付けや ip_hash よりもスマートな負荷分散アルゴリズムです。ページ サイズと読み込み時間に応じて負荷をインテリジェントに分散できます。つまり、バックエンド サーバーの応答時間に応じてリクエストを割り当て、応答時間が短いリクエストを優先します。 Nginx 自体は fair をサポートしていません。このスケジューリング アルゴリズムが必要な場合は、upstream_fair モジュールをインストールする必要があります。

url_hash(サードパーティ)

アクセスされた URL のハッシュ結果に応じてリクエストを分散し、各 URL がバックエンド サーバーに送信されるように設定するこで、バックエンド キャッシュ サーバーの効率をさらに向上させることができます。 Nginx 自体は url_hash をサポートしていません。このスケジューリング アルゴリズムが必要な場合は、Nginx ハッシュ パッケージをインストールする必要があります。

Nginx 構成のフェイルオーバー

  • アップストリーム サーバー (実際のアクセス サーバー) に障害が発生したり、時間内に応答しなかったりした場合は、サーバーの高可用性を確保するために、次のサーバーを直接ローテーションする必要があります。
  • nginx とアップストリーム サーバー (実際にアクセスしたサーバー) 間のタイムアウト、バックエンド サーバー接続のタイムアウト (ハンドシェイクを開始して応答を待機するタイムアウト)、proxy_connect_timeout 1 秒。
  • nginx がアップストリーム サーバー (実際にアクセスしたサーバー) に送信するタイムアウト期間は proxy_send_timeout 1 秒です。
  • nginx は上流サーバー (実際にアクセスしたサーバー) のタイムアウト proxy_read_timeout 1 秒を受け入れます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx で Brotli 圧縮アルゴリズムを有効にする方法の例
  • Nginx で Brotli アルゴリズム圧縮を有効にする例
  • NginxはGzipアルゴリズムを使用してメッセージを圧縮します
  • Nginxポーリングアルゴリズムの基本的な実装方法の詳細な説明
  • Nginx 7層負荷分散のいくつかのスケジューリングアルゴリズムの簡単な理解
  • C# は Nginx のスムーズな重み付けポーリング アルゴリズムを実装します
  • nginxの4つのスケジューリングアルゴリズムと高度な機能の詳細な分析
  • Brotli圧縮アルゴリズムを有効にするNginxの実装プロセスの詳細な説明

<<:  MySQL マルチテーブル結合クエリ例の説明

>>:  Vue 名前付きスロットの基本的な使用例

推薦する

docker runコンテナの自動終了の解決策

今日、Dockerfile を使用してイメージを作成したときに問題が発生し、イメージの実行後にコンテ...

自動ウェブページ更新と自動ジャンプのサンプルコード

ウェブページの自動更新: <head></head> の間に次のコードを追加...

あまり使われていない、または誤解されている HTML タグ 10 個

ここでは、あまり使われていない、または誤解されている 10 個の HTML タグを紹介します。あまり...

Vue の関連ページへのマルチレベルジャンプ (ページドリルダウン) 機能の完全な例

背景プロジェクト開発プロセスでは、前のページから次のページにジャンプする必要に迫られることがよくあり...

Ubuntu 18.04 のインストールで「ldlinux.c32 のロードに失敗しました」というエラーが表示され、解決手順がわかりません

序文私は Win7 を搭載した古いラップトップを持っています。古いシステムを維持しながら、同時に U...

CSS3 のテキストとフォントの新しい設定

テキストシャドウテキストシャドウ: 水平オフセット 垂直オフセット ぼかし色互換性: IE10+ &...

Docker を使用してエンタープライズレベルのカスタムイメージを構築する方法

序文退社前に、ある依頼を受けました。基本イメージ規格の変更により、最新の Docker イメージ規格...

MySQL データベース開発仕様 [推奨]

最近、問題のある新しい SQL が本番データベースに入力される数を最小限に抑えるために、開発仕様を整...

Linux で tcpdump コマンドを使用してデータ パケットをキャプチャおよび分析する方法の詳細な説明

序文tcpdump はよく知られたコマンドライン パケット分析ツールです。 tcpdump コマンド...

MySQL8の再帰メソッドの使い方を教える

以前、カスタム関数を使用して MySQL でツリー構造を再帰的にクエリする方法についての記事を書きま...

ウェブページを作るときに知っておくべきいくつかのスキル

1. IE6 では z-index が無効です。 CSS では、階層を変更するために z-index...

画像を読み込むための JavaScript キャンバス

この記事では、画像を読み込むためのJavaScriptキャンバスの具体的なコードを参考までに紹介しま...

jQueryは居住地を選択するためのドロップダウンボックスを実装します

居住地を選択するためのドロップダウンボックスをjQueryで実装するための具体的なコードは参考までに...

JavaScript で 9 グリッドのモバイル パズル ゲームを実装

この記事では、Jiugonggeモバイルパズルゲームを実装するためのJavaScriptの具体的なコ...

HBuilderX で Tomcat 外部サーバーを設定して、JSP インターフェイスを表示および編集する方法の詳細な説明

1. 最初の方法は、ローカルのTomcatを起動してJSPを表示することです。 tomcatのweb...