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 名前付きスロットの基本的な使用例

推薦する

Vue はネストされたルーティングメソッドの例を実装します

1. ネストされたルーティングはサブルーティングとも呼ばれます。実際のアプリケーションでは、通常、ネ...

LinuxサーバのSSHクラッキング防止方法(推奨)

1. Linuxサーバーは、/etc/hosts.denyを設定して、相手のIPがSSH経由でサー...

SSH経由でリモートLinuxシステムでコマンドを実行する方法

場合によっては、リモート マシンでいくつかのコマンドを実行する必要があることがあります。これが時々行...

Windows 環境での MySQL の解凍、インストール、バックアップ、復元

システム環境はserver2012です1. MySQLの解凍バージョンをダウンロードし、インストール...

iframe src 割り当ての問題 (サーバー側)

今日この問題に遭遇しました。サーバー側でiframeのsrc値を再割り当てし、iframeにIDを追...

実行中の Docker コンテナにボリュームを動的に追加する方法

以前、Docker コンテナの起動後にボリュームをマウントできるかどうか尋ねられたことがあります。m...

HTMLとリソースがどのように読み込まれるかを理解します

このブログのすべてのコンテンツは、クリエイティブ コモンズ ライセンスの下でライセンスされています。...

WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)

WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...

Docker でコンテナのポート マッピングを動的に変更する方法

前書き: Docker のポート マッピングは、多くの場合、Docker Run コマンド中に -p...

ECMAScript の演算子を理解するための記事

目次単項演算子ブール演算子乗算演算子加法演算子関係演算子等価演算子条件演算子代入演算子カンマ演算子要...

XHTML 入門チュートリアル: よく使われる XHTML タグ

<br />記事と同様に、Web ページにも明確な段落と重要度の異なるタイトルが必要です...

MySQLの浅いエントリと深いエグジットの原則についての簡単な説明

目次1. ページの概要2. 下限と上限3. ページディレクトリを使用する4. ページの実際の外観4....

HTML ハイパーリンク スタイル (4 つの異なる状態) の設定例

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

JavaScript offsetParent のケーススタディ

1. offsetParentの定義: offsetParentは子要素に最も近い位置に配置された親...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...