Nginx の負荷分散構成、ダウンタイム発生時の自動切り替えモード

Nginx の負荷分散構成、ダウンタイム発生時の自動切り替えモード

厳密に言えば、nginx には負荷分散バックエンド ノードのヘルス チェック機能はありませんが、デフォルトの ngx_http_proxy_module モジュールと ngx_http_upstream_module モジュールの関連命令を実行することで、バックエンド ノードに障害が発生したときに自動的に正常なノードに切り替えてアクセスを提供することができます。

以下に、これら 2 つのモジュールの関連する手順を示します。

構文: proxy_connect_timeout 時間;

デフォルト値: proxy_connect_timeout 60 秒;

バックエンド サーバーとの接続を確立するためのタイムアウトを設定します。このタイムアウトは通常 75 秒を超えることはないことに注意してください。

構文: proxy_read_timeout 時間;

デフォルト値: proxy_read_timeout 60 秒;

バックエンド サーバーからの応答を読み取るためのタイムアウトを定義します。このタイムアウトは、応答の送信全体が完了するまでの最大時間ではなく、隣接する 2 つの読み取り操作間の最大時間間隔を指します。バックエンド サーバーがタイムアウト期間内にデータを送信しない場合、接続は閉じられます。

nginx_upstream_check_module モジュールを使用してバックエンドノードのヘルスチェックを実行します。

これは、Taobao 技術チームによって開発された nginx モジュールです。このバージョンの nginx を入手するには、Taobao tengine の公式 Web サイト http://tengine.taobao.org にアクセスしてください。

次のように、nginx.conf 構成ファイルのアップストリームにヘルス チェックを追加します。

アップストリーム名{
  サーバー 192.168.0.21:80;
  サーバー 192.168.0.22:80;
  チェック間隔=3000 上昇=2 下降=5 タイムアウト=1000 タイプ=http;
}

上記の設定は、nameのロードバランシングエントリ内のすべてのノードが3秒ごとにチェックされ、リクエストが2回正常であればマークされることを意味します。

リアルサーバーのステータスはアップです。検出が 5 回失敗すると、リアルサーバーのステータスはダウンとマークされ、タイムアウト期間は 1 秒になります。

nginx_upstream_check_module モジュールでサポートされている命令の意味は次のとおりです。

構文: チェック間隔=ミリ秒 [fall=count] [rise=count] [timeout=ミリ秒] [default_down=true|false] [type=tcp|http|ssl_hello|mysql|ajp] [port=check_port]

デフォルト: パラメータが設定されていない場合、デフォルト値は次のようになります。

間隔=30000 下降=5 上昇=2 タイムアウト=1000 デフォルトダウン=true タイプ=tcp

コンテキスト: 上流

このコマンドは、バックエンド サーバーのヘルス チェック機能を有効にすることができます。

コマンドに続くパラメータの意味は次のとおりです。

interval: バックエンドに送信されるヘルスチェック パケットの間隔。

fall(fall_count): 連続した失敗回数が fall_count に達すると、サーバーはダウンしていると見なされます。

rise(rise_count): 連続成功回数がrise_countに達すると、サーバーは起動していると見なされます。

タイムアウト: バックエンドのヘルス要求のタイムアウト期間。

default_down: サーバーの初期ステータスを設定します。true の場合は、デフォルトでダウンしていることを意味します。false の場合は、アップしていることを意味します。デフォルト値は true です。これは、サーバーが最初は使用不可であると見なされ、ヘルス チェック パッケージが一定数の成功に達するまで正常であるとは見なされないことを意味します。

type: ヘルスチェック パッケージのタイプ。現在、次のタイプがサポートされています。

tcp: 単純な tcp 接続。接続が成功した場合、バックエンドは正常であることを意味します。

ssl_hello: 最初の SSL hello パケットを送信し、サーバーから SSL hello パケットを受信します。

http: HTTP リクエストを送信し、バックエンド応答パケットのステータスに基づいてバックエンドが稼働しているかどうかを判断します。

mysql: MySQL サーバーに接続し、サーバーからのグリーティング パケットを受信して​​、バックエンドが稼働しているかどうかを判断します。

ajp: AJP プロトコルの Cping パケットをバックエンドに送信し、Cpong パケットを受信することでバックエンドが稼働しているかどうかを判断します。

