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

推薦する

JavaScriptはeコマースプラットフォームの製品詳細を実装します

この記事では、電子商取引プラットフォームで商品の詳細を表示する一般的な例を紹介します。たとえば、ある...

Vueはログインジャンプを実装する

この記事では、ログインジャンプを実装するためのVueの具体的なコードを例として紹介します。具体的な内...

HTML+CSS をベースにした素敵なフリップログインおよび登録インターフェースを作成します

素敵なフリップログインと登録インターフェースを作成する序文最近、ネットワーク ディスクを構築しようと...

wgetはウェブサイト全体(サブディレクトリ全体)または特定のディレクトリをダウンロードします

wgetコマンドを使用して、親ディレクトリの下のサブディレクトリ全体をダウンロードします。親ディレク...

Linux CentOS MySQL データベースのインストールと設定のチュートリアル

MySQLデータベースのインストールに関するメモ、みんなで共有a) MySQL ソースインストールパ...

Linux のソフトリンクとハードリンクの詳細な説明

目次1. ファイルとディレクトリの基本的な保存2. Inコマンドの紹介(1)lnコマンドの基本情報を...

NextCloud プライベート クラウド ストレージ ネットワーク ディスクの構築に関する詳細なチュートリアル

Nextcloud は、オープンソースで無料のプライベート クラウド ストレージ ネットワーク ディ...

Alibaba CloudにMySQLをインストールする方法の詳細な説明

軽量のオープンソース データベースである MySQL は、エンタープライズ レベルのアプリケーション...

プロトタイプとプロトタイプチェーン プロトタイプとプロトタイプの詳細

目次1. プロトタイプ2. プロトタイプチェーン2.1 コンストラクタ2.2 電話をかける/申し込む...

初心者向けウェブサイト構築チュートリアルの概要

これら 6 つの記事を書いた後、私は少し混乱し始めました。次にどこに書けばいいのか分かりません。ドメ...

alpineをベースにdockerfileで作成したtomcatイメージの実装

1.アルパインイメージをダウンロードする [root@docker43 ~]# docker pul...

Mysqlの自動増分IDについて知らないことがあるかもしれません

導入: MySQL を使用してテーブルを作成する場合、通常は自動インクリメント フィールド (AUT...

スローモーションアニメーション効果を実現するJavaScript

この記事では、スローモーションアニメーション効果を実現するためのJavaScriptの具体的なコード...

MySQL での coalesce() の使用に関するヒントのまとめ

序文最近、偶然 MySQL の coalesce を発見しました。ちょうど時間があったので、MySQ...

Linux 環境に nginx をインストールするチュートリアル

目次1. 必要な環境をインストールする //gccをインストールする yum で gcc-c++ を...