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

推薦する

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...

img タグの src 属性値が空の場合の 2 つのリクエストの問題 (IE 以外のブラウザ)

img src 値が空の場合、リクエストが 2 つ行われます。一部の学生は以前に同様の状況に遭遇した...

Nginx 仮想ホストを構成する 3 つの方法 (ポートベース) の詳細な説明

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...

Linux xargsコマンドの使用

1. 機能: xargs は、stdin 内のスペースまたは改行で区切られたデータをスペースで区切ら...

MySQL エラー: 接続数が多すぎる場合の解決策

MySQLデータベースの接続が多すぎますこのエラーは明らかに、mysql_connect の後に m...

jsは、州、市、地区の3レベルのリンクの非選択ドロップダウンボックスバージョンを実現します。

インターネットで3レベルリンクを検索したところ、すべてオプションで書かれていました。突然、別の方法で...

CentOS6で定期的にjarプログラムを実行するスクリプトをcrontabで実行する

1. 簡単なJavaプログラムを書く パブリッククラステストシェル{ パブリック静的voidメイン(...

js でショッピングモールのシミュレーションを実現

HTML、CSS、JSフロントエンドを学習中の皆さん、今回はショッピングモールの事例の実装をシェアし...

pt-heartbeat を使用して MySQL レプリケーションの遅延を監視する方法の詳細な説明

pt-ハートビートデータベースがマスターとスレーブ間で複製される場合、複製ステータスとデータ遅延は非...

CSS3 で翻訳効果 (transfrom: translate) を実装する例

移動を実現するためにtranslateパラメータを使用しますtranslateX: X 軸に沿って移...

Tudou.comのホームページのデザイン方法

<br />私は数年間フロントエンドに取り組んできました。フロントエンドについて完全に理...

div+css3 を使用して背景グラデーション ボタンを実装するためのサンプル コード

フロントエンド ページの需要が増加し続けるにつれて、一部のシーンではグラデーションの背景要素が必要に...

Ubuntu 20.04でLNMP環境を構築する方法

簡単な説明以前 Centos7 で構築し、その後個人開発環境として Ubuntu 20.04 を使っ...