port: バックエンド サーバーの検査ポートを指定します。

実際のサービスとは異なるバックエンド サーバー ポートを指定できます。たとえば、バックエンドがポート 443 でアプリケーションを提供する場合、ポート 80 のステータスをチェックしてバックエンドの正常性を判断できます。

デフォルト値は 0 です。これは、バックエンド サーバーが実際のサービスを提供するために使用するポートと同じであることを意味します。

このオプションは Tengine-1.4.0 で登場しました。

追加知識: nginx タイムアウト自動再送信

1. 現象:

nginx をロードローダーとして使用する場合、URL 応答が一定時間 (通常は 10 分) を超えると、リクエストは自動的に別のマシンに再送信されます。

2. 理由:

nignxi では、タイムアウト後の自動再送信はデフォルトで有効になっており、オフにする必要があります。

3. 解決策:

nginx に設定を追加します:

proxy_next_upstream をオフ;

nginx の負荷分散構成とダウンタイム時の自動切り替え方法については、上記の記事が皆さんに共有したい内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx ロードバランシングの 4 つの構成例
  • Nginx 負荷分散構成の簡単な構成方法
  • nginx のロードバランシングを設定する 5 つの方法
  • Nginx クラスタの負荷分散構成プロセスの分析
  • Nginx のシンプルな負荷分散構成例
  • Linuxシステム構成の詳細な説明 nginx ロードバランシング
  • nginx ロードバランシングの簡単な設定方法
  • Nginx ロードバランシングの設定方法
  • 非常に詳細な nginx 負荷分散構成

<<:  Vueでスワイパープラグインを使用する際の問題を解決する

>>:  MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

推薦する

シングルサインオン制御を実装するためのVueの完全なコード

参考までに、Vue シングル サインオンのデモをご紹介します。詳細を知りたい方のお役に立てれば幸いで...

設定ファイルを変更した後、操作を再開します

余計なことは言わないで、コードだけ見てみましょう〜 # docker-compose をダウン # ...

Apache での ab パフォーマンス テスト結果を分析する

私はパフォーマンス テストを行うために常に Loadrunner を使用してきました。 Loadru...

Tomcat で静的リソースを処理するチュートリアル

序文Tomcat 内のすべてのリクエストは Servlet によって処理され、静的リソースも例外では...

MySQLの文字セット設定を5分で理解しましょう

目次1. コンテンツの概要2. 文字セットと文字順序の概念と関係3. MySQL でサポートされてい...

JavaScript 配列と非配列オブジェクトのディープ クローンとシャロー クローンの原則の詳細な説明

目次シャロークローニングとディープクローニングとは何ですか? 1. アレイのクローンを作成する1.1...

Docker での環境変数の使用とよくある問題の解決策

序文Docker はコンテナの環境変数を設定できます。設定方法は 2 つあります。イメージを作成する...

Vueライフサイクルの違いの詳細な説明

ライフサイクル分類vue の各コンポーネントは独立しており、各コンポーネントには独自のライフサイクル...

MYSQL接続ポートが占有され、ファイルパスエラーが発生する問題を解決します

今朝、私は Wampserver を使用してローカルの win7 マシン上に PHP 環境を構築し、...

MySQL が InnoDB テーブルが独立したテーブルスペースか共有テーブルスペースかを判断する方法の詳細な説明

序文InnoDB はデータをテーブルスペースに保存します。デフォルト設定では、初期サイズが 10 M...

MySQLインデックスが失敗するいくつかの状況の詳細な分析

1. 先頭のあいまいクエリではインデックスを使用できません (「%XX」や「%XX%」など)コード値...

Javascript配列の重複排除のいくつかの方法の詳細な説明

目次アレイ重複排除1 2層forループ(バブルソートの2層ループ記述に類似) 2 ループとインデック...

MySQL の 6 つの一般的な制約タイプの詳細な説明

目次序文1.nullでない2. ユニーク3. デフォルト4.主キー自動増分主キー5. 外部キー6.チ...

nginx+php実行リクエストの動作原理の詳細な説明

PHPの仕組みまず、よく耳にするcgi、php-cgi、fastcgi、php-fpmの関係を理解し...

jconsole を使用してリモート Tomcat サービスを監視する方法

JConsoleとはJConsole は Java 5 で導入されました。 JConsole は、コ...