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 時間遅れている理由の詳細な説明

推薦する

単純なCSSの詳細に惚れ込むと、重要ではないものの、効率性が向上する可能性がある

CSS の将来は非常に楽しみです。一方では、まったく新しいページ レイアウト方法であり、他方では、ク...

Linux Centos7 に mysql8 をインストールするチュートリアル

1. RPMバージョンのインストールデータベースの他のバージョンがあるかどうかを確認し、ある場合は完...

CSS 前景と背景の自動カラーマッチング技術の紹介 (デモ)

1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...

MySQLクエリ文の実行プロセスの詳細な説明

目次1. クライアントとサーバー間の通信方法2. クエリキャッシュ3. クエリ最適化処理4. クエリ...

Vueがsweetalert2プロンプトコンポーネントを統合する際の問題についてお話ししましょう

目次1. プロジェクト統合1. CDNインポート方法: 2. 箱の梱包を確認する3. 迅速な箱詰め4...

MySQL パフォーマンス最適化のヒント

MySQL パフォーマンスの最適化MySQL はインターネット企業で広く使用されており、MySQL ...

バックアップと削除のためにリアルタイムでステートメントを検出するMySQLトリガーの考え方の詳細な説明

問題の説明: ユーザーは、テーブルに「違反」という単語を含むフィールドが時々表示されることを要求して...

HTML での Li タグの使用例

タイトルを左に、日付を右に揃えたいのですが、日付の範囲に float:right を直接追加すると、...

Vue3コンポーネントの開発詳細

目次1. はじめに2. コンポーネント開発1. コンポーネントの構成2. ヘッダーコンポーネントの開...

vue+springbootでログイン機能を実現

この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考まで...

Vue.js フロントエンド Web ページ ポップアップ非同期動作例の分析

目次1. 序文2. ポップアップコンポーネントを2つ見つける3. 自分で作る3.1. Promise...

spanタグのスタイルに幅属性を設定する方法

span タグのスタイルに width 属性を直接設定すると、効果がないことがわかります。 disp...

CSSにおけるマージン値と垂直マージンの重なりについて

平行ボックスの余白 (二重余白の重なり) に関する面接の質問: 1 つのボックスに上余白があり、もう...

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が...

フロントエンドネットワーク、JavaScriptの最適化、開発のヒントについて簡単に説明します。

1. ネットワークの最適化YSlowには23のルールがあります。これら数十のルールは、主に、不要な